我正在使用微软的CreateProcessWithLogonW 函数以特定用户身份运行程序。在我们几乎所有的测试场景中,一切都很好。我们的代码类似于微软页面上的示例。这个问题出现在 windows vista 上。我们使用以下方法创建环境块:
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 个字符。我看到的唯一位置是在微软页面的评论部分:
“未记录的环境块大小限制使用参数‘lpEnvironment’传递的环境块不得包含超过 5120 个字符,包括终止 \0 字符和尾随 \0 块分隔符。
如果环境块超过该限制,则调用将发出错误“0x000006F7:存根收到错误数据”。
在 Windows 7 SP1 上,记录的限制是环境的 32767 字节和每个变量的 8192 字节。但是,CreateProcessWithLogonW 函数尚未适应这些新限制。它仍然不接受超过 5120 个字符。
有什么可以做的吗?我犹豫要不要破解环境块。