1549

NDIS-hooking driver

Пишу kernel-mode драйвер для Win32 файервола. Как самый надёжный и переносимый способ выбрал = перехват вызовов NDIS.sys драйвера. на XP синий экран при патче экспортных таблиц.Никто не сталкивался?/** * @fn Fix export table in module * @parampModuleImgbase address of module * @paramfunctionToReplacename of function * @parampNewFunctionnew address of function * @returnold address of function * @retvalNULL if function failed to patch export table */void *patchExportTable(char *pModuleImg, const char *functionToReplace, void *pNewFunction){PIMAGE_DOS_HEADER pDosHeader;PIMAGE_NT_HEADERS pNtHeader;PIMAGE_EXPORT_DIRECTORY pExportTable;ULONG *functionName, *functionAddress, i;pDosHeader = (PIMAGE_DOS_HEADER)pModuleImg;if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE)return NULL;pNtHeader = (PIMAGE_NT_HEADERS)(pModuleImg + pDosHeader->e_lfanew);pExportTable = (PIMAGE_EXPORT_DIRECTORY)(pModuleImg + pNtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);functionName = (ULONG *)(pModuleImg + pExportTable->AddressOfNames);functionAddress = (ULONG *)(pModuleImg + pExportTable->AddressOfFunctions);for (i = 0; i NumberOfNames; i++, functionName++, functionAddress++) {if (strcmp(functionToReplace, pModuleImg + *functionName) == 0) {void *pOldFunction = pModuleImg + *functionAddress;// replace value??????????? Как подменить, кто-то знает?return pOldFunction;}}return NULL;}
0