我想从具有中等完整性级别的流程创建具有低完整性级别的流程。 我找到了msdn例子:Designing Applications to Run at a Low Integrity Level
但它不适用于我的系统。已成功创建流程,但消息框
“对应无法正确初始化(0xC0000022 - STATUS_ACCESS_DENIED)......” 出现了。有没有人遇到同样的问题?
答案 0 :(得分:3)
我也碰到了这个。示例中使用的SID不正确。它应该是“S-1-16-4096”,而不是“S-1-16-1024”。
答案 1 :(得分:1)
我赞成@dyared的回答,因为它帮助我找到了完整的答案。我首先应该提一下,我并不是专门研究这个问题,这只是我的发现的总结。
似乎MSDN示例不能与指定的SID string一起使用,因为它指定的完整性级别太低。从Chromium's source code开始,示例中使用的S-1-16-1024
SID位于INTEGRITY_LEVEL_BELOW_LOW
和INTEGRITY_LEVEL_UNTRUSTED
之间:
const wchar_t* GetIntegrityLevelString(IntegrityLevel integrity_level) {
switch (integrity_level) {
case INTEGRITY_LEVEL_SYSTEM:
return L"S-1-16-16384";
case INTEGRITY_LEVEL_HIGH:
return L"S-1-16-12288";
case INTEGRITY_LEVEL_MEDIUM:
return L"S-1-16-8192";
case INTEGRITY_LEVEL_MEDIUM_LOW:
return L"S-1-16-6144";
case INTEGRITY_LEVEL_LOW:
return L"S-1-16-4096";
case INTEGRITY_LEVEL_BELOW_LOW:
return L"S-1-16-2048";
case INTEGRITY_LEVEL_UNTRUSTED:
return L"S-1-16-0";
case INTEGRITY_LEVEL_LAST:
return NULL;
}
此外,似乎@dyared建议的SID S-1-16-4096
在以受保护模式启动Internet Explorer时也会使用,如MSDN博客上Creating a Process in Protected Mode on Windows Vista文章中所述。
然而,因为它足以使示例工作并不意味着它对于每种情况都足够严格,并且必须选择适当的完整性级别来理解其含义。