当前位置: 代码迷 >> 驱动开发 >> 一个驱动有关问题
  详细解决方案

一个驱动有关问题

热度:141   发布时间:2016-04-28 10:09:24.0
一个驱动问题
问一下大家!
我是个驱动小白,
一个驱动程序 后缀是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");
//卸载驱动
}


求各位大神了!
你们就是我的希望啊!!!
------解决方案--------------------
别人的系统和你的系统 SDK 版本是一样的吗
------解决方案--------------------
引用:
//加载驱动
__asm
{
int 3
}

就冲这行代码,如果不挂接内核调试器的话就会蓝屏的。
  相关解决方案