Я использую следующий вызов API , чтобы определить имя удаленного клиента в сеансе сервера терминалов:
ret = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION,
WTS_INFO_CLASS.WTSClientName, buffer, bufferLen)
Обычно, когда приложение не работает в сеансе сервера терминалов, вызов завершается успешно (ret! = 0) и buffer
просто возвращает нулевой указатель. Поэтому я решил, что это было ожидаемое поведение.
Однако на одном клиентском компьютере функция начала давать сбой (ret == 0) и GetLastError
возвращает 5: доступ запрещен. (Как обычно, клиент утверждает, что конфигурация его системы не изменилась.)
Итак, мои вопросы следующие:
- Что является ожидаемым поведением при запросе WTSClientName на компьютере без терминальных служб (например, на «обычном» ПК с Windows 7)?
- В чем может быть причина возврата этого кода ошибки? Обратите внимание, что на наших тестовых машинах вызов функции всегда ведет себя как ожидалось (успех и пустой буфер), даже если у пользователя нет прав администратора.
Я не знаю, относится ли это к делу, но мы можем воспроизвести эту проблему (ошибка 5), вызвав функцию из веб-приложения. Однако в данном случае это не так (это обычное приложение Windows).