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

Hello_TeD 2015-05-08 10:45:55
各位前辈,小弟在做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));
//
//
//}
编译连接都是正常,但是加载后就蓝屏,请问是什么原因呢。
...全文
168 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathletboy 2015-05-08
  • 打赏
  • 举报
回复
应该要这样才可以
pathletboy 2015-05-08
  • 打赏
  • 举报
回复
extern "C" PServiceDescriptorTable KeServiceDescriptorTable;
Hello_TeD 2015-05-08
  • 打赏
  • 举报
回复
引用 1 楼 pathletboy 的回复:
先把LONG改ULONG,PLONG改PULONG试试,地址没有负数。
该回来了,但是还是蓝屏。 其中有一个这个错误是什么原因呢:error LNK2001: 无法解析的外部符号 "struct _ServiceDescriptorTable * KeServiceDescriptorTable" (?KeServiceDescriptorTable@@3PAU_ServiceDescriptorTable@@A)
pathletboy 2015-05-08
  • 打赏
  • 举报
回复
先把LONG改ULONG,PLONG改PULONG试试,地址没有负数。

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧