4

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

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

出现“Alpplication 未能正确初始化(0xC0000022 -- STATUS_ACCESS_DENIED)...”。有没有人遇到同样的问题?

4

2 回答 2

3

我也遇到了这个。示例中使用的 SID 不正确。它应该是“S-1-16-4096”,而不是“S-1-16-1024”。

于 2010-10-01T20:55:33.300 回答
1

我赞成@dyared 的答案,因为它帮助我找到了完整的答案。我首先要提一下,我不是专门研究这个问题的,这只是我的发现的一个总结。

似乎 MSDN 示例不适用于指定的SID 字符串,因为它指定的完整性级别太低。从Chromium 的源代码来看,示例中使用的S-1-16-1024SID 介于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 上的在保护模式下创建进程文章中所述。

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

于 2015-09-11T20:23:56.667 回答