一个驱动问题

Miss丿小沫 2014-02-08 11:42:50
问一下大家!
我是个驱动小白,
一个驱动程序 后缀是sys的
在别的电脑上 正常加载
在我的电脑上就 蓝屏了,
问一下大家 问题怎么解决呢?
还有 我贴一下我自己写的代码
大神看看有没有错误

头文件:


#include <ntddk.h>
#include <windef.h>

void UnloadDriver(PDRIVER_OBJECT pDriver);

ULONG Old_SSDT,Current_SSDT;
LONG *SSDT_Addr,STB_Addr,OpenProcess_Addr;

typedef struct JMPDATE
{
BYTE E9;
ULONG JmpAddr;

}JMPDATE;
JMPDATE JmpDate;

typedef struct SSDT
{
PVOID ServiceTableBase;
PVOID ServiceCounterTable;
unsigned int NumberofServices;
PVOID ParamTableBase;
}*pSSDT;
pSSDT pKeSSDT;

ULONG Get_Old_SSDTAddr()
{
UNICODE_STRING Old_NtOpenProcess;
ULONG Old_SSDTAddr;
RtlInitUnicodeString(&Old_NtOpenProcess,"NtOpenProcess");
Old_SSDTAddr=(ULONG)MmGetSystemRoutineAddress(&Old_NtOpenProcess);
return Old_SSDTAddr;
}
LONG Get_Current_SSDTAddr()
{
STB_Addr=(LONG)pKeSSDT->ServiceTableBase;
SSDT_Addr=(PLONG)(STB_Addr+0x7A*4);
OpenProcess_Addr=*SSDT_Addr;
return OpenProcess_Addr;
}

源文件:

#include "PassDNFDriver.h"

//入口函数
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,PUNICODE_STRING pstr)
{
DbgPrint("Loading【过DNF驱动保护(By:吴佳泽)】\n\r");
//加载驱动
__asm
{
int 3
}

DbgPrint("OpenProcess的当前地址为:%x \n\r" ,Get_Current_SSDTAddr());

//if (Current_SSDT!=Old_SSDT)
//{
// DbgPrint("OpenProcess已被【TP】Hook!");
// JmpDate.JmpAddr=Old_SSDT-Current_SSDT-5;
//}

pDriver->DriverUnload=UnloadDriver;
return 1;
}
void UnloadDriver(PDRIVER_OBJECT pDriver)
{
DbgPrint("UnLoad【过DNF驱动保护(By:吴佳泽)】\n\r");
//卸载驱动
}


求各位大神了!
你们就是我的希望啊!!!
...全文
105 点赞 收藏 2
写回复
2 条回复
曹大夯 2014年02月10日
引用 楼主 qq1161142536 的回复:
//加载驱动
__asm
{
int 3
}
就冲这行代码,如果不挂接内核调试器的话就会蓝屏的。
回复 点赞
huabinsir 2014年02月10日
别人的系统和你的系统 SDK 版本是一样的吗
回复 点赞
发动态
发帖子
驱动开发/核心开发
创建于2007-09-28

9168

社区成员

2.1w+

社区内容

硬件/嵌入开发 驱动开发/核心开发
社区公告
暂无公告