我想从具有中等完整性级别的进程创建具有低完整性级别的进程。我找到了 msdn 示例:Designing Applications to Run at a Low Integrity Level
但它不适用于我的系统。进程创建成功,但消息框
出现“Alpplication 未能正确初始化(0xC0000022 -- STATUS_ACCESS_DENIED)...”。有没有人遇到同样的问题?
我想从具有中等完整性级别的进程创建具有低完整性级别的进程。我找到了 msdn 示例:Designing Applications to Run at a Low Integrity Level
但它不适用于我的系统。进程创建成功,但消息框
出现“Alpplication 未能正确初始化(0xC0000022 -- STATUS_ACCESS_DENIED)...”。有没有人遇到同样的问题?
我也遇到了这个。示例中使用的 SID 不正确。它应该是“S-1-16-4096”,而不是“S-1-16-1024”。
我赞成@dyared 的答案,因为它帮助我找到了完整的答案。我首先要提一下,我不是专门研究这个问题的,这只是我的发现的一个总结。
似乎 MSDN 示例不适用于指定的SID 字符串,因为它指定的完整性级别太低。从Chromium 的源代码来看,示例中使用的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;
}
S-1-16-4096
此外, @dyared 建议的 SID 似乎也在保护模式下启动 Internet Explorer 时使用,如MSDN 博客上的 Windows Vista 上的在保护模式下创建进程文章中所述。
然而,因为足以让示例工作并不意味着它对每种情况都足够严格,因此必须了解其含义,选择适当的完整性级别。