Phryck
驱动牛犊
驱动牛犊
  • 注册日期2009-01-29
  • 最后登录2011-05-31
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望111点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2442回复:2

问个问题:如何判断设备句柄之前已被打开

楼主#
更多 发布于:2009-12-25 14:25
主要是SetupAPI枚举到目标USB-CDROM设备后用CreateFile打开,如果设备已经被打开了,则不打开设备
我尝试过CreateFile中将ShareMode 设为0如下:

hDev1 = CreateFile(cDevicePath,
                GENERIC_READ | GENERIC_WRITE,
                0,                     //    ShareMode 设为0
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                NULL);
iErr = GetLastError();
hDev2 = CreateFile(cDevicePath,
                GENERIC_READ | GENERIC_WRITE,
                0,
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                NULL);
iErr = GetLastError();

hDev2预期返回失败,实际成功得到设备句柄,而且GetLastError()返回值没有任何错误,而对文件操作却能达到预期效果,很奇怪。
也试过用WaitForSingleObject等待hDev1查看是否超时,结果也无法达到目的。
请问还有什么方法可以实现打开设备的互斥?
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2010-05-02 11:17
还真不知道。用户程序能取得内核对象的句柄引用数吗?
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
板凳#
发布于:2010-05-02 11:41
驱动程序是你写的吗?如果是的话,
把设备对象设置为排斥的,就只能打开一个句柄来,在用户层。
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
游客

返回顶部