4

我正在使用 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 尚未更新以反映更改?

4

0 回答 0