关于U盘弹出的API(C#实现)

jiaoyang623 2008-04-13 12:13:04
我已经利用网上搜索到的代码实现在软件中自动删除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);
}
}
}
}

从网上搜来的代码的链接在这里:
http://www.codeproject.com/KB/system/usbeject.aspx
...全文
1348 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zouzedong 2009-05-14
  • 打赏
  • 举报
回复
UP
rgzazq 2008-09-19
  • 打赏
  • 举报
回复
如果可以,给我一份完整的代码,我正在研究这个问题,谢谢~万分感谢!
l285791700 2008-08-23
  • 打赏
  • 举报
回复
不知道啊
囧虎科技宅 2008-05-08
  • 打赏
  • 举报
回复
Parameters:

dnDevInst
Caller-supplied device instance handle, obtained from the SP_DEVINFO_DATA structure that is used with the device installation functions.
Device instance handles can also be obtained by calling the following functions:

CM_Locate_DevNode
CM_Locate_DevNode_Ex
CM_Get_Child
CM_Get_Child_Ex
CM_Get_Parent
CM_Get_Parent_Ex
CM_Get_Sibling
CM_Get_Sibling_Ex

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧