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 вам тоже поможет.