Организация ввода-вывода. Часть 2. Драйверы для WINDOWS NT. Рощин А.В. - 107 стр.

UptoLike

Составители: 

107
PVERIFY_INFORMATION verifyInformation;
verifyInformation = Irp->AssociatedIrp.SystemBuffer;
irpSp->Parameters.Read.ByteOffset.LowPart =
verifyInformation->StartingOffset.LowPart;
irpSp->Parameters.Read.ByteOffset.HighPart =
verifyInformation->StartingOffset.HighPart;
irpSp->Parameters.Read.Length = verifyInformation->Length;
ntStatus = RamDiskReadWrite( DeviceObject, Irp );
}
return ntStatus;
default:
Нераспознанная функция. Ошибка
break;
}
Закончить операцию ввода-вывода.
ntStatus = Irp->IoStatus.Status;
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return ntStatus;
}
NTSTATUS
RamDiskReadWrite(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
Эта процедура вызывается для чтения и записи данных.
Аргументы:
DeviceObjectуказатель объект драйвера
Irpуказатель на запрос ввода-вывода
Возвращаемое значение:
STATUS_INVALID_PARAMETER если параметр неверен, иначе
STATUS_SUCCESS.
{
PRAMDISK_EXTENSION diskExtension;
PIO_STACK_LOCATION irpSp;
PUCHAR CurrentAddress;
Инициализация и проверка на правильность параметра
    PVERIFY_INFORMATION        verifyInformation;

    verifyInformation = Irp->AssociatedIrp.SystemBuffer;

    irpSp->Parameters.Read.ByteOffset.LowPart =
           verifyInformation->StartingOffset.LowPart;
    irpSp->Parameters.Read.ByteOffset.HighPart =
           verifyInformation->StartingOffset.HighPart;
    irpSp->Parameters.Read.Length = verifyInformation->Length;

     ntStatus = RamDiskReadWrite( DeviceObject, Irp );
    }
    return ntStatus;

  default:
     Нераспознанная функция. Ошибка
  break;
 }
     Закончить операцию ввода-вывода.
ntStatus = Irp->IoStatus.Status;

IoCompleteRequest( Irp, IO_NO_INCREMENT );

return ntStatus;
}

NTSTATUS
RamDiskReadWrite(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
    Эта процедура вызывается для чтения и записи данных.
       Аргументы:
       DeviceObject – указатель объект драйвера
       Irp – указатель на запрос ввода-вывода
       Возвращаемое значение:
       STATUS_INVALID_PARAMETER              если   параметр   неверен,   иначе
STATUS_SUCCESS.
{
     PRAMDISK_EXTENSION        diskExtension;
     PIO_STACK_LOCATION        irpSp;
     PUCHAR                    CurrentAddress;

    … Инициализация и проверка на правильность параметра




                                       107