WTSQuerySessionInformation иногда завершается с ошибкой «Отказано в доступе» - PullRequest
1 голос
/ 09 марта 2011

Я использую следующий вызов 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).

Ответы [ 3 ]

1 голос
/ 10 марта 2011

Я согласен с вами и также предполагаю, что некоторые из конфигурации системы на клиенте изменены. Чтобы выяснить, какие из изменений в файловой системе или в реестре важны для WTSQuerySessionInformation, попробуйте использовать Process Monitor .

Вы также можете попросить клиента загрузить инструмент, запустить Process Monitor, а затем запустить используемую тестовую программу WTSQuerySessionInformation, сохранить журнал и опубликовать его для вас. Я полагаю, что в журнале вы увидите ошибки «отказано в доступе». Я надеюсь, что это поможет вам найти проблему в конфигурации компьютера клиента.

0 голосов
/ 03 июля 2019

Это происходит, когда вы вызываете его из веб-приложения, поскольку веб-сервер работает под (сеанс 0) Windows.

Подробнее о сеансе 0

0 голосов
/ 18 июля 2017

Я не знаю ожидаемого поведения, но я столкнулся с кодом ошибки 5, доступ запрещен при вызове WTSEnumerateSessions в Win7.Установите DWORD HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\AllowRemoteRPC на 1, и проблема была немедленно устранена.

...