ahm*_*md0 9 c++ winapi process
我正在尝试使用类似于此代码的 CreateProcessAsUser()API从服务启动用户模式进程.我的代码在99%的情况下工作正常,除非API成功,我从PROCESS_INFORMATION结构中获取进程句柄,但进程本身不会出现在我打算运行的交互式用户会话中.
有趣的是,如果我在进程句柄上调用GetExitCodeProcess(),它会成功返回代码0xC0000142.知道为什么吗?
错误0xC0000142是STATUS_DLL_INIT_FAILED(我使用错误代码查找工具确定了这一点).一个快速的谷歌发现了这个问题,其中说:
导致此问题的最常见原因是链接到的程序
user32.dll在无法与系统的窗口站和桌面通信的上下文中运行.通常,代理等服务在自己的窗口站和桌面上运行,而user32程序运行正常,但任何显示对话框的程序都会挂起而没有任何机会让人看到错误消息或关闭对话框.
因此,如果您没有使用任何函数user32.dll,则应删除该依赖项.如果您正在使用该DLL,那么我不确定您应该做什么.一种选择是动态加载DLL LoadLibrary并在成功时使用它(即你有一个有效的窗口会话)或者如果失败则回退到失败模式.
如果CreateProcess ...()API可以成功创建内部流程对象并开始初始化,则它们将返回TRUE ; 他们不会等待进程加载并开始运行其可执行映像.在某些情况下,初始化稍后会失败,但从内核的角度来看,它仍然是一个成功的过程创建.