问题
我们公司制造运行windows XP的专用设备(准确地说是windows XPe)。 我们所面对的一个不屈不挠的法律要求是我们必须快速检测何时移除了固定的 IDE驱动器 。 快速在几秒钟内。
有问题的驱动器是IDE驱动器。 它们也受到软件保护,无法使用EWF(增强型写入filter)层进行写入。 EWF层位于文件系统之下,保护磁盘免于写入。 如果在EWF保护的卷上更改或写入某些内容,则实际更改只会发生在内存层(但文件系统不知道)。
问题是,windows本身似乎并没有注意到固定驱动器的删除。 您可以将驱动器拉出机器,windows资源pipe理器将很高兴让您浏览目录,甚至打开文件,如果他们仍然被caching在内存中。 感谢EWF层,我甚至可以将文件写入缺less的驱动器。
windows窗体计时器错误或使用不当?
我解密的密码是1个字符或短
孤立的存储误解
在windows XP,Vista和7上安装了什么版本的.NET框架?
重新连接断开的networking驱动器
我需要一个纯粹的纯软件解决scheme。 理想情况下,在C#/ .net 1.1,但我没有使用pinvoke或C ++的问题。
我无法做的事情
不,我不能用新的硬件翻新成千上万的设备。
不,我们不能只为了满足法律要求而使用超级驱动器。
不,正常的文件写入/读取不会检测到这种情况,这要归功于EWF层。
不,我们不能closuresEWF层。
不,我不能忽视法律要求,即使它们很愚蠢。
不,我无法像检测USB或其他可移动驱动器那样检测固定驱动器的移除。 这些是固定的驱动器。
不,我不能使用WMI(windows Management Instrumentation)。 它没有安装在我们的机器上。
不,我不能使用1.1版本的.Net。 它不适合我们的小驱动器。 (但是如果一个简单的解决scheme存在于一个更高版本的.Net中,我可能可以将它重新移植到1.1。)
目前尴尬的解决scheme
我对目前的解决scheme并不满意。 我正在寻找更优雅和高效的东西。
我目前正在做的事涉及两个线程。
线程A轮询驱动器。 它首先使用Kernel32.dll在驱动器上创build一个特殊文件:
Kernel32.Createfile( filename,file_Access.GenericRead | file_Access.GenericWrite,file_Share.Read | file_Share.Write,IntPtr.Zero,Creationdisposition.Createalways,CreatefileFlagsAndAttributes.file_Attribute_HIDden | CreatefileFlagsAndAttributes.file_Attribute_System,IntPtr.Zero);
然后通过调用来轮询驱动器
Kernel32.Flushfilebuffers(fileHandle);
如果驱动器已被移除,则线程A将挂起很长时间,然后返回错误代码。
线程B轮询线程A.
如果线程B看到线程A已被locking(在一段时间内没有更新特殊variables),则线程B产生一个驱动器被移除的事件。
我目前的解决scheme有效,但我不喜欢它。 如果有人知道一个更清洁的软件解决scheme,我将不胜感激。
在启动时dynamic决定Winforms或Wpf?
SlimDX:Joystick.Poll()成功断开游戏手柄
蔚蓝易桌自定义API
将数字11格式化为00000011
System.Management.ManagementException:未find
我感到震惊和惊讶,如果你拔出一个固定的IDE驱动器,系统不会崩溃。 像,真的很震惊。 但是,嘿…
你确定不能用超级胶水来解决这个问题吗? 总结
以上是内存溢出为你收集整理的在Windows XP中快速检测移除固定IDE驱动器全部内容,希望文章能够帮你解决在Windows XP中快速检测移除固定IDE驱动器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)