WTSEnumerateServers ERROR_INVALID_DOMAINNAME

Я пытаюсь перечислить серверы терминалов в нашем локальном домене, но WTSEnumerateServers() завершается ошибкой с кодом ошибки 1212 (формат указанного доменного имени недопустим.). Я пробовал это с именем субдомена "sub", с полным доменным именем "sub.company.local" и с NULL, который является синонимом домена компьютера. Всегда одно и то же.

Статья MSDN гласит: Эта функция не будет работать, если NetBT отключен.
NetBT - это NetBIOS через TCP/IP. Который, я проверял, включен по умолчанию. Я использую Windows 8.1

Кто-нибудь знает, почему WTSEnumerateServers() не работает?

#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);
}

1 ответ

Решение

Я немного искал и нашел следующее:

/ ************************************************* ***************
* ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ:
* Функция WTSEnumerateServers больше не работала в Windows 2008.
* Функция WTSEnumerateServers полагается на то, что NETBIOS будет работать в
* домен. Сервер Windows 2008 отключает службу браузера компьютера на
* DC по умолчанию теперь, поэтому Netbios становится бесполезным. Включение компьютера
* только служба браузера на DC вернет полную функциональность WTSAPI
* функции. Это отличное решение, но, как Microsoft сказала, что они будут
* больше не поддерживает Netbios в будущем, я уверен, что нам придется пересмотреть наш
* стратегия развития в среде ТС. Для записи, те, которые
* используйте функцию NETSERVEREnum, чтобы сделать то же самое, что и WTSEnumerateServers, это
* также требует, чтобы служба обозревателя компьютеров была включена в Windows 2008 DC.
* Это также относится и к Citrix WFAPI SDK - WFEnumerateServers *
* Лучшая замена для этого я нашел WNetOpenEnum ().
*
************************************************** ************* /

Может быть, WNetOpenEnum вам тоже поможет.

Другие вопросы по тегам