C++ 检查Windows计算机是否可以作为RDP连接中的主机

C++ 检查Windows计算机是否可以作为RDP连接中的主机,c++,windows,winapi,remote-desktop,rdp,C++,Windows,Winapi,Remote Desktop,Rdp,我正在编写一个程序,我想确保它只在可以作为RDP连接主机的Windows计算机上运行。例如,某些Windows版本无法执行此操作–例如win7 basic、win7 home、win8。 我可以检查Windows版本,并将其与RDP主机兼容版本列表进行比较,但我想知道是否有更常见的方法来检查此功能。可能是某种WinAPI方法或特殊的注册表项。 有什么建议吗?据我所知,函数应该会提供您想要的信息 LPSERVER_INFO_101 pSI = NULL; if(NetServerGetInfo(N

我正在编写一个程序,我想确保它只在可以作为RDP连接主机的Windows计算机上运行。例如,某些Windows版本无法执行此操作–例如win7 basic、win7 home、win8。
我可以检查Windows版本,并将其与RDP主机兼容版本列表进行比较,但我想知道是否有更常见的方法来检查此功能。可能是某种WinAPI方法或特殊的注册表项。 有什么建议吗?

据我所知,函数应该会提供您想要的信息

LPSERVER_INFO_101 pSI = NULL;
if(NetServerGetInfo(NULL, 101, (LPBYTE*)&pSI) == NErr_Success) {
    const bool bIsTerminalServer = pSI->sv101_type & SV_TYPE_TERMINALSERVER;
    NetApiBufferFree(pSI);
}

其他新闻组帖子建议检查服务
TermService
是否正在运行(您可以使用
QueryServiceStatusEx

如David Heffernan所建议的版本检查是硬编码的。

不错,但这种方法似乎只适用于特殊配置的服务器,不是吗?我可以通过RDP用Win8.1 Pro连接到我的工作计算机,但bIsTerminalServer==false。@nnatarr我更新了我的答案。在我的Windows 7上,服务未运行(远程桌面已禁用),当我启用远程桌面时,服务已启动。但当我再次禁用远程桌面时,该服务仍在运行。也许它仍然有帮助。我需要知道Windows版是否支持像RDP主机一样运行。所以,我想,我会听从大卫·赫弗南的建议。谢谢你的帮助!您想知道Windows版本是否支持此功能,或者RDP服务是否正在侦听连接?@DavidHeffernan是第一个。我认为您最好的选择是硬编码一个版本check@DavidHeffernan嗯,我想,这是最简单的解决办法。谢谢不幸的是,我不能将它标记为答案,或者我可以吗?我认为你不需要急于接受答案。给这个问题一点时间。