模拟级别 (授权)

SECURITY _ IMPERSONATION _ LEVEL 枚举定义四个模拟级别,这些模拟级别确定服务器可以在客户端上下文中执行的操作。

模拟级别 说明
SecurityAnonymous 服务器无法模拟或标识客户端。
SecurityIdentification 服务器可以获取客户端的标识和特权,但不能模拟客户端。
SecurityImpersonation 服务器可以模拟本地系统上的客户端安全上下文。
SecurityDelegation 服务器可以在远程系统上模拟客户端的安全上下文。

命名管道、RPC 或 DDE 连接的客户端可以控制模拟级别。 例如,命名管道客户端可以调用 CreateFile 函数,以打开命名管道的句柄并指定服务器的模拟级别。

当命名管道、RPC 或 DDE 连接为远程连接时,将忽略传递给 CreateFile 以设置模拟级别的标志。 在这种情况下,客户端的模拟级别由服务器启用的模拟级别确定,该模拟级别由目录服务中服务器帐户上的 标志设置。 例如,如果为服务器启用了委派,则即使传递给 CreateFile 的标志指定了标识模拟级别,也会将客户端的模拟级别设置为"委派"。

DDE 客户端使用具有 SECURITY _ QUALITY OF _ _ SERVICE结构的 DdeSetQualityOfService函数来指定模拟级别。 SecurityImpersonation 级别是命名管道、RPC 和 DDE 服务器的默认级别。 ImpersonateSelf、DuplicateTokenDuplicateTokenEx函数允许调用方指定模拟级别。 使用 GetTokenInformation 函数检索访问令牌 的模拟 级别

在 SecurityImpersonation 级别,线程大多数操作都发生在线程的模拟令牌的安全上下文中,而不是在拥有线程的进程的主令牌中。 例如,如果模拟线程打开 安全对象,则系统使用模拟令牌检查线程的访问。 同样,如果模拟线程创建新对象(例如通过调用 CreateFile 函数),则新对象的所有者是客户端访问令牌 的默认所有者

但是,在下列情况下,系统使用进程的主令牌,而不是调用线程的模拟令牌:

  • 如果模拟线程调用 CreateProcess 函数,则新进程始终继承进程的主令牌。
  • 对于需要 TCB NAME 标准版的函数(如 _ _ LogonUser函数),系统始终检查进程的主令牌中的特权。
  • 对于需要 AUDIT NAME 标准版函数(如 _ _ ObjectOpenAuditAlarm函数)的函数,系统始终检查进程的主令牌中的特权。
  • 在调用 OpenThreadToken 函数时,线程可以指定该函数是使用模拟令牌还是主令牌来确定是否授予请求的访问权限。