2013-04-23 48 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

相關問題