我正在使用 MSVC++ 和 SetupAPI(.h) 并尝试针对远程 PC 调用SetupDiGetClassDevsEx,但失败并出现错误“此系统不支持此功能”。重要的是要注意,此调用(当不提供远程 PC 名称时)成功运行(针对我自己的 PC。)
我的代码片段如下:
HDEVINFO hDevInfo;
hDevInfo = SetupDiGetClassDevsEx(
0,
0,
0,
DIGCF_ALLCLASSES | DIGCF_PRESENT,
0,
L"TestPC",
0
);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
wchar_t buffer[255];
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
buffer,
255,
NULL);
}
MSDN 没有提到此方法已被弃用和/或不可用,但我发现它在 Windows 7 中可用但在 8/8.1 中不可用的相互矛盾的证据,然后可能/可能在 Windows 10 中不可用。
我尝试了以下方法:
- 确认我正在使用 TestPC 上的本地管理员帐户运行。
- “TestPC”的各种 FQDN 变体,包括“\TestPC”、“\TestPC.domain”、“TestPC.domain”、IP 地址等。
- 在目标 PC 上,我确保它已加入域并且对我自己的 PC 可见,并且可以通过 RDP 使用。我已确保启用并运行“即插即用”和“远程注册表”服务,以及启用远程管理,完全禁用 UAC,并确保“配置/管理”下的“允许远程访问计算机界面”组策略的模板/系统/设备安装”已启用。
- 我尝试使用 DevCon.exe(来自 Windows SDK 工具)访问同一系统,使用“devcon.exe /m:\TestPC listclasses”语法(和其他),它只返回“devcon failed”。
- 我使用Device-Tool远程访问了 TestPC ,它可以成功运行,但正在利用 WMI,这不是我尝试使用的 Win32 SetupAPI。
我是否遗漏了其他对利用此功能至关重要的东西?或者,这可能已被弃用和/或不再有效,并且 MSDN 尚未更新以反映更改?