我们有一个服务应用程序,它使用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的文档可能会让我们走上正确的道路?