ВУЗ:
Составители:
31
Эта функция должна присутствовать, даже, если деинициализация не
нужна. Она необходима для динамической выгрузки драйвера.
− DriverExtension
Æ
AddDevice – указатель на функцию AddDevice
драйвера. Диспетчер PnP однократно вызывает эту функцию для каждого
экземпляра оборудования, обслуживаемого драйвером.
− DriverStartIo – в этом поле содержится указатель на функцию StartIo,
если драйвер использует стандартный метод формирования очередей
запросов ввода-вывода.
− MajorFunction – диспетчер ввода-вывода помещает сюда указатели на
фиктивную диспетчерскую функцию,
которая сообщает о неудачной
обработке запроса. Ранее уже говорилось, что драйвер должен
обрабатывать какие-то IRP, поэтому хотя бы некоторые из указателей
должны ссылаться на ваши диспетчерские функции. Драйвер обязательно
должен обрабатывать запросы ввода-вывода PnP _ POWER и
SYSTEM_CONTROL.
Итак, рассмотрим примерный код функции DriverEntry:
extern “C” NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
DriverObject->DriverUnload = DriverUnload; //1
DriverObject->DriverExtension->AddDevice = AddDevice;
DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp; //2
DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] =
DispatchWmi;
… //3
servkey.Buffer = (PWSTR) ExAllocatePool(PagePool, //4
RegistryPath->Length + sizeof(WCHAR));
if (!servkey.Buffer)
return STATUS_INSUFFICIENT_RESOURCES;
servkey.MaximumLength = RegistryPath->Length + sizeof(WCHAR));
RtlCopyUnicodeString(&servkey, RegistryPath);
Эта функция должна присутствовать, даже, если деинициализация не
нужна. Она необходима для динамической выгрузки драйвера.
− DriverExtension Æ AddDevice – указатель на функцию AddDevice
драйвера. Диспетчер PnP однократно вызывает эту функцию для каждого
экземпляра оборудования, обслуживаемого драйвером.
− DriverStartIo – в этом поле содержится указатель на функцию StartIo,
если драйвер использует стандартный метод формирования очередей
запросов ввода-вывода.
− MajorFunction – диспетчер ввода-вывода помещает сюда указатели на
фиктивную диспетчерскую функцию, которая сообщает о неудачной
обработке запроса. Ранее уже говорилось, что драйвер должен
обрабатывать какие-то IRP, поэтому хотя бы некоторые из указателей
должны ссылаться на ваши диспетчерские функции. Драйвер обязательно
должен обрабатывать запросы ввода-вывода PnP _ POWER и
SYSTEM_CONTROL.
Итак, рассмотрим примерный код функции DriverEntry:
extern “C” NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
DriverObject->DriverUnload = DriverUnload; //1
DriverObject->DriverExtension->AddDevice = AddDevice;
DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp; //2
DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] =
DispatchWmi;
… //3
servkey.Buffer = (PWSTR) ExAllocatePool(PagePool, //4
RegistryPath->Length + sizeof(WCHAR));
if (!servkey.Buffer)
return STATUS_INSUFFICIENT_RESOURCES;
servkey.MaximumLength = RegistryPath->Length + sizeof(WCHAR));
RtlCopyUnicodeString(&servkey, RegistryPath);
31
Страницы
- « первая
- ‹ предыдущая
- …
- 29
- 30
- 31
- 32
- 33
- …
- следующая ›
- последняя »
