CreateProcessWithLogonw

CreateProcessWithLogonw

我正在使用Microsoft的CreateProcessWithLogonW function作为特定用户运行程序。在我们几乎所有的测试场景中,一切都很好。我们的代码类似于微软页面上的示例。这个问题出现在WindowsVista上。我们使用以下方法创建环境块:

CreateEnvironmentBlock(&lpvEnv, hToken, TRUE)

然后将此传递给createprocesswithlogonw:
CreateProcessWithLogonW(argv[1], NULL, argv[2],
        LOGON_WITH_PROFILE, NULL, argv[3],
        CREATE_UNICODE_ENVIRONMENT, lpvEnv, szUserProfile,
        &si, &pi)

问题是环境块大于5120个字符。我看到的唯一提到的位置是在Microsoft页面的“注释”部分:
“对环境块大小的无证限制
与参数“lpenvironment”一起传递的环境块不能包含超过5120个字符,包括终止字符和尾随的块分隔符。
如果环境块超过该限制,则调用将发出错误“0x000006f7:存根接收到错误数据”。
在Windows7SP1上,记录的环境限制为32767字节,每个变量限制为8192字节。但是,createprocesswithlogonw函数并没有适应这些新的限制。它仍然不接受超过5120个字符。
对此有什么办法吗?我不敢去破坏环境。

最佳答案

希望到目前为止,这个具体问题已经得到纠正。但是,为了将来参考,在这种情况下最简单的解决方法是使用createprocesswithlogonw()来启动代理可执行文件,而不是实际要运行的程序。然后,代理可执行文件根据需要设置环境,并使用普通的旧createprocess()启动目标程序。

07-24 09:25