当前位置: 代码迷 >> 驱动开发 >> 关于读取OpenProcess基址导致系统蓝屏的有关问题
  详细解决方案

关于读取OpenProcess基址导致系统蓝屏的有关问题

热度:414   发布时间:2016-04-28 09:59:36.0
关于读取OpenProcess基址导致系统蓝屏的问题
各位前辈,小弟在做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;