首页
社区
课程
招聘
为什么CreateFile打开驱动第一次成功第二次失败?
发表于: 2013-8-30 16:55 8321

为什么CreateFile打开驱动第一次成功第二次失败?

2013-8-30 16:55
8321
在ring3,利用CreateFile打开驱动
m_hDevice = CreateFile (_T("\\\\.\\UHFControl"), 0, 0, NULL, OPEN_ALWAYS, FILE_FLAG_OVERLAPPED, NULL);
在ring0,创建设备
status = IoCreateDevice (DriverObject,
sizeof (CControlDeviceExtension*),
&m_NameString,  // No Name
m_DriverType,
FILE_DEVICE_SECURE_OPEN,
FALSE,
&m_Self);
这是一个usb hub过滤驱动,进行USB设备的重定向,结果对第一个设备进行重定向可以成功,第二个就偶尔会失败。通过GetLastError获得的错误代码是2,系统找不到指定的文件。
求指点,这是什么原因呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
2
你打开后有没有关闭句柄?
2013-8-30 16:58
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
没有立刻关掉,在取消设备共享的时候才关掉的。
也就是说在共享第二个设备的时候是没关掉的;
2013-8-30 17:04
0
雪    币: 1042
活跃值: (495)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
CloseHandle 亲.
2013-8-30 17:16
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个明白,不过现在这样的处理,很多时候第二次打开还是能成功的啊,这是为什么呢?
2013-8-30 17:20
0
雪    币: 1042
活跃值: (495)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
MSDN看下第二和第三个参数
2013-8-30 17:23
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
其实还有一点不太清楚,对于createfile的第三个参数设置共享模式的,如果为0的话,设置为互斥共享,在closehandle之前第二个程序无法访问,那么同一个进程进行第二次访问呢,也不行吗?
2013-8-30 17:28
0
雪    币: 1042
活跃值: (495)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
共享好像如果是只读的方式好像是可以的!!!关闭程序才会自动释放内核对象吧```
2013-8-30 17:43
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
大bang。。。。。
2013-8-30 20:12
0
游客
登录 | 注册 方可回帖
返回
//