Не удалось загрузить user32.dll при запуске процесса, запущенного на рабочем столе не по умолчанию, в сеансе 0 Winsta0

У меня есть служба Windows (работает на Windows Vista+), которая должна запустить обычное приложение с графическим интерфейсом. По какой-то причине мне нужно запустить приложение с графическим интерфейсом на рабочем столе не по умолчанию (конечно, поскольку оно запускается процессом службы, оно запускается в сеансе 0, WinSta0, но не на рабочем столе по умолчанию).

Код выглядит так.

// create new desktop
hDesktop = CreateDesktop(NEW_DESKTOP, 0, 0 ,0,
        DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS |
        DESKTOP_READOBJECTS | DESKTOP_ENUMERATE |
        DESKTOP_CREATEWINDOW | DESKTOP_CREATEMENU|
        DESKTOP_HOOKCONTROL, &sa);

// create process of the normal GUI application,
// running on the new desktop, not the default one
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.lpDesktop = NEW_DESKTOP;
ZeroMemory(&processInfo,sizeof(processInfo));
BOOL bRet = CreateProcess(NULL, &commandLine, NULL, NULL,
        FALSE, 0, NULL, NULL, &si, &processInfo);

Метод TCreateProcess(...) успешно завершается, но приложение GUI завершается сразу после запуска. С помощью Gflags я получил следующую информацию.

LdrpInitializeRoutines - Error: Init routine 7595D711 for DLL "C:\Windows\system32\USER32.dll" failed during DLL_PROCESS_ATTACH
_LdrpInitialize - ERROR: Process initialization failed with status 0xc0000142
LdrpInitializationFailure - ERROR: Process initialization failed with status 0xc0000142

Я искал некоторое время, кажется, это связано с проблемой безопасности. Я пытался предоставить все права на рабочий стол текущему пользователю, но это не помогло.

Одна вещь может помочь. Я заметил, что некоторые библиотеки DLL не загружались при работе с учетной записью SYSTEM, первая из них - uxTheme.dll.

У кого-нибудь есть идеи, почему он не работает с рабочим столом не по умолчанию, а работает хорошо с рабочим столом по умолчанию?

Благодарю.

1 ответ

Вам нужно использовать CrateDesktopEx и увеличить размер кучи - по умолчанию недостаточно даже для блокнота.

Другие вопросы по тегам