0

I'm trying to enumerate Terminal servers in our local domain, but WTSEnumerateServers() fails with ErrorCode 1212 ( The format of the specified domain name is invalid. ). I tried it with the subdomain name "sub", with the full domain name "sub.company.local" and with NULL which is a synonym for the computer's domain. Always the same.

The MSDN Article states: This function will not work if NetBT is disabled.
NetBT is NetBIOS over TCP/IP. Which, I checked, is on by default. I'm using Windows 8.1

Does anyone know why WTSEnumerateServers() is failing?

#include <stdio.h>
#include <Wtsapi32.h>
#include <Windows.h>

#pragma comment(lib, "Wtsapi32.lib")

void LastErrorMsgBox(int err);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
  PWTS_SERVER_INFO DiscoveredServers = NULL;
  DWORD count = 0;

  if(WTSEnumerateServers(NULL, 0, 1, &DiscoveredServers, &count) == 0)
  {
    LastErrorMsgBox(GetLastError());
    return 1;
  }
  WTSFreeMemory(DiscoveredServers);
  return 0;
}

void LastErrorMsgBox(int err)
{
  TCHAR  dbg[1024];
  LPTSTR sys = NULL;
  _stprintf(dbg, TEXT("Errorcode: %d\n"), err);
  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&sys, 0, NULL);
  _tcsncat(dbg, sys, 1024);
  if(sys != NULL)
    LocalFree(sys);
  MessageBox(0, dbg, TEXT("Error"), MB_ICONERROR);
}
4

1 回答 1

1

我搜索了一下,在这里找到了以下内容:

/ ******************************************************* ***************
* 请注意:
* WTSEnumerateServers 函数在 Windows 2008 中不再工作。
* WTSEnumerateServers 函数依赖于 NETBIOS 才能在
域中运行。Windows 2008 服务器
现在默认禁用 * DC 上的计算机浏览器服务,因此 Netbios 变得无用。仅在 DC 上启用计算机
* 浏览器服务将返回 WTSAPI
* 函数的全部功能。这是一个很好的修复,但正如微软所说,他们将来将
不再支持 Netbios,我相信我们将不得不修改我们的
* TS环境下的发展策略。另外,作为记录,那些
* 使用 NETSERVEREnum 函数来执行与 WTSEnumerateServers 相同的操作,这
* 还需要在 Windows 2008 DC 上启用计算机浏览器服务。
* 这也是 Citrix WFAPI SDK - WFEnumerateServers 的情况 *
* 我找到的最好的替代品是 WNetOpenEnum()。
*
******************************************************* ************** /

也许WNetOpenEnum也会帮助你。

于 2014-07-01T17:27:58.293 回答