C# 为什么CreateFile要花很长时间?

C# 为什么CreateFile要花很长时间?,c#,windows,winapi,C#,Windows,Winapi,我的程序中有一个线程,它试图创建文件,以锁定usb设备,但是,有时它不会失败,而是需要永远。还有其他人遇到过这个问题吗?有没有办法设置此函数的超时?代码如下所示: string file = @"\\.\" + DriveLetter[0] + ":"; handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_WRITE, IntPtr.Zero, 0x3, 0, IntPtr.Zero); 谢谢。您想将其锁定以使其无法访问(作为设备)或“

我的程序中有一个线程,它试图
创建文件
,以锁定usb设备,但是,有时它不会失败,而是需要永远。还有其他人遇到过这个问题吗?有没有办法设置此函数的超时?代码如下所示:

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

谢谢。

您想将其锁定以使其无法访问(作为设备)或“阻止”将其拆下(例如,它是笔)?

编辑:抱歉,无论如何我都不允许添加评论:S
。如果锁定很重要,您可以使用devcon:
和一个示例代码:

轻松做到这一点,以防您不想一直使用带有参数的exe。

花费时间似乎与主窗体线程存在某种冲突


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

为什么要进行本机调用?我需要使用
DeviceIoControl
临时锁定设备。你有什么更好的建议吗?为什么不切换到C++?如果你要接近硬件…我们能假设有打字错误吗?您似乎正在将
文件
设置为驱动器号,然后执行
创建文件
传递
文件名
。所谓“永远”,您的意思是它会挂起并且永远不会返回,还是需要很长时间?感谢您的努力,我们已经在考虑这个替代方案。可能Windows正在向应用程序(包括您的应用程序)发送一条消息,警告他们设备即将被删除,并且在他们做出响应之前无法从CreateFile返回。是的,窥视计算机的大脑是很难看的,我们总是更好地猜测:)