从Windows服务启动CMD会导致异常代码0xC0000142

时间:2016-03-22 15:21:46

标签: windows service createprocess createprocesswithlogonw

我们有一个服务应用程序,它使用Stdin / Stdout / Stderr启动CMD.exe 重定向到命名管道。该服务作为管理员帐户运行 (LocalSystem身份运行)。开发环境是Windows 8.1 Pro。

当我们使用CMD.exe启动CreateProcessWithLogonW()时,它会启动和 即时结束,退出代码 0xc0000142 。相反,我们使用启动CMD CreateProcess(),它运作正常,这让我相信我们正在绊倒 Windows中的某种安全模型。注意 - 我们传递的凭据绝对有效。

我认为这种安全模型理论得到了我们的进一步证实 unittest框架从用户运行CreateProcessWithLogonW()没有问题 空间 - 但是当我们将此基础架构移动到Windows服务时,它会失败。注意 - 当我们运行unittest时,我们使用与运行服务相同的管理员帐户运行。

许多互联网线程讨论谷歌和SO上的异常代码0xC0000142, 但他们似乎专注于某种病毒爆发的可能性。我们 运行了相应的sfc/scannow以确认我们有一个新的&健康 windows环境。而且我不相信这是一种病毒,因为事实 我们的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 个答案:

没有答案