在C#中从设备句柄获取驱动器字母

4
我正在开发一个小工具,用于记录USB设备的活动。我的工具作为Windows服务运行,捕获所有设备事件,基本上我会在捕获到DBT_DEVICEARRIVAL事件后开始监视USB设备。接下来,当我收到DBT_DEVICEQUERYREMOVE事件时,我需要立即停止监视(否则我的服务将拒绝安全弹出设备)。问题是该工具应该能够监视多个设备,因此我需要确定用户试图弹出哪个设备。
我发现DBT_DEVICEQUERYREMOVE事件携带了一个DEV_BROADCAST_HANDLE结构。我试图从这个结构中提取一些有用的信息,以便我可以识别正在被弹出的设备。我发现其中有一个设备句柄,我尝试使用系统函数GetFinalPathNameByHandle来提取驱动器号码,但它没有正常工作(返回空值)。
有什么想法怎么做吗?
非常感谢!

@MSalters 我的问题是一个具体的问题,不包括在您评论中提到的问题。有什么想法吗? - Fernando Pessoa
1个回答

1

由于答案似乎比我想象的要不那么明显:对于您感兴趣的每个设备,调用RegisterDeviceNotification,通过其句柄标识设备。由于是您创建注册,因此您将知道哪个驱动器字母映射到哪个通知句柄。


我猜想通过pinvoke来使用那个函数? - default
@Default:我认为没有其他方法。Windows的本地API仍然基于C语言。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接