c#怎么实现安全弹出U盘
1个回答
展开全部
这是CSDN上的一个帖子的内容,也许对你有帮助。
我已经利用网上搜索到的代码实现在软件中自动删除U盘,也就相当于在任务栏右端的图标上点击删除的效果。但是由于那个类不适应我写的程序,我只能查他的代码。最终锁定到一个API函数:
[DllImport("setupapi.dll", EntryPoint = "CM_Request_Device_Eject")]
internal static extern int CM_Request_Device_Eject_NoUi(
int dnDevInst,
IntPtr pVetoType,
StringBuilder pszVetoName,
int ulNameLength,
int ulFlags);
在这个函数的5个参数中,我仅仅关注第一个参数(剩下的解决了pVetoType=IntPtr.Zero, pszVetoName=null, ulNameLength=0, ulFlags=0)。我想知道第一个参数指的是什么。我去跟踪搜到的那个程序时发现dnDevInst指的可能是U盘的物理序列号,但是不确定。同时我想知道怎样获取这个数字(最好是WMI,因为盗用这段函数的代码是在一个遍历磁盘接口的基于wmi的循环之中)。请各位牛人帮忙看看。
以下是基于wmi的循环:
private void ScanUDisk()
{
while (true)
{
SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
foreach (ManagementObject disk in searcher.Get())
{
if (disk["DriveType"].ToString() == "2")
{
CopyMain(disk["Name"].ToString()); //向U盘传送文件的函数
Thread.Sleep(500);
CM_Request_Device_Eject_NoUi(????, IntPtr.Zero, null, 0, 0);
}
}
}
}
我已经利用网上搜索到的代码实现在软件中自动删除U盘,也就相当于在任务栏右端的图标上点击删除的效果。但是由于那个类不适应我写的程序,我只能查他的代码。最终锁定到一个API函数:
[DllImport("setupapi.dll", EntryPoint = "CM_Request_Device_Eject")]
internal static extern int CM_Request_Device_Eject_NoUi(
int dnDevInst,
IntPtr pVetoType,
StringBuilder pszVetoName,
int ulNameLength,
int ulFlags);
在这个函数的5个参数中,我仅仅关注第一个参数(剩下的解决了pVetoType=IntPtr.Zero, pszVetoName=null, ulNameLength=0, ulFlags=0)。我想知道第一个参数指的是什么。我去跟踪搜到的那个程序时发现dnDevInst指的可能是U盘的物理序列号,但是不确定。同时我想知道怎样获取这个数字(最好是WMI,因为盗用这段函数的代码是在一个遍历磁盘接口的基于wmi的循环之中)。请各位牛人帮忙看看。
以下是基于wmi的循环:
private void ScanUDisk()
{
while (true)
{
SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
foreach (ManagementObject disk in searcher.Get())
{
if (disk["DriveType"].ToString() == "2")
{
CopyMain(disk["Name"].ToString()); //向U盘传送文件的函数
Thread.Sleep(500);
CM_Request_Device_Eject_NoUi(????, IntPtr.Zero, null, 0, 0);
}
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询