Запуск CMD из службы Windows приводит к коду исключения 0xC0000142

У нас есть сервисное приложение, которое запускает CMD.exe с Stdin/Stdout/Stderr, перенаправленным на именованный канал. Служба работает как учетная запись администратора (она НЕ работает как LocalSystem). Среда разработки - Windows 8.1 Pro.

Когда мы запускаем CMD.exe с помощью CreateProcessWithLogonW(), он начинается и немедленно заканчивается кодом выхода 0xc0000142. Если вместо этого мы запускаем CMD, используяCreateProcess(), он работает нормально, что приводит меня к мысли, что мы спотыкаемся о какой-то модели безопасности в Windows. Обратите внимание - учетные данные, которые мы передаем, действительно действительны.

Я полагаю, что эта теория модели безопасности подтверждается тем фактом, что у нашей среды unittest нет проблем с запуском CreateProcessWithLogonW() из пользовательского пространства - но когда мы перемещаем эту инфраструктуру в службу Windows, это дает сбой. Примечание. Когда мы запускаем unittest, мы запускаем ту же учетную запись администратора, которую мы используем для запуска службы.

Ряд интернет-потоков обсуждают код исключения 0xC0000142 в Google и SO, но, похоже, они сосредоточены на возможной вирусной эпидемии. Мы запустили соответствующие sfc/scannow чтобы подтвердить, что у нас свежая и здоровая среда окон. И опять же, я не верю, что это вирус из-за того, что наша инфраструктура unittest работает безупречно из пространства пользователя - она ​​генерирует код исключения только внутри службы:

Всего существует четыре записи в журнале, которые записываются, когда мы сталкиваемся с кодом исключения; два для CONHOST.exe и два для CMD.exe, Я воспроизвел соответствующие записи ниже.

Записи CONHOST.exe:

Faulting application name: conhost.exe, version: 6.3.9600.17415, time stamp: 0x5450410b
Faulting module name: USER32.dll, version: 6.3.9600.18202, time stamp: 0x569e7d02
Exception code: 0xc0000142
Fault offset: 0x00000000000ecdd0

Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0

Problem signature:
P1: conhost.exe
P2: 6.3.9600.17415
P3: 5450410b
P4: USER32.dll
P5: 6.3.9600.18202
P6: 569e7d02
P7: c0000142
P8: 00000000000ecdd0
P9: 
P10: 

Записи CMD.exe

Faulting application name: cmd.exe, version: 6.3.9600.17415, time stamp: 0x545042b1
Faulting module name: KERNELBASE.dll, version: 6.3.9600.18202, time stamp: 0x569e7d02
Exception code: 0xc0000142
Fault offset: 0x00000000000ecdd0

Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0

Problem signature:
P1: cmd.exe
P2: 6.3.9600.17415
P3: 545042b1
P4: KERNELBASE.dll
P5: 6.3.9600.18202
P6: 569e7d02
P7: c0000142
P8: 00000000000ecdd0
P9: 
P10: 

Я был бы рад поделиться кодом - но из-за того, что это служба Windows, даже минимально воспроизводимый пример будет довольно длинным. Я надеялся, что кто-то может распознать проблему и указать нам какие-то документы по RTFM/ безопасности из MSDN, которые могут привести нас на правильный путь?

0 ответов

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