Adr*_*Cox 5 .net wmi serial-port windows-7
我有一个应用程序,寻找具有自定义USB描述符的特定FTDI串行端口.我当前的代码使用Code Project中的示例,它搜索下面的MSSerial_PortNameWMI表root\WMI,并从中提取额外的USB信息root\CIMV2\WIN32_PnPEntity.
这在XP下运行良好,但应用程序也必须在Windows 7上的标准用户下运行.在此环境中,访问root\WMI结果为"拒绝访问" ManagementException.
任何人都可以建议一种方法来交叉引用串口的DOS设备名称到USB信息,同时作为标准用户运行?到目前为止,我已经查看了root\CIMV2\WIN32_SerialPort*表格,但它们只包含主板端口.我也考虑过使用SetupAPI,但我还没有找到一个完整且有效的PInvoke模板.
我发现了一个适合我们案例的答案,虽然不是一般的答案.我们的USB转换器都是FTDI,而FTDI提供了一个处理这个问题的DLL.我使用DLL的代码如下:
UInt32 count = 0;
FTDI.FT_STATUS status = ftdi.GetNumberOfDevices(ref count);
if (status != FTDI.FT_STATUS.FT_OK)
{
log.Warn("Unable to access FTDI");
return ports;
}
FTDI.FT_DEVICE_INFO_NODE[] list = new FTDI.FT_DEVICE_INFO_NODE[count];
status = ftdi.GetDeviceList(list);
if (status != FTDI.FT_STATUS.FT_OK)
{
log.Warn("Unable to access FTDI");
return ports;
}
foreach (FTDI.FT_DEVICE_INFO_NODE node in list)
{
if ((status = ftdi.OpenByLocation(node.LocId)) == FTDI.FT_STATUS.FT_OK)
{
try
{
string comport;
ftdi.GetCOMPort(out comport);
ports.Add(new Port(comport, node.Description, node.SerialNumber));
}
finally
{
ftdi.Close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6331 次 |
| 最近记录: |