csanycall
驱动牛犊
驱动牛犊
  • 注册日期2005-03-23
  • 最后登录2015-01-15
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望237点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:3189回复:4

内核创建事件后,应用端打开错误(指定的路径无效)

楼主#
更多 发布于:2010-06-30 11:59
内核创建事件:
// 定义事件对象名称
#define EVENT_NAME            L"\\BaseNamedObjects\\ProcEvent"
#define EVENT_NAME2            L"\\BaseNamedObjects\\ProcEvent2"
.....................
eviceExtension->ProcessEvent = IoCreateNotificationEvent(&ProcessEventString, &deviceExtension->hProcessHandle);
KeClearEvent(deviceExtension->ProcessEvent);            // 非受信状态
KdPrint(("[ProcMon] deviceExtension->ProcessEvent: 0x%X\n", deviceExtension->ProcessEvent));//正常创建

deviceExtension->ProcessEvent2 = IoCreateNotificationEvent(&ProcessEventString2, &deviceExtension->hProcessHandle);
KdPrint(("[ProcMon] deviceExtension->ProcessEvent2: 0x%X\n", deviceExtension->ProcessEvent2));//正常创建
KeClearEvent(deviceExtension->ProcessEvent2);            // 非受信状态

应用端:
...............
// 打开内核事件对象
    HANDLE hProcessEvent = ::OpenEventW(SYNCHRONIZE, FALSE, EVENT_NAME);
    if(hProcessEvent == NULL){
        printf("%d\n", GetLastError());//错误代码 161 :指定的路径无效
    }
    
    HANDLE hProcessEvent2 = ::OpenEventW(SYNCHRONIZE, FALSE, EVENT_NAME2);
    if(hProcessEvent2 == NULL){
        printf("%d\n", GetLastError());//错误代码 161 :指定的路径无效
    }

    printf("事件对象: 1: %X 2: %X\n", hProcessEvent, hProcessEvent2);//都为 0

各位大大帮我诊断一下,
另外,将事件对象改为
#define EVENT_NAME            L"\\\\BaseNamedObjects\\ProcEvent"
#define EVENT_NAME2            L"\\\\BaseNamedObjects\\ProcEvent2"
直接蓝屏

新编辑后
 

描述:驱动创建事件

图片:Snap4.jpg

驱动创建事件


 

描述:应用及其执行情况

图片:无标题.jpg

应用及其执行情况

轻轻的来,轻轻的走 不带走一片云彩~
dreamsity
驱动小牛
驱动小牛
  • 注册日期2006-09-01
  • 最后登录2013-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望821点
  • 贡献值1点
  • 好评度68点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2010-06-30 12:24
使用objdir查看这个事件是不是真的创建了。
在WINDOW登录前,BaseNamedObjects是没有创建的。
一切都是时间问题!
csanycall
驱动牛犊
驱动牛犊
  • 注册日期2005-03-23
  • 最后登录2015-01-15
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望237点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-07-01 09:11
谢谢楼上的牛牛,我是在虚拟机里面测试的。是在系统已经启动的情况下,通过instdriv程序加载驱动。所以BaseNamedObjects应该是创建好了的哦。并且在内核里打印的句柄也表示2个事件创建成功。
现在关键是应用层的,真晕
轻轻的来,轻轻的走 不带走一片云彩~
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
地板#
发布于:2010-07-02 14:36
用户被禁言,该主题自动屏蔽!
csanycall
驱动牛犊
驱动牛犊
  • 注册日期2005-03-23
  • 最后登录2015-01-15
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望237点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-07-14 14:40
汗,在应用中,以这种方式打开就可以了。
HANDLE hProcessEvent = ::OpenEventW(SYNCHRONIZE, FALSE, L"ProcEvent");
轻轻的来,轻轻的走 不带走一片云彩~
游客

返回顶部