При вызове IoConnectInterrupt первым параметром идет указатель на переменную типа PKINTERRUPT которая всою очередь описана как typedef struct _KINTERRUPT *PKINTERRUPT в файле WDM.h. Подскажите что представляет из себя _KINTERRUPT? Помогите кто может. перелопатил все заголовочные файлы DDK, ничего не нашел!!! sf_phantom2@mail.ru
Код (Text): struct _KINTERRUPT { // static data ------------------------------------ // non-static data -------------------------------- /*<thisrel this+0x0>*/ /*|0x2|*/ short Type; /*<thisrel this+0x2>*/ /*|0x2|*/ short Size; /*<thisrel this+0x4>*/ /*|0x8|*/ struct _LIST_ENTRY InterruptListEntry; /*<thisrel this+0xc>*/ /*|0x4|*/ unsigned char (ServiceRoutine*)(struct _KINTERRUPT*, void*); /*<thisrel this+0x10>*/ /*|0x4|*/ void* ServiceContext; /*<thisrel this+0x14>*/ /*|0x4|*/ unsigned long SpinLock; /*<thisrel this+0x18>*/ /*|0x4|*/ unsigned long TickCount; /*<thisrel this+0x1c>*/ /*|0x4|*/ unsigned long* ActualLock; /*<thisrel this+0x20>*/ /*|0x4|*/ void (DispatchAddress*)(); /*<thisrel this+0x24>*/ /*|0x4|*/ unsigned long Vector; /*<thisrel this+0x28>*/ /*|0x1|*/ unsigned char Irql; /*<thisrel this+0x29>*/ /*|0x1|*/ unsigned char SynchronizeIrql; /*<thisrel this+0x2a>*/ /*|0x1|*/ unsigned char FloatingSave; /*<thisrel this+0x2b>*/ /*|0x1|*/ unsigned char Connected; /*<thisrel this+0x2c>*/ /*|0x1|*/ char Number; /*<thisrel this+0x2d>*/ /*|0x1|*/ unsigned char ShareVector; /*<thisrel this+0x30>*/ /*|0x4|*/ enum _KINTERRUPT_MODE Mode; /*<thisrel this+0x34>*/ /*|0x4|*/ unsigned long ServiceCount; /*<thisrel this+0x38>*/ /*|0x4|*/ unsigned long DispatchCount; /*<thisrel this+0x3c>*/ /*|0x1a8|*/ unsigned long DispatchCode[106]; };
Огромное спасибо, и еще один вопрос откуда и каким образом добыта эта информация? Просто надоедает быть слепым котенком.
volodya //offtop Идет ли работа над 3й часть упаковщиков? полдня искал pdbdump нет чтоб поискать в инструментах здесь же! )
Ms Rem Если я напишу ее на си так: Код (Text): struct _KINTERRUPT { WORD Type; WORD Size; struct _LIST_ENTRY InterruptListEntry; UCHAR (ServiceRoutine*)(struct _KINTERRUPT*, void*); void* ServiceContext; DWORD SpinLock; DWORD TickCount; DWORD* ActualLock; void (DispatchAddress*)(); DWORD Vector; UCHAR Irql; UCHAR SynchronizeIrql; UCHAR FloatingSave; UCHAR Connected; char Number; UCHAR ShareVector; enum _KINTERRUPT_MODE Mode; DWORD ServiceCount; DWORD DispatchCount; DWORD DispatchCode[106]; }; // <size 0x1e4> и за юзаю в 1.cpp: Код (Text): #include <windows.h> #include "ntoskrnl.h" int main() { return 0; } Почему то жутко марится компилятор! Наверняка чтото упускаю, но что?