社区
驱动开发/核心开发
帖子详情
为什么我写的驱动运行之后电脑CPU占用率直接100%?
mjssw
2012-05-05 04:42:44
我写的过TP保护的驱动在虚拟机下运行完全正常,为什么拿到物理机上面直接CPU占用率100%?
什么情况?
...全文
585
50
打赏
收藏
为什么我写的驱动运行之后电脑CPU占用率直接100%?
我写的过TP保护的驱动在虚拟机下运行完全正常,为什么拿到物理机上面直接CPU占用率100%? 什么情况?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
50 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cw10406
2012-06-06
打赏
举报
回复
#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:
{
switch(CTL_code) //判断控制码
{
case hook_code:
{
void *hProcess=(void*)(pIrp->AssociatedIrp.SystemBuffer);
}
case Unkook_code:
{
Unhook();
}
default: break;
}
}//IRP_MJ_DEVICE_CONTROL
case IRP_MJ_CREATE:
{
KdPrint(("调用了IRP_MJ_CREATE事件\n"));
}
default: break;
}
pIrp->IoStatus.Information=4;
pIrp->IoStatus.Status=STATUS_SUCCESS;
IoCompleteRequest(pIrp,IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
#pragma code_seg("PAGE")
void Hook()
{
if(IS_HOOH != HOOK_SUCCESS)
{
ULONG Addr;
Addr=(ULONG)(KeServiceDescriptorTable->ServiceTableBase) + 257*4;
NT_Address= *((ULONG*)Addr);
if( *((ULONG*)Addr)==NT_Address ) //如果读取地址正确
{
KdPrint(("---成功的读取了SSDT地址:%x ---\n",NT_Address));
IS_HOOH=HOOK_SUCCESS;//如果地址保存在变量中,就OK。
ImitateNTerminateProcess=(NTTERNIMATEPROCESS)NT_Address;//真的函数指向了RealNTerminateProcess
CloseProtect(); //去掉内存保护
*((ULONG *)Addr)=(ULONG)MyNtTerminateProcess;//替换为我们的函数
OpenProtect (); //恢复内存保护
return ;
}
else
{
KdPrint(("读取SSDT时出错了\n"));
return ;
}
}
}
#pragma code_seg("PAGE")
void Unhook()
{
if(IS_HOOH==HOOK_SUCCESS)//如果hook的地址是真正的地址。
{
ULONG Addr;
Addr=(ULONG)(KeServiceDescriptorTable->ServiceTableBase) + 257*4;
CloseProtect();
*((ULONG*)Addr)=NT_Address;
OpenProtect ();
IS_HOOH=HOOK_UNHOOK; //设置为已经取消了HOOK
KdPrint(("SSDT HOOK取消成功\n"));
}
}
#pragma code_seg("PAGE")
NTSTATUS MyNtTerminateProcess(HANDLE ProcessHandle,NTSTATUS ExitStatus)//假冒函数
{
NTSTATUS status=0;
PEPROCESS process; //接受通过ProcessHandle返回的进程
char *pName; //接受进程的进程名
char *ProcessName="TestPass.exe"; //要保护的进程名字
status=ObReferenceObjectByHandle(ProcessHandle,FILE_READ_DATA,0,KernelMode,&process,NULL); //获取进程
if(status==STATUS_SUCCESS)
{
int Ix=0;
int n;
pName = (char*)PsGetProcessImageFileName(process); //获取进程名
KdPrint(("得到的进程名:%s保护的进程:TestPass.exe\n",pName));
KdPrint(("进程句柄:%x\n",process));
ObfDereferenceObject(process);
for(n=0;(pName[n]!='\0') && (ProcessName[n]!='\0');n++)
{
if(pName[n]!=ProcessName[n])
Ix++;
}
if(Ix<1);
{
KdPrint(("是我们要保护的进程……\n"));
KdPrint((" ACESS Process Name:%s--\n",(PTSTR)((ULONG)process+0x174)));
return STATUS_ACCESS_DENIED;
}
}
else
{
KdPrint(("没有执行保护!\n"));
return (NTSTATUS)ImitateNTerminateProcess(ProcessHandle,ExitStatus);
}
}
我的也是,驱动运行后就CPU 50%多了。
Lactoferrin
2012-05-07
打赏
举报
回复
你是不是希望有小学的
zO_Oz
2012-05-07
打赏
举报
回复
[Quote=引用 43 楼 的回复:]
引用 40 楼 的回复:
lz还在上学?我去,膜拜。
我大二学生
[/Quote]
是学生也就罢了,为什么都是大二的???
mjssw
2012-05-07
打赏
举报
回复
[Quote=引用 40 楼 的回复:]
lz还在上学?我去,膜拜。
[/Quote]
我大二学生
mjssw
2012-05-07
打赏
举报
回复
[Quote=引用 49 楼 的回复:]
引用 48 楼 的回复:
引用 45 楼 的回复:
你是不是希望有小学的
现在的小学初中生老牛逼了,都是搞易语言的,我这个驱动就是我表弟娃找我帮他写的,他要自己搞外挂,听他讲一些做外挂的术语,我真心觉得我老了,现在的初中学生不得了
哈哈,要不是英语的原因,现在中国的软件也不会不及印度阿三。
[/Quote]
还有个原因就是国内太推崇JAVA平台的开发了,天天都在对学生鼓吹JAVA,JAVA教学成本低,教学难度小,这些就削弱了对于底层开发的重视,国内的学校基本全教这些,学校大部学生都重视J2EE之类的。数据结构啊,操作系统啊,高等数学啊,这些课都不重视,天天都在那里搞JAVA,我们寝室就是这个情况,他们丢掉了本科生的学习内容,去学职业学校的东西,简直是本末倒置。
zO_Oz
2012-05-07
打赏
举报
回复
[Quote=引用 48 楼 的回复:]
引用 45 楼 的回复:
你是不是希望有小学的
现在的小学初中生老牛逼了,都是搞易语言的,我这个驱动就是我表弟娃找我帮他写的,他要自己搞外挂,听他讲一些做外挂的术语,我真心觉得我老了,现在的初中学生不得了
[/Quote]
哈哈,要不是英语的原因,现在中国的软件也不会不及印度阿三。
mjssw
2012-05-07
打赏
举报
回复
[Quote=引用 44 楼 的回复:]
引用 43 楼 的回复:
引用 40 楼 的回复:
lz还在上学?我去,膜拜。
我大二学生
是学生也就罢了,为什么都是大二的???
[/Quote]
你也大二的?
那握个抓哈
zO_Oz
2012-05-07
打赏
举报
回复
[Quote=引用 45 楼 的回复:]
你是不是希望有小学的
[/Quote]
暂时不会发生这种事,我儿子他妈还不知道在哪里。
chen870201
2012-05-06
打赏
举报
回复
有点奇怪
不过虚拟机的很多设备都是通用设备,而实体机的设备存在更多的型号
mjssw
2012-05-06
打赏
举报
回复
[Quote=引用 37 楼 的回复:]
PsOpenProcess这些代码可能被交换到硬盘,这样关掉写保护再读写就会出问题
不过这个的概率很小
[/Quote]
终于弄好了,果然是写保护的问题。被坑惨了
Lactoferrin
2012-05-06
打赏
举报
回复
PsOpenProcess这些代码可能被交换到硬盘,这样关掉写保护再读写就会出问题
不过这个的概率很小
可可西外
2012-05-06
打赏
举报
回复
lz还在上学?我去,膜拜。
i945800687
2012-05-06
打赏
举报
回复
果断悲剧
yrnaaa
2012-05-06
打赏
举报
回复
安心调试,没有思路就去个安静的地好好想想
Lactoferrin
2012-05-05
打赏
举报
回复
这是多任务的系统,当然要用对系统干扰小的
mjssw
2012-05-05
打赏
举报
回复
[Quote=引用 34 楼 的回复:]
那你用mdl的方式改写
[/Quote]
我讨厌mdl方式改写保护。。。
Lactoferrin
2012-05-05
打赏
举报
回复
那你用mdl的方式改写
mjssw
2012-05-05
打赏
举报
回复
[Quote=引用 32 楼 的回复:]
版本都是什么,是否安装了安全软件
[/Quote]
我把取消写保护的代码去掉就没问题了,怎么回事?
难道真的是按了金山毒霸的原因?我在只装了360的机子上也是这么起的。
Lactoferrin
2012-05-05
打赏
举报
回复
版本都是什么,是否安装了安全软件
mjssw
2012-05-05
打赏
举报
回复
[Quote=引用 30 楼 的回复:]
检查系统的ntoskrnl版本是否一样
[/Quote]
我是依照物理机的PsOpenProcess的反汇编写的,反而在虚拟机上能运行,物理机上不能
加载更多回复(30)
Python selenium爬虫实现定时任务过程解析
现在需要启动一个selenium的爬虫,使用火狐
驱动
+多线程,大家都明白的,现在
电脑
管家显示
CPU
占用率
20%,启动selenium后不停的开启浏览器+多线程, 好,没过5分钟,
CPU
占用率
直接
拉到90%+,
电脑
卡到飞起,定时程序虽然还在
运行
,但是已经类似于待机状态, 是不是突然感觉到面对
电脑
卡死,第一反应:卧槽,这个lj
电脑
,这么程序都跑不起来,我还
写
这么多代码,*****!! 是吧,接下来上代码,具体功能,请自信查阅相关资料深造: from datetime import datetime from threading import Timer import time # 定时任务 de
用百用计算机弹出,
CPU
使用率老是
100
%怎么办?小编详解解决
CPU
过高的问题
如果我们的
电脑
经常出现
CPU
占用率
达
100
%,这时候就需要注意,
CPU
占用率
过高反映了
电脑
负荷过大,很容易造成系统崩溃,下面小编带你了解下导致
CPU
过高的原因以及详细的处理方式,好好的给
电脑
CPU
减减压。我们使用
电脑
运行
了大量的任务时候,会容易出现出现
cpu
占用率
过高的问题,甚至
CPU
占用率
长期高达
100
%,严重影响
电脑
的
运行
速度,对我们的生活工作造成很大的影响,那么造成
cpu
使用率
100
的原因是...
CPU
占用
100
%的一般原因及解决办法
转自:微点阅读https://www.weidianyuedu.com/content/2517683835639.html
电脑
关机故障速解 经常出现
cPU
占用
100
%的情况,主要问题可能发生在下面的某些方面:
cPU
占用率
高的九种可能 1、防杀毒软件造成故障 由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务吧,或者,升级你的硬件配备。 2、
驱动
没有经过认证,造成
cPU
资源占用
100
% .
计算机占
cpu
程序,
电脑
cpu
占用过高怎么办
电脑
进程
CPU
占用
100
%解决办法
很多朋友在使用
电脑
都出现过
电脑
CPU
使用率高导致
电脑
非常卡,
运行
的一些程序卡主不动了。无响应的情况。那么
电脑
CPU
占用
100
%使用率怎么解决呢?导致
CPU
使用率高的问题无非就在于两点:1.系统或软件问题;2.硬件问题解决
CPU
使用率过高我们就要分析为什么
cpu
使用率会达到
100
%,我们一起来分析吧!
CPU
使用率高的原因1.
电脑
运行
了大型的程序,例如大型的游戏,3D网络游戏等等,这种情况通常是正常的...
CPU
占用
100
%的原因及解决办法
cPU
降温软件,由于软件在
运行
时会利用所以的
cPU
空闲时间来进行降温,但Windows不能分辨普通的
cPU
占用和降温软件的降温指令之间的区别,因此
cPU
始终显示
100
%,这个就不必担心了,不影响正常的系统
运行
。一些
驱动
程序有时也可能出现这样的现象,最好是选择微软认证的或者是官方发布的
驱动
来装,有时可以适当的升级
驱动
,不过记得最新的不是最好的。有时只结束是没用的,当机器慢下来的时候,首先我们想到的当然是任务管理器了,看看到底是哪个程序占了较搞的比例,如果是某个大程序那还可以原谅,在关闭该程序后只要。
驱动开发/核心开发
21,597
社区成员
21,709
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章