Windows 7 x64:低IL进程msdn示例不起作用

时间:2010-06-29 10:51:35

标签: c++ windows-7-x64 integrity

我想从具有中等完整性级别的流程创建具有低完整性级别的流程。 我找到了msdn例子:Designing Applications to Run at a Low Integrity Level

但它不适用于我的系统。已成功创建流程,但消息框

“对应无法正确初始化(0xC0000022 - STATUS_ACCESS_DENIED)......” 出现了。有没有人遇到同样的问题?

2 个答案:

答案 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_LOWINTEGRITY_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文章中所述。

然而,因为它足以使示例工作并不意味着它对于每种情况都足够严格,并且必须选择适当的完整性级别来理解其含义。