ВУЗ:
Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 33
- 34
- 35
- 36
- 37
- …
- следующая ›
- последняя »