доброго!
Вообще этого не корректно. в смысле макрос проверки PAGED_CODE() поставлен некорректно...
PAGED_CODE — это контроль того, что функция выполняется на IRQL < DISPATCH_LEVEL, это работает только в checked-версии. просто немного упрощает отлов ошибок, связанных с выполнением кода на недопустимо высоком IRQL. Ну и вообще код более читабельный, видим макрос в начале функции, и ясно, что на DISPATCH_LEVEL ее вызывать не надо.
А главное при компиляции необходимо указать, что функцию DispatchControl() необходимо разместить в nonpaged секции (.text называлась). Делал при помощи #pragma:
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, DriverUnload)
#pragma alloc_text(PAGE, AddDevice)
#pragma alloc_text(PAGE, DispatchSystemControl)
#pragma alloc_text(PAGE, CommonDispatch)
#pragma alloc_text(TEXT, HwInt_01)
последний - как раз размещение функции обработчика прерывания HwInt_01( IN PKINTERRUPT Interrupt, IN PDEVICE_EXTENSION_MY devExt) в nonpaged секции(.text).
ну и в ключах линкера необходимо так же указать слияние секций...
-MERGE:_PAGE=PAGE -MERGE:_TEXT=.text -SECTION:INIT,d
-MERGE:.rdata=.text -optidata -driver -align:0x20 -osversion:5.00 -subsystem:native,1.10 -driver:WDM -debug:notmapped,MINIMAL
это копипаста из моего старого проекта pci драйвера там помоему в отдельной строке было задано.
вот тут чуть подробнее наверное
Блокировка страничного кода или данных на microsoft.com ЗЫ
Making Drivers PageableBy default, the linker assigns names such as ".text" and ".data" to the code and data sections of a driver image file. When the driver is loaded, the I/O manager makes these sections nonpaged. A nonpaged section is always memory-resident.
ЗЗЫ
Locking Pageable Code or DataTo isolate the pageable code into a named section, mark it with the following compiler directive:
#pragma alloc_text(PAGE*Xxx, *RoutineName)
The name of a pageable code section must start with the four letters "PAGE" and can be followed by up to four characters (represented here as Xxx) to uniquely identify the section. The first four letters of the section name (that is, "PAGE") must be capitalized. The RoutineName identifies an entry point to be included in the pageable section.