felics
驱动牛犊
驱动牛犊
  • 注册日期2003-05-20
  • 最后登录2010-06-24
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1939回复:4

请教IRQL_NOT_LESS_OR_EQUAL的错误

楼主#
更多 发布于:2005-05-14 10:46
各位大侠,我写一个driver,很简单,就是底层driver获取进程ID,然后通过事件来通知应用程序,应用程序再通过该ID取得进程的名称而已,经过一系列的测试,非常稳定。
可是现在在一个客户那里碰到了“以非管理员身份登陆系统就会报IRQL_NOT_LESS_OR_EQUAL这样的错误,然后系统兰屏”。而我这里找了多台电脑都无法复现,由于能够获取的信息非常有限,只好在这里请教经验丰富的前辈了。
请不吝赐教,谢谢!

注:driver获取进程ID是通过PsSetCreateProcessNotifyRoutine注册回调函数实现的。
felics
驱动牛犊
驱动牛犊
  • 注册日期2003-05-20
  • 最后登录2010-06-24
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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);
}

bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-14 12:02
怎么会怀疑是多个处理器,重负荷的问题,有什么理论依据吗?不好意思,菜了点。
我怀疑是不是某些应用程序不让driver监控,获取它的ID,或者什么其它类似的原因,有这种可能吗?

[编辑 -  5/14/05 by  felics]

多处理器主要是同步问题.
我怀疑是不是某些应用程序不让driver监控,获取它的ID,或者什么其它类似的原因,有这种可能吗?有,我以前做的会和赛门铁克的实时监测冲突,建议卸掉防病毒软件44
由于你没有说清楚是偶尔,还是干脆不行,所以我以为是偶尔呢
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
felics
驱动牛犊
驱动牛犊
  • 注册日期2003-05-20
  • 最后登录2010-06-24
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-14 11:25
怎么会怀疑是多个处理器,重负荷的问题,有什么理论依据吗?不好意思,菜了点。
我怀疑是不是某些应用程序不让driver监控,获取它的ID,或者什么其它类似的原因,有这种可能吗?

[编辑 -  5/14/05 by  felics]
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-14 11:10
各位大侠,我写一个driver,很简单,就是底层driver获取进程ID,然后通过事件来通知应用程序,应用程序再通过该ID取得进程的名称而已,经过一系列的测试,非常稳定。
可是现在在一个客户那里碰到了“以非管理员身份登陆系统就会报IRQL_NOT_LESS_OR_EQUAL这样的错误,然后系统兰屏”。而我这里找了多台电脑都无法复现,由于能够获取的信息非常有限,只好在这里请教经验丰富的前辈了。
请不吝赐教,谢谢!

注:driver获取进程ID是通过PsSetCreateProcessNotifyRoutine注册回调函数实现的。

你找个多处理器的机器,在重负荷下试一下.不行就只好等用户发生这种情况后发个Crash Dump你再分析一下了
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
游客

返回顶部