2013-04-23 50 views
1

我在我的程序中有一个线程,它试图通过CreateFile来锁定USB设备,但是,有时不是失败,而是永远需要。有其他人遇到过这个问题吗?有什么办法可以设置此功能的超时时间吗?该代码是这样的:为什么CreateFile永远持续下去?

string file = @"\\.\" + DriveLetter[0] + ":"; 
handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_WRITE, IntPtr.Zero, 0x3, 0, IntPtr.Zero); 

感谢。

+4

你为什么要做本地电话? – leppie 2013-04-23 13:40:06

+0

我需要使用'DeviceIoControl'临时锁定设备。你有更好的建议吗? – 2013-04-23 13:41:01

+0

为什么不切换到C++?如果你正在接近HW ... – 2013-04-23 13:43:53

回答

1

永久采取似乎是与主窗体线程的某种冲突。

最后,我将包含CreateFile操作的锁定函数移动到一个单独的线程,它不会与UI线程竞争,现在它工作正常。

+0

也许Windows正在向应用程序(包括您的应用程序)发送消息,警告他们设备即将被删除,并且只有在它们响应时才能从CreateFile返回。 – 2013-04-26 00:15:33

+0

是的,偷窥到电脑的大脑很丑陋,我们总是猜测:) – 2013-04-27 11:21:19

1

你想锁定它,使其无法访问 - 作为设备或“阻止”它(例如它是一支笔)?
编辑:抱歉,我不允许添加评论:S
反正。如果锁定很重要,可以使用devcon轻松完成:http://support.microsoft.com/kb/311272
,以及一个示例代码:
http://www.programmersheaven.com/mb/dotnet/337951/337951/programatically-enable--disable-usb-port-using-cnet/
如果您不想一直使用带有params的exe文件。

+0

为了让它无法访问。 – 2013-04-23 14:33:37

+0

感谢您的努力,已经在考虑这个选择。将研究它。 – 2013-04-23 14:35:26

相关问题