Ошибка 170 в SetThreadDesktop
От: maks1180  
Дата: 01.07.20 12:22
Оценка:
Есть процесс который работает с правами SYSTEM, он создаёт отдельный поток через CreateThread()
Это поток переключается на разные декстопы, вот так

for (int i=0; i<8; i++) {
LPCSTR name = (i%2==0) ? "Default" : "Winlogon" ;

HDESK desktop = ::OpenDesktop(name, 0, FALSE, DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | DESKTOP_ENUMERATE | DESKTOP_WRITEOBJECTS |DESKTOP_READOBJECTS | DESKTOP_SWITCHDESKTOP |GENERIC_WRITE);

if (desktop == NULL)
throw Exception("unable to open desktop name '%s', error=%d", name, ::GetLastError());

if(!::SetThreadDesktop(desktop))
throw Exception("unable to SetThreadDesktop(%s), error=%d", name, GetLastError());

// создание окна или MessageBox
}


так вот всё хорошо работает, но если это поток создаст окно и удалить его ИЛИ выведет MessageBox (и пользователь его закроет)
то в Windows 7 так же всё хорошо, а в Windows 10 выдаёт ошибку 170 при SetThreadDesktop при переключении на десктоп "Winlogon"

Всё упростил как мог и теперь не знаю куда дальше двигаться, как решить эту проблему.
Готов заплатить если кто-то сможет её решить.
===============================================
(реклама, удалена модератором)
Отредактировано 01.07.2020 12:25 maks1180 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.