Организация ввода-вывода. Драйверы WDM. Рощин А.В. - 35 стр.

UptoLike

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

35
Седьмой, последний, аргумент (&fdo) содержит указатель на адрес
созданного объекта устройства.
В случае неудачи функция возвращает соответствующий код состояния и не
изменяет указатель, заданный последним аргументом. При удачном завершении
функция возвращает соответствующий код и задает указатель
PDEVICE_OBJECT.
После успешного завершения функции можно заняться инициализацией
поля расширения объекта. Если при
этом возникнет ошибка, следует освободить
память, занимаемую объектом устройства и вернуть соответствующий код
ошибки.
Код обработки неудачи выглядит примерно так:
NTSTATUS status = IoCreateDevice(…);
if (!NT_SUCCESS(status))
return status;
if (<какая-то еще ошибка>)
{
IoDeleteDevice(fdo);
return status;
}
2.7 Инициализация расширения устройства (DEVICE_EXTENSION)
Содержимое расширения устройства зависит от особенностей устройства и
способов его программирования. Заполнение этой структуры и работа с ней
возложена полностью на автора драйвера.
В большинстве драйверов в расширение устройства включены следующие
атрибуты:
typedef struct _DEVICE_EXTENSION { //1
PDEVICE_OBJECT DeviceObject; //2
PDEVICE_OBJECT LowerDeviceObject; //3
PDEVICE_OBJECT Pdo; //4
UNICODE_STRING ifname; //5
IO_REMOVE_LOCK RemoveLock; //6
     Седьмой, последний, аргумент (&fdo) содержит указатель на адрес
созданного объекта устройства.
     В случае неудачи функция возвращает соответствующий код состояния и не
изменяет указатель, заданный последним аргументом. При удачном завершении
функция     возвращает    соответствующий     код   и    задает   указатель
PDEVICE_OBJECT.
     После успешного завершения функции можно заняться инициализацией
поля расширения объекта. Если при этом возникнет ошибка, следует освободить
память, занимаемую объектом устройства и вернуть соответствующий код
ошибки.
     Код обработки неудачи выглядит примерно так:
     NTSTATUS status = IoCreateDevice(…);
     if (!NT_SUCCESS(status))
         return status;
     …
     if (<какая-то еще ошибка>)
     {
         IoDeleteDevice(fdo);
         return status;
     }


     2.7 Инициализация расширения устройства (DEVICE_EXTENSION)
     Содержимое расширения устройства зависит от особенностей устройства и
способов его программирования. Заполнение этой структуры и работа с ней
возложена полностью на автора драйвера.
     В большинстве драйверов в расширение устройства включены следующие
атрибуты:
typedef struct _DEVICE_EXTENSION {          //1
     PDEVICE_OBJECT DeviceObject;           //2
     PDEVICE_OBJECT LowerDeviceObject; //3
     PDEVICE_OBJECT Pdo;                    //4
     UNICODE_STRING ifname;                 //5
     IO_REMOVE_LOCK RemoveLock;             //6
                                     35