阅读:2442回复:2
问个问题:如何判断设备句柄之前已被打开
主要是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查看是否超时,结果也无法达到目的。 请问还有什么方法可以实现打开设备的互斥? |
|
沙发#
发布于:2010-05-02 11:17
还真不知道。用户程序能取得内核对象的句柄引用数吗?
|
|
|
板凳#
发布于:2010-05-02 11:41
驱动程序是你写的吗?如果是的话,
把设备对象设置为排斥的,就只能打开一个句柄来,在用户层。 |
|
|