当前位置: 代码迷 >> 驱动开发 >> 为什么小弟我写的驱动运行之后电脑CPU占用率直接100%
  详细解决方案

为什么小弟我写的驱动运行之后电脑CPU占用率直接100%

热度:32   发布时间:2016-04-28 10:49:16.0
为什么我写的驱动运行之后电脑CPU占用率直接100%?
我写的过TP保护的驱动在虚拟机下运行完全正常,为什么拿到物理机上面直接CPU占用率100%?
什么情况?

------解决方案--------------------
那没法,驱动编起来就这点不方便
双机调试
------解决方案--------------------
探讨

引用:
你是不是希望有小学的


现在的小学初中生老牛逼了,都是搞易语言的,我这个驱动就是我表弟娃找我帮他写的,他要自己搞外挂,听他讲一些做外挂的术语,我真心觉得我老了,现在的初中学生不得了

------解决方案--------------------
探讨

引用:
引用:

引用:
你是不是希望有小学的


现在的小学初中生老牛逼了,都是搞易语言的,我这个驱动就是我表弟娃找我帮他写的,他要自己搞外挂,听他讲一些做外挂的术语,我真心觉得我老了,现在的初中学生不得了

哈哈,要不是英语的原因,现在中国的软件也不会不及印度阿三。


还有个原因就是国内太推崇JAVA平台的开发……

------解决方案--------------------
#include "DDK_ShenMing.h"


 ///////------------函数声明区域-------------------
int InitialDDK(PDRIVER_OBJECT pDriverObject);
int DDK_Unload(PDRIVER_OBJECT p);
NTSTATUS DispatchRoutine(PDEVICE_OBJECT pDevObj,PIRP pIrp);
void Hook();
void Unhook();
//声明函数指针
typedef NTSTATUS (_stdcall *NTTERNIMATEPROCESS)(HANDLE ProcessHandle,NTSTATUS ExitStatus); //定义一个函数指针
NTTERNIMATEPROCESS ImitateNTerminateProcess;//定义一个函数

extern PServiceDescriptorTable KeServiceDescriptorTable; //导出 KeServiceDescriptorTable

NTSTATUS MyNtTerminateProcess(HANDLE ProcessHandle,NTSTATUS ExitStatus);//自己的假冒函数
///////-------------函数声明结束-------------------



#pragma code_seg("INIT")
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING B)
{
KdPrint(("-----进入了驱动主函数。------\n"));
InitialDDK(pDriverObject);
Hook();

pDriverObject->DriverUnload=DDK_Unload;

pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=DispatchRoutine;
pDriverObject->MajorFunction[IRP_MJ_CREATE]=DispatchRoutine; 
pDriverObject->MajorFunction[IRP_MJ_CLOSE]=DispatchRoutine; 
pDriverObject->MajorFunction[IRP_MJ_READ]=DispatchRoutine; 
return STATUS_SUCCESS;
}

#pragma code_seg("PAGE")
int InitialDDK(PDRIVER_OBJECT pDriverObject)
{
NTSTATUS status;
PDEVICE_OBJECT pDevObj;
UNICODE_STRING DevName,SysName;

RtlInitUnicodeString(&DevName,L"\\Device\\MyDevice");
RtlInitUnicodeString(&SysName,L"\\??\\1111");
status=IoCreateDevice(pDriverObject,0,&DevName,FILE_DEVICE_UNKNOWN,0,TRUE,&pDevObj);
if( status<0) //如果创建设备失败
{
Initial_Status=CREATE_FAILD;
return 0;
}
pDevObj->Flags |=DO_BUFFERED_IO;

status=IoCreateSymbolicLink(&SysName,&DevName);
if(status<0)
{
IoDeleteDevice(pDevObj);
Initial_Status=CREATE_FAILD;
return 0;
}
Initial_Status=CREATE_SUCCESS;
return 1;
}

#pragma code_seg("PAGE")
int DDK_Unload(PDRIVER_OBJECT p)
{
KdPrint(("-----驱动被卸载了------\n"));
if(Initial_Status==CREATE_SUCCESS)
{
PDEVICE_OBJECT pDevObj;
UNICODE_STRING SysName;

RtlInitUnicodeString(&SysName,L"\\??\\1111");
pDevObj=p->DeviceObject;
IoDeleteDevice(pDevObj);
IoDeleteSymbolicLink(&SysName);
if(IS_HOOH==HOOK_SUCCESS) 
Unhook();
}

return 1;
}


#pragma code_seg("PAGE")
NTSTATUS DispatchRoutine(PDEVICE_OBJECT pDevObj,PIRP pIrp)
{
ULONG mf,CTL_code;
PIO_STACK_LOCATION stack=IoGetCurrentIrpStackLocation(pIrp);
mf=stack->MajorFunction;
CTL_code=stack->Parameters.DeviceIoControl.IoControlCode;
switch(mf)
{
case IRP_MJ_DEVICE_CONTROL:
  相关解决方案