#c #winapi #citrix #terminal-services #wtsapi32
#c #winapi #citrix #службы терминала #wtsapi32
Вопрос:
Я пытаюсь перечислить серверы терминалов в нашем локальном домене, но 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, amp;DiscoveredServers, amp;count) == 0)
{
LastErrorMsgBox(GetLastError());
return 1;
}
WTSFreeMemory(DiscoveredServers);
return 0;
}
void LastErrorMsgBox(int err)
{
TCHAR dbg[1024];
LPTSTR sys = NULL;
_stprintf(dbg, TEXT("Errorcode: %dn"), err);
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)amp;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, я уверен, что нам придется пересмотреть нашу
* стратегию разработки в среде TS. Для записи также, те, которые
* используют функцию NetServerEnum для выполнения того же, что и WTSEnumerateServers, для этого
* также требуется, чтобы служба браузера компьютера была включена на Windows 2008 DC.
* Это также относится к Citrix WFAPI SDK — WFEnumerateServers *
* Лучшей заменой для этого, которую я нашел, является WNetOpenEnum().
*
***************************************************************/
Возможно, WNetOpenEnum вам тоже поможет.