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

UptoLike

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

34
PDEVICE_OBJECT fdo;
NTSTATUS status = IoCreateDevice(DriverObject,
sizeof(DEVICE_EXTESION), NULL, FILE_DEVICE_UNKNOWN,
FILE_DEVICE_SECURE_OPEN, FALSE, &fdo);
Первый аргумент функции (DriverObject) аналогичен первому аргументу
функции AddDevice. Он связывает драйвер с новым объектом устройства для
того, чтобы диспетчер ввода-вывода знал, кому посылать пакеты IRP,
предназначенные для этого устройства.
Второй аргумент сообщает размер структуры расширения устройства,
определенной автором драйвера (она содержит данные о конкретном экземпляре
устройства). В соответствии
с этим аргументом диспетчер ввода-вывода выделяет
память для этой структуры и помещает указатель на нее в поле
DEVICE_EXTESION объекта устройства.
Третий аргумент может содержать адрес строки UNICODE_TRING с
именем объекта устройства, если оно определено. В нашем случае имя не
определено, поэтому значение аргумента NULL.
Четвертый аргумент определяет тип устройства (один
из определенных в
WDM.H), в данном случае FILE_DEVICE_UNKNOWN. Это значение может быть
переопределено в разделе оборудования устройства или в разделе класса
системного реестра. (Если определения записаны в обоих разделах, то раздел
оборудования имеет больший приоритет.) В одном из трех мест (в аргументе
функции или хотя бы в одном разделе реестра)
должен быть указан правильный
тип устройства. В противном случае драйвер не сможет правильно
функционировать.
Пятый аргумент FILE_DEVICE_SECURE_OPEN содержит флаги поля
Characteristics, объекта устройства, описанные выше. Указанное значение может
быть переопределено таким же образом, как и предыдущий аргумент.
Шестой аргумент (FALSE), позволяет задать монопольный режим
обслуживания устройства. (Лучше этого не делать.) Указанное
значение также
может быть переопределено, как и предыдущие аргументы.
      PDEVICE_OBJECT fdo;
      NTSTATUS status = IoCreateDevice(DriverObject,
         sizeof(DEVICE_EXTESION), NULL, FILE_DEVICE_UNKNOWN,
         FILE_DEVICE_SECURE_OPEN, FALSE, &fdo);
      Первый аргумент функции (DriverObject) аналогичен первому аргументу
функции AddDevice. Он связывает драйвер с новым объектом устройства для
того, чтобы диспетчер ввода-вывода знал, кому посылать                    пакеты IRP,
предназначенные для этого устройства.
      Второй аргумент сообщает размер структуры расширения устройства,
определенной автором драйвера (она содержит данные о конкретном экземпляре
устройства). В соответствии с этим аргументом диспетчер ввода-вывода выделяет
память   для   этой       структуры    и    помещает    указатель    на   нее    в   поле
DEVICE_EXTESION объекта устройства.
      Третий аргумент может содержать адрес строки UNICODE_TRING с
именем объекта устройства, если оно определено. В нашем случае имя не
определено, поэтому значение аргумента NULL.
      Четвертый аргумент определяет тип устройства (один из определенных в
WDM.H), в данном случае FILE_DEVICE_UNKNOWN. Это значение может быть
переопределено в разделе оборудования устройства или в разделе класса
системного реестра. (Если определения записаны в обоих разделах, то раздел
оборудования имеет больший приоритет.) В одном из трех мест (в аргументе
функции или хотя бы в одном разделе реестра) должен быть указан правильный
тип   устройства.     В    противном       случае   драйвер   не    сможет      правильно
функционировать.
      Пятый аргумент FILE_DEVICE_SECURE_OPEN содержит флаги поля
Characteristics, объекта устройства, описанные выше. Указанное значение может
быть переопределено таким же образом, как и предыдущий аргумент.
      Шестой аргумент (FALSE), позволяет задать монопольный режим
обслуживания устройства. (Лучше этого не делать.) Указанное значение также
может быть переопределено, как и предыдущие аргументы.


                                             34