各位前辈,小弟在做NT驱动编程是遇到以下一个问题,请大家请教问题所在。
加以下代码前,驱动都是运行正常的,加以下代码后,用drivermonitor加载运行后就蓝屏了。
在头文件中加载以下代码:
typedef struct _ServiceDescriptorTable
{
PVOID ServiceTableBase; //SSDT的基地址
PVOID ServieCouterTable; //包含着SSDT中每个服务被调用次数的计数器,这个计数器由sysenter更新
unsigned int NumberOfService; //由ServiceTableBase 描述的服务的数目
PVOID ParamTableBase;
}ServiceDescriptorTable, *PServiceDescriptorTable;
extern PServiceDescriptorTable KeServiceDescriptorTable;
在源文件中添加了以下代码:
#pragma PAGECODE
//VOID Disp_SSDT_NtOpenProcess_CurAddr()
//{
// LONG SSDTBase; //SSDT 的基地址
// LONG *NtOpenProcessSSDTAddr; //在SSDT中的地址
// LONG NtOpenProcessAddr; //实际的地址
//
// KdPrint(("Enter Dis_SSDT_NtOpenProcess_CurAddr\n"));
//
// SSDTBase = (LONG)KeServiceDescriptorTable->ServiceTableBase;
// KdPrint(("SSDTBASE:%x", SSDTBase));
//
// NtOpenProcessSSDTAddr = (PLONG)(SSDTBase+0x7A*4);
// KdPrint(("NtOpenProcessSSDTAddr:%x", NtOpenProcessSSDTAddr));
//
// NtOpenProcessAddr = *NtOpenProcessSSDTAddr;
// KdPrint(("NtOpenProcessAddr:%x", NtOpenProcessAddr));
//
//
//}
编译连接都是正常,但是加载后就蓝屏,请问是什么原因呢。
------解决思路----------------------
extern "C" PServiceDescriptorTable KeServiceDescriptorTable;