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

UptoLike

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

105
DeviceObjectуказатель на объект представляемого устройства
Irpуказатель на запрос ввода-вывода для этого вызова
Возвращаемое значение:
STATUS_INVALID_PARAMETER если параметры заданы неверно,
иначе STATUS_SUCCESS.
{
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}
NTSTATUS
RamDiskDeviceControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
Функция реализует ioctl функции
Аргументы:
DeviceObjectуказатель на объект устройства
Irpуказатель на запрос ввода-вывода
Возвращаемое значение:
STATUS_SUCCESS если поддерживаемый запрос, иначе
STATUS_INVALID_DEVICE_REQUEST.
{
PRAMDISK_EXTENSION diskExtension;
PIO_STACK_LOCATION irpSp;
NTSTATUS ntStatus;
Инициализация
По умолчаниюневерный запрос
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
Определяет, какая функция требуется
switch ( irpSp->Parameters.DeviceIoControl.IoControlCode )
{
case IOCTL_DISK_GET_MEDIA_TYPES:
case IOCTL_DISK_GET_DRIVE_GEOMETRY:
Возвращает параметры диска, так называемую геометрию
       DeviceObject – указатель на объект представляемого устройства
       Irp – указатель на запрос ввода-вывода для этого вызова
       Возвращаемое значение:
       STATUS_INVALID_PARAMETER если параметры заданы неверно,
иначе STATUS_SUCCESS.
{
      Irp->IoStatus.Status = STATUS_SUCCESS;
      Irp->IoStatus.Information = 0;

      IoCompleteRequest( Irp, IO_NO_INCREMENT );

      return STATUS_SUCCESS;
}
NTSTATUS
RamDiskDeviceControl(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
    Функция реализует ioctl функции
       Аргументы:
       DeviceObject – указатель на объект устройства
       Irp – указатель на запрос ввода-вывода
       Возвращаемое значение:
       STATUS_SUCCESS         если     поддерживаемый       запрос,    иначе
STATUS_INVALID_DEVICE_REQUEST.
{
    PRAMDISK_EXTENSION      diskExtension;
    PIO_STACK_LOCATION      irpSp;
    NTSTATUS                ntStatus;

     … Инициализация
     По умолчанию – неверный запрос
    Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;

     Определяет, какая функция требуется
    switch ( irpSp->Parameters.DeviceIoControl.IoControlCode )
    {

    case IOCTL_DISK_GET_MEDIA_TYPES:
    case IOCTL_DISK_GET_DRIVE_GEOMETRY:
            … Возвращает параметры диска, так называемую геометрию



                                      105