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

UptoLike

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

29
Поле DeviceExtension (PVOID) указывает на структуру данных,
содержащую информацию о конкретном экземпляре устройства. Структуру
определяет автор драйвера.
Поле DeviceType (DEVICE_TYPE) содержит константу перечислимого
типа, соответствующую типу устройства. Диспетчер ввода-вывода заполняет это
поле в соответствии с четвертым аргументом функции IoCreateDevice.
В поле StackSize (CCHAR) содержится количество объектов устройства от
текущего до нижнего уровня
PDO.
Поле AlignmentRequirement (ULONG) определяет требования к
выравниванию буферов данных, используемых запросами на чтение или запись в
устройство. Файл WDM.H содержит набор констант от
FILE_BYTE_ALIGNMENT до FILE_512_BYTE_ALIGNMENT. Значение
константы определяется границей выравнивания (соответствующая степень
двойки) –1. Так FILE_64_BYTE_ALIGNMENT=0x3F (63D).
Далее рассмотрим основные необходимые функции драйвера.
2.3 Функция DriverEntry
Как уже говорилось выше,
диспетчер PnP при обнаружении нового
устройства загружает необходимые драйверы и вызывает их функции AddDevice.
Однако драйвер при загрузке может требовать собственной инициализации,
которая выполняется при его загрузке. За эту глобальную инициализацию
отвечает функция DriverEntry.
Ее прототип выглядит так:
extern “C” NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPatch)
{
}
Разберем прототип по элементам.
extern “C” позволяет использовать компилируемые модули C++, в
котором, в отличии от С, объявлять переменные можно не только за
открывающей скобкой, но и в любом другом месте. Кроме того, эта директива
      Поле    DeviceExtension        (PVOID)   указывает    на     структуру    данных,
содержащую информацию о конкретном экземпляре устройства. Структуру
определяет автор драйвера.
      Поле DeviceType (DEVICE_TYPE) содержит константу перечислимого
типа, соответствующую типу устройства. Диспетчер ввода-вывода заполняет это
поле в соответствии с четвертым аргументом функции IoCreateDevice.
      В поле StackSize (CCHAR) содержится количество объектов устройства от
текущего до нижнего уровня PDO.
      Поле    AlignmentRequirement        (ULONG)     определяет       требования     к
выравниванию буферов данных, используемых запросами на чтение или запись в
устройство.     Файл         WDM.H        содержит         набор      констант       от
FILE_BYTE_ALIGNMENT             до     FILE_512_BYTE_ALIGNMENT.                Значение
константы определяется границей выравнивания (соответствующая степень
двойки) –1. Так FILE_64_BYTE_ALIGNMENT=0x3F (63D).
      Далее рассмотрим основные необходимые функции драйвера.


      2.3 Функция DriverEntry
      Как уже говорилось выше, диспетчер PnP при обнаружении нового
устройства загружает необходимые драйверы и вызывает их функции AddDevice.
      Однако драйвер при загрузке может требовать собственной инициализации,
которая выполняется при его загрузке. За эту глобальную инициализацию
отвечает функция DriverEntry.
      Ее прототип выглядит так:
extern “C” NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
  IN PUNICODE_STRING RegistryPatch)
  {
  }
      Разберем прототип по элементам.
      extern “C” – позволяет использовать компилируемые модули C++, в
котором, в отличии от С, объявлять переменные можно не только за
открывающей скобкой, но и в любом другом месте. Кроме того, эта директива

                                          29