阅读:1937回复:4
请教IRQL_NOT_LESS_OR_EQUAL的错误
各位大侠,我写一个driver,很简单,就是底层driver获取进程ID,然后通过事件来通知应用程序,应用程序再通过该ID取得进程的名称而已,经过一系列的测试,非常稳定。
可是现在在一个客户那里碰到了“以非管理员身份登陆系统就会报IRQL_NOT_LESS_OR_EQUAL这样的错误,然后系统兰屏”。而我这里找了多台电脑都无法复现,由于能够获取的信息非常有限,只好在这里请教经验丰富的前辈了。 请不吝赐教,谢谢! 注:driver获取进程ID是通过PsSetCreateProcessNotifyRoutine注册回调函数实现的。 |
|
沙发#
发布于:2005-05-14 11:10
各位大侠,我写一个driver,很简单,就是底层driver获取进程ID,然后通过事件来通知应用程序,应用程序再通过该ID取得进程的名称而已,经过一系列的测试,非常稳定。 你找个多处理器的机器,在重负荷下试一下.不行就只好等用户发生这种情况后发个Crash Dump你再分析一下了 |
|
|
板凳#
发布于:2005-05-14 11:25
怎么会怀疑是多个处理器,重负荷的问题,有什么理论依据吗?不好意思,菜了点。
我怀疑是不是某些应用程序不让driver监控,获取它的ID,或者什么其它类似的原因,有这种可能吗? [编辑 - 5/14/05 by felics] |
|
地板#
发布于:2005-05-14 12:02
怎么会怀疑是多个处理器,重负荷的问题,有什么理论依据吗?不好意思,菜了点。 多处理器主要是同步问题. 我怀疑是不是某些应用程序不让driver监控,获取它的ID,或者什么其它类似的原因,有这种可能吗?有,我以前做的会和赛门铁克的实时监测冲突,建议卸掉防病毒软件44 由于你没有说清楚是偶尔,还是干脆不行,所以我以为是偶尔呢 |
|
|
地下室#
发布于:2005-05-14 12:34
由于这个问题在系统管理员身份下登入是好的,仅在受限制的身份登入才会有问题,兰屏后就重新启动。我猜想可能原因:
当前系统权限不够,可是我这里找了几台,以Guest身份登陆进入却都是好的,那么我就有怀疑是某些进程本身不允许被监控,或让你获取它的信息,可是为何管理员身份登陆又是好的呢? 请教前辈,driver在管理员和非管理员身份的系统环境下运行有什么区别,对我这个监控进程ID然后向应用程序汇报的简单driver会有什么影响呢。 附上相关代码供您参考: //create the notify event. UNICODE_STRING uszProcessEventString; RtlInitUnicodeString(&uszProcessEventString, L\"\\\\BaseNamedObjects\\\\ProcessMoniterEvent\"); g_hProcessEvent = IoCreateNotificationEvent(&uszProcessEventString, &g_hProcessHandle); KeClearEvent(g_hProcessEvent); Status = PsSetCreateProcessNotifyRoutine(ProcessCreateMon, FALSE); if (Status != STATUS_SUCCESS) { return Status; } VOID ProcessCreateMon ( IN HANDLE hParentId, IN HANDLE PId,IN BOOLEAN bCreate ) { if( 0 == bCreate) return ; g_ProcInfo.bCreate = bCreate; g_ProcInfo.hParentId = hParentId; g_ProcInfo.hProcessId = PId; KeSetEvent(g_hProcessEvent, 0, FALSE); KeClearEvent(g_hProcessEvent); } |
|