c++ - 如何确定进程的完整性级别?

标签 c++ security winapi

我最近需要获取进程的完整性级别,并从 MSDN 找到了帮助。示例代码如下所示:

if (GetTokenInformation(hToken, TokenIntegrityLevel, 
     pTIL, dwLengthNeeded, &dwLengthNeeded))
 {
  dwIntegrityLevel = *GetSidSubAuthority(pTIL->Label.Sid, 
    (DWORD)(UCHAR)(*GetSidSubAuthorityCount(pTIL->Label.Sid)-1));

  if (dwIntegrityLevel == SECURITY_MANDATORY_LOW_RID)
  {
   // Low Integrity
   wprintf(L"Low Process");
  }
  else if (dwIntegrityLevel >= SECURITY_MANDATORY_MEDIUM_RID && 
       dwIntegrityLevel < SECURITY_MANDATORY_HIGH_RID)
  {
   // Medium Integrity
   wprintf(L"Medium Process");
  }
  else if (dwIntegrityLevel >= SECURITY_MANDATORY_HIGH_RID)
  {
   // High Integrity
   wprintf(L"High Integrity Process");
  }
  else if (dwIntegrityLevel >= SECURITY_MANDATORY_SYSTEM_RID)
  {
   // System Integrity
   wprintf(L"System Integrity Process");
  }
 }

众所周知,

SECURITY_MANDATORY_LOW_RID == 0x00001000L
SECURITY_MANDATORY_MEDIUM_RID == 0x00002000L
SECURITY_MANDATORY_HIGH_RID == 0x00003000L
SECURITY_MANDATORY_SYSTEM_RID == 0x00004000L.

这是我的问题:
如果此示例代码是正确的,那么如果进程 A 的 dwIntegrityLevel0x00004100L,那么它的完整性级别是多少? SECURITY_MANDATORY_HIGH_RIDSECURITY_MANDATORY_SYSTEM_RID?这是否意味着具有 SECURITY_MANDATORY_SYSTEM_RID 级别的进程也具有 SECURITY_MANDATORY_HIGH_RID 级别?

如果示例代码是错误的,那么确定进程完整性级别的正确方法是什么?

最佳答案

注意 WinNT.h 中的等效声明:

#define SECURITY_MANDATORY_MEDIUM_PLUS_RID  (SECURITY_MANDATORY_MEDIUM_RID + 0x100)

这听起来像是您遇到了一个 SYSTEM_PLUS 进程。

关于c++ - 如何确定进程的完整性级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774738/

相关文章:

linux - 保护托管静态公共(public)网站的 EC2 实例

c++ - Xcode iPhone : Removing text from a . txt 文件

c++ - pugixml为同一级别的所有子级获取相同的地址

c++ - 从 ‘arma::umat’ 到 ‘arma::mat’ 的转换

c++ - 在哪里可以找到 C++ DNS 库?

c++ - Windows API SysWOW 重定向意外行为

c++ - 如何在 Windows 上预留内存并将以后的映射文件放入其中?

c# - 接口(interface) : simplified

security - 为什么应该使用 OpenID 而不是 OAuth 进行身份验证?

java - 持久性提供者密码困境