TL; DR Я пишу приложение для удаленного рабочего стола, и у меня возникают проблемы с входом пользователя в систему и захватом рабочего стола по умолчанию с помощью DXGI; В настоящее время я могу захватить только заставку рабочего стола.
Здравствуйте! Я пишу C приложение, которое использует DXGI для захвата рабочего стола удаленного компьютера (например, TeamViewer или VN C). Следуя этим постам ( 1 ) ( 2 ) и исходному коду TightVN C, я написал следующий код, который открывает станцию Windows и рабочий стол и предоставляет доступ к потоку на рабочий стол:
BOOL logon = LogonUser("username",
NULL,
"password",
LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT,
&hToken);
hwinsta = OpenWindowStation("winsta0",
FALSE,
GENERIC_ALL);
BOOL process = SetProcessWindowStation(hwinsta);
HDESK hdesk = OpenInputDesktop(0,
FALSE,
GENERIC_ALL);
SetThreadDesktop(hdesk);
После этого я вызываю DXGI (как задокументировано [здесь] ), но записанный вывод - это экранная заставка Windows (несмотря на мой успешный вызов функция LogonUser()
). Я попытался вручную установить рабочий стол на рабочий стол по умолчанию с помощью
HDESK hdesk = OpenDesktop("default",
0,
FALSE,
GENERIC_ALL);
, но при этом функция DuplicateOutput()
завершается ошибкой с 0x80070005, что является ошибкой ACCESS_DENIED.
вопрос:
Кто-нибудь имеет представление о том, что я мог бы сделать по-другому, чтобы войти в систему пользователя и переключиться через рабочий стол с заставкой / winlogon на рабочий стол по умолчанию?
Спасибо!