Запуск 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, которые могут привести нас на правильный путь?