当前位置: 首页 > 编程语言 > C#

检测何时创建新虚拟驱动器分享

时间:2023-04-11 12:18:18 C#

C#学习教程:检测何时创建了一个新的虚拟驱动器请注意,我已经知道可以挂载哪些文件。换句话说,唯一可以挂载的卷是:C:Vol1.tc、C:Vol2.tc和C:Vol3.tc我如何知道何时卸载卷?我设法通过使用.net类FileSystemWatcher来做到这一点。我注意到每次卸载卷时都会触发事件FileSystemWatcher.Changed。我如何知道何时安装卷?这就是我遇到麻烦的地方!我是否总是查询驱动器并查看它是否存在。这听起来像是个坏主意,因为如果有人插入USB并且Windows为其分配了一个驱动器盘符,我将得到一个错误。如何知道何时创建新的虚拟驱动器?为什么我需要这个?我需要创建一个应用程序,用户可以在其中通过手机查看安装了哪些trueCrypt卷。我唯一想做的就是找出卷的安装时间...正如EugeneMayevski的EldoSCorp评论的那样,您应该使用WM_DEVICECHANGE事件。结合这个问题我给大家的回答,下面是示例代码:以上就是《C#学习教程:检测新虚拟光驱创建时间》的全部内容,如果对大家有用,还需要进一步了解C#学习教程,希望大家多多关注——classProgram:System.Windows.Forms.Form{staticvoidMain(string[]args){System.Windows.Forms.Application.Run(newProgram());}constintWM_DEVICECHANGE=0x0219;constintNB_MOUNTED_VOLUMES=26;protectedoverridevoidWndProc(refSystem.Windows.Forms.Messagem){switch(m.Msg){caseWM_DEVICECHANGE:ShowChange();休息;}base.WndProc(refm);}privateString[]m_oldMount;publicProgram(){m_oldMount=newString[NB_MOUNTED_VOLUMES];for(inti=0;i{2}",DateTime.Now,(char)('A'+i),m_oldMount[i]);}else{Console.WriteLine("{0}:安装在{1}:=>{2}",DateTime.Now,(char)('A'+i),currentMount[i]);}}}m_oldMount=currentMount;}privateString[]GetMountList(){uintsize=(uint)Marshal.SizeOf(typeof(MOUNT_LIST_STRUCT));IntPtrbuffer=Marshal.AllocHGlobal((int)size);uintbytesReturned;IntPtr_hdev=CreateFile("\\.\TrueCrypt",FileAccess.ReadWrite,FileShare.ReadWrite,IntPtr.Zero,FileMode.Open,0,IntPtr.Zero);boolbResult=DeviceIoControl(_hdev,TC_IOCTL_GET_MOUNTED_VOLUMES,缓冲区,大小,缓冲区,大小,outbytesReturned,IntPtr.Zero);MOUNT_LIST_STRUCTmount=newMOUNT_LIST_STRUCT();Marshal.PtrToStructure(buffer,mount);Marshal.FreeHGlobal(buffer);返回mount.wszVolume.Select(m=>m.ToString()).ToArray();}[StructLayout()LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)]classMOUNT_LIST_STRUCT{publicreadonlyUInt32ulMountedDrives;/*所有挂载驱动器盘符的位域*/[MarshalAs(UnmanagedType.ByValArray,SizeConst=26)]publicreadonlyMOUNT_LIST_STRUCT_VOLUME_NAME[]wszVolume;/*挂载卷的卷名*/[MarshalAs(UnmanagedType.ByValArray,SizeConst=26)]publicreadonlyUInt64[]diskLength;[MarshalAs(UnmanagedType.ByValArray,SizeConst=26)]publicreadonlyint[]ea;[MarshalAs(UnmanagedType.ByValArray,SizeConst=26)]publicreadonlyint[]volumeType;/*卷类型(例如PROP_VOL_TYPE_OUTER、PROP_VOL_TYPE_OUTER_VOL_WRITE_PREVENTED等)*/}[StructLayout(LayoutMarKind.Sequential,CharSTCTSet=CharSet.Ansi,Pack=1)]struct_MOUNLISH(UnmanagedType.ByValArray,ArraySubType=UnmanagedType.I2,SizeConst=260)]publicreadonlychar[]wszVolume;/*挂载卷的卷名*/publicoverridestringToString(){return(newString(wszVolume)).TrimEnd('');}}publicstaticintCTL_CODE(intDeviceType,intFunction,intMethod,intAccess){return(((DeviceType)本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,转载请注明出处:

最新推荐
猜你喜欢