CAccessToken 类
此类是访问令牌的包装器。
重要
无法在 Windows 运行时中执行的应用程序中使用此类及其成员。
语法
class CAccessToken
成员
公共构造函数
名称 | 描述 |
---|---|
CAccessToken::~CAccessToken | 析构函数。 |
公共方法
名称 | 描述 |
---|---|
CAccessToken::Attach | 调用此方法以获取给定访问令牌句柄的所有权。 |
CAccessToken::CheckTokenMembership | 调用此方法可确定是否在 CAccessToken 对象中启用了指定的 SID。 |
CAccessToken::CreateImpersonationToken | 调用此方法以创建新的模拟访问令牌。 |
CAccessToken::CreatePrimaryToken | 调用此方法可创建一个新的主令牌。 |
CAccessToken::CreateProcessAsUser | 调用此方法可以创建一个在 CAccessToken 对象所代表的用户的安全上下文中运行的新进程。 |
CAccessToken::CreateRestrictedToken | 调用此方法以创建新的受限 CAccessToken 对象。 |
CAccessToken::Detach | 调用此方法可撤销访问令牌的所有权。 |
CAccessToken::DisablePrivilege | 调用此方法可在 CAccessToken 对象中禁用特权。 |
CAccessToken::DisablePrivileges | 调用此方法可禁用 CAccessToken 对象中的一个或多个特权。 |
CAccessToken::EnablePrivilege | 调用此方法可在 CAccessToken 对象中启用特权。 |
CAccessToken::EnablePrivileges | 调用此方法可在 CAccessToken 对象中启用一个或多个特权。 |
CAccessToken::GetDefaultDacl | 调用此方法可返回 CAccessToken 对象的默认 DACL。 |
CAccessToken::GetEffectiveToken | 调用此方法可获取等于当前线程的访问令牌的 CAccessToken 对象。 |
CAccessToken::GetGroups | 调用此方法可返回 CAccessToken 对象的令牌组。 |
CAccessToken::GetHandle | 调用此方法可检索访问令牌的句柄。 |
CAccessToken::GetImpersonationLevel | 调用此方法可从访问令牌获取模拟级别。 |
CAccessToken::GetLogonSessionId | 调用此方法可获取与 CAccessToken 对象关联的登录会话 ID。 |
CAccessToken::GetLogonSid | 调用此方法可获取与 CAccessToken 对象关联的登录 SID。 |
CAccessToken::GetOwner | 调用此方法可获取与 CAccessToken 对象关联的所有者。 |
CAccessToken::GetPrimaryGroup | 调用此方法可获取与 CAccessToken 对象关联的主组。 |
CAccessToken::GetPrivileges | 调用此方法可获取与 CAccessToken 对象关联的特权。 |
CAccessToken::GetProcessToken | 调用此方法可使用给定进程中的访问令牌初始化 CAccessToken 。 |
CAccessToken::GetProfile | 调用此方法以获取指向与 CAccessToken 对象关联的用户配置文件的句柄。 |
CAccessToken::GetSource | 调用此方法可获取 CAccessToken 对象的来源。 |
CAccessToken::GetStatistics | 调用此方法可获取与 CAccessToken 对象关联的信息。 |
CAccessToken::GetTerminalServicesSessionId | 调用此方法可获取与 CAccessToken 对象关联的终端服务会话 ID。 |
CAccessToken::GetThreadToken | 调用此方法可使用给定线程中的令牌初始化 CAccessToken 。 |
CAccessToken::GetTokenId | 调用此方法可获取与 CAccessToken 对象关联的令牌 ID。 |
CAccessToken::GetType | 调用此方法可获取 CAccessToken 对象的令牌类型。 |
CAccessToken::GetUser | 调用此方法可识别与 CAccessToken 对象关联的用户。 |
CAccessToken::HKeyCurrentUser | 调用此方法以获取指向与 CAccessToken 对象关联的用户配置文件的句柄。 |
CAccessToken::Impersonate | 调用此方法可将模拟 CAccessToken 分配给线程。 |
CAccessToken::ImpersonateLoggedOnUser | 调用此方法可允许调用线程模拟登录用户的安全上下文。 |
CAccessToken::IsTokenRestricted | 调用此方法可测试 CAccessToken 对象是否包含受限 SID 列表。 |
CAccessToken::LoadUserProfile | 调用此方法可加载与 CAccessToken 对象关联的用户配置文件。 |
CAccessToken::LogonUser | 调用此方法来为与给定凭据关联的用户创建登录会话。 |
CAccessToken::OpenCOMClientToken | 从处理来自客户端的调用的 COM 服务器中调用此方法,以使用来自 COM 客户端的访问令牌来初始化 CAccessToken 。 |
CAccessToken::OpenNamedPipeClientToken | 从通过命名管道接收请求的服务器中调用此方法,以使用来自客户端的访问令牌来初始化 CAccessToken 。 |
CAccessToken::OpenRPCClientToken | 从处理来自 RPC 客户端的调用的服务器中调用此方法,以使用来自客户端的访问令牌来初始化 CAccessToken 。 |
CAccessToken::OpenThreadToken | 调用此方法来设置模拟级别,然后使用给定线程中的令牌来初始化 CAccessToken 。 |
CAccessToken::PrivilegeCheck | 调用此方法可确定是否在 CAccessToken 对象中启用了一组指定的特权。 |
CAccessToken::Revert | 调用此方法以停止正在使用模拟令牌的线程。 |
CAccessToken::SetDefaultDacl | 调用此方法可设置 CAccessToken 对象的默认 DACL。 |
CAccessToken::SetOwner | 调用此方法可设置 CAccessToken 对象的所有者。 |
CAccessToken::SetPrimaryGroup | 调用此方法可设置 CAccessToken 对象的主要组。 |
备注
访问令牌是描述进程或线程的安全上下文的对象,分配给登录到 Windows 系统的每个用户。
有关 Windows 中访问控制模型的简介,请参阅 Windows SDK 中的访问控制。
要求
标头: atlsecurity.h
CAccessToken::Attach
调用此方法以获取给定访问令牌句柄的所有权。
void Attach(HANDLE hToken) throw();
参数
hToken
访问令牌的句柄。
注解
在调试版本中,如果 CAccessToken
对象已经拥有访问令牌的所有权,则会发生断言错误。
CAccessToken::~CAccessToken
析构函数。
virtual ~CAccessToken() throw();
注解
释放所有已分配的资源。
CAccessToken::CheckTokenMembership
调用此方法可确定是否在 CAccessToken
对象中启用了指定的 SID。
bool CheckTokenMembership(
const CSid& rSid,
bool* pbIsMember) const throw(...);
参数
rSid
对 CSid 类对象的引用。
pbIsMember
指向接收检查结果的变量的指针。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
CheckTokenMembership
方法检查访问令牌的用户和组 SID 中是否存在 SID。 如果 SID 存在并且具有 SE_GROUP_ENABLED 属性,则 pbIsMember 设置为 TRUE;否则,设置为 FALSE。
在调试版本中,如果 pbIsMember 不是有效指针,则会发生断言错误。
注意
CAccessToken
对象必须是模拟令牌而不是主令牌。
CAccessToken::CreateImpersonationToken
调用此方法以创建模拟访问令牌。
bool CreateImpersonationToken(
CAccessToken* pImp,
SECURITY_IMPERSONATION_LEVEL sil = SecurityImpersonation) const throw(...);
参数
pImp
指向新的 CAccessToken
对象的指针。
sil
指定提供新令牌的模拟级别的 SECURITY_IMPERSONATION_LEVEL 枚举类型。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
CreateImpersonationToken
调用 DuplicateToken 创建一个新的模拟令牌。
CAccessToken::CreatePrimaryToken
调用此方法可创建一个新的主令牌。
bool CreatePrimaryToken(
CAccessToken* pPri,
DWORD dwDesiredAccess = MAXIMUM_ALLOWED,
const CSecurityAttributes* pTokenAttributes = NULL) const throw(...);
参数
pPri
指向新的 CAccessToken
对象的指针。
dwDesiredAccess
指定新令牌的请求访问权限。 默认值 MAXIMUM_ALLOWED 请求对调用者有效的所有访问权限。 有关访问权限的更多信息,请参阅访问权限和访问掩码。
pTokenAttributes
指向 SECURITY_ATTRIBUTES 结构的指针,该结构为新令牌指定安全描述符并确定子进程是否可以继承令牌。 如果 pTokenAttributes 为 NULL,则令牌获取默认安全描述符并且无法继承句柄。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
注解
CreatePrimaryToken
调用 DuplicateTokenEx 创建一个新的主令牌。
CAccessToken::CreateProcessAsUser
调用此方法可以创建一个在 CAccessToken
对象所代表的用户的安全上下文中运行的新进程。
bool CreateProcessAsUser(
LPCTSTR pApplicationName,
LPTSTR pCommandLine,
LPPROCESS_INFORMATION pProcessInformation,
LPSTARTUPINFO pStartupInfo,
DWORD dwCreationFlags = NORMAL_PRIORITY_CLASS,
bool bLoadProfile = false,
const CSecurityAttributes* pProcessAttributes = NULL,
const CSecurityAttributes* pThreadAttributes = NULL,
bool bInherit = false,
LPCTSTR pCurrentDirectory = NULL) throw();
参数
pApplicationName
一个指针,指向指定要执行的模块的以空字符结尾的字符串。 此参数不能为 NULL。
pCommandLine
一个指针,指向指定要执行的命令行的以空字符结尾的字符串。
pProcessInformation
一个指针,指向接收有关新进程的标识信息的 PROCESS_INFORMATION 结构。
pStartupInfo
指向 STARTUPINFO 结构的指针,该结构指定新进程的主窗口应如何显示。
dwCreationFlags
指定控制优先级和进程创建的附加标志。 有关标志列表,请参阅 Win32 函数 CreateProcessAsUser。
bLoadProfile
如果为 TRUE,则使用 LoadUserProfile 加载用户的配置文件。
pProcessAttributes
指向 SECURITY_ATTRIBUTES 结构的指针,该结构为新进程指定安全描述符并确定子进程是否可以继承返回的句柄。 如果 pProcessAttributes 为 NULL,则进程获取默认安全描述符,并且无法继承句柄。
pThreadAttributes
指向 SECURITY_ATTRIBUTES 结构的指针,该结构为新线程指定安全描述符并确定子进程是否可以继承返回的句柄。 如果 pTokenAttributes 为 NULL,则线程获取默认安全描述符并且无法继承句柄。
bInherit
指示新进程是否从调用进程继承句柄。 如果为 TRUE,则调用进程中的每个可继承打开句柄都由新进程继承。 继承的句柄与原始句柄具有相同的值和访问特权。
pCurrentDirectory
指向以空字符结尾的字符串的指针,该字符串指定新进程的当前驱动器和目录。 该字符串必须是包含驱动器号的完整路径。 如果此参数为 NULL,则新进程将采用与调用方进程相同的当前驱动器和目录。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
CreateProcessAsUser
使用 CreateProcessAsUser
Win32 函数创建一个新进程,该进程在 CAccessToken
对象所代表的用户的安全上下文中运行。 有关所需参数的完整讨论,请参阅 CreateProcessAsUser 函数的描述。
要使此方法成功,CAccessToken
对象必须拥有 AssignPrimaryToken(除非它是受限制的令牌)和 increaseQuota 权限。
CAccessToken::CreateRestrictedToken
调用此方法以创建新的受限 CAccessToken
对象。
bool CreateRestrictedToken(
CAccessToken* pRestrictedToken,
const CTokenGroups& SidsToDisable,
const CTokenGroups& SidsToRestrict,
const CTokenPrivileges& PrivilegesToDelete = CTokenPrivileges()) const throw(...);
参数
pRestrictedToken
新的受限 CAccessToken
对象。
SidsToDisable
指定仅拒绝 SID 的 CTokenGroups
对象。
SidsToRestrict
指定限制 SID 的 CTokenGroups
对象。
PrivilegesToDelete
指定要在受限令牌中删除的权限的 CTokenPrivileges
对象。 默认值会创建一个空对象。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
注解
CreateRestrictedToken
使用 CreateRestrictedToken Win32 函数创建一个有限制的新 CAccessToken
对象。
重要
使用 CreateRestrictedToken
时,请确保以下内容:现有令牌有效(并且不是用户输入的)并且 SidsToDisable 和 PrivilegesToDelete 都是有效的(并且不是用户输入的)。 如果该方法返回 FALSE,则拒绝功能。
CAccessToken::Detach
调用此方法可撤销访问令牌的所有权。
HANDLE Detach() throw();
返回值
返回已分离的 CAccessToken
的句柄。
备注
此方法撤销 CAccessToken
的访问令牌所有权。
CAccessToken::DisablePrivilege
调用此方法可在 CAccessToken
对象中禁用特权。
bool DisablePrivilege(
LPCTSTR pszPrivilege,
CTokenPrivileges* pPreviousState = NULL) throw(...);
参数
pszPrivilege
指向包含要在 CAccessToken
对象中禁用的权限的字符串的指针。
pPreviousState
一个指针,指向将包含先前特权状态的 CTokenPrivileges
对象。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::DisablePrivileges
调用此方法可禁用 CAccessToken
对象中的一个或多个特权。
bool DisablePrivileges(
const CAtlArray<LPCTSTR>& rPrivileges,
CTokenPrivileges* pPreviousState = NULL) throw(...);
参数
rPrivileges
指向包含在 CAccessToken
对象中禁用的特权的字符串数组的指针。
pPreviousState
一个指针,指向将包含先前特权状态的 CTokenPrivileges
对象。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::EnablePrivilege
调用此方法可在 CAccessToken
对象中启用特权。
bool EnablePrivilege(
LPCTSTR pszPrivilege,
CTokenPrivileges* pPreviousState = NULL) throw(...);
参数
pszPrivilege
指向包含要在 CAccessToken
对象中启用的特权的字符串的指针。
pPreviousState
一个指针,指向将包含先前特权状态的 CTokenPrivileges
对象。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::EnablePrivileges
调用此方法可在 CAccessToken
对象中启用一个或多个特权。
bool EnablePrivileges(
const CAtlArray<LPCTSTR>& rPrivileges,
CTokenPrivileges* pPreviousState = NULL) throw(...);
参数
rPrivileges
指向包含要在 CAccessToken
对象中启用的特权的字符串数组的指针。
pPreviousState
一个指针,指向将包含先前特权状态的 CTokenPrivileges
对象。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::GetDefaultDacl
调用此方法可返回 CAccessToken
对象的默认 DACL。
bool GetDefaultDacl(CDacl* pDacl) const throw(...);
参数
pDacl
指向将接收 CAccessToken
对象的默认 DACL 的 CDacl 类对象的指针。
返回值
如果默认 DACL 已恢复,则返回 TRUE,否则返回 FALSE。
CAccessToken::GetEffectiveToken
调用此方法可获取等于当前线程的访问令牌的 CAccessToken
对象。
bool GetEffectiveToken(DWORD dwDesiredAccess) throw();
参数
dwDesiredAccess
指定一个访问掩码,该掩码指定对访问令牌发起访问的请求类型。 这些请求的访问类型与令牌的 DACL 比较来确定同意或拒绝哪些访问。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::GetGroups
调用此方法可返回 CAccessToken
对象的令牌组。
bool GetGroups(CTokenGroups* pGroups) const throw(...);
参数
pGroups
指向 CTokenGroups 类对象的指针,此对象将接收组信息。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::GetHandle
调用此方法可检索访问令牌的句柄。
HANDLE GetHandle() const throw();
返回值
返回 CAccessToken
对象访问令牌的句柄。
CAccessToken::GetImpersonationLevel
调用此方法可从访问令牌获取模拟级别。
bool GetImpersonationLevel(
SECURITY_IMPERSONATION_LEVEL* pImpersonationLevel) const throw(...);
参数
pImpersonationLevel
指向 SECURITY_IMPERSONATION_LEVEL 枚举类型的指针,此枚举类型将接收模拟级别信息。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::GetLogonSessionId
调用此方法可获取与 CAccessToken
对象关联的登录会话 ID。
bool GetLogonSessionId(LUID* pluid) const throw(...);
参数
pluid
指向 LUID 的指针,LUID 将接收登录会话 ID。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
注解
在调试版本中,如果 pluid 是无效值,则会发生断言错误。
CAccessToken::GetLogonSid
调用此方法可获取与 CAccessToken
对象关联的登录 SID。
bool GetLogonSid(CSid* pSid) const throw(...);
参数
pSid
指向 CSid 类对象的指针。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
注解
在调试版本中,如果 pSid 是无效值,则会发生断言错误。
CAccessToken::GetOwner
调用此方法可获取与 CAccessToken
对象关联的所有者。
bool GetOwner(CSid* pSid) const throw(...);
参数
pSid
指向 CSid 类对象的指针。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
注解
默认情况下,在此访问令牌生效时创建的任何对象上都设置了所有者。
CAccessToken::GetPrimaryGroup
调用此方法可获取与 CAccessToken
对象关联的主组。
bool GetPrimaryGroup(CSid* pSid) const throw(...);
参数
pSid
指向 CSid 类对象的指针。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
该组默认设置在此访问令牌有效时创建的任何对象上。
CAccessToken::GetPrivileges
调用此方法可获取与 CAccessToken
对象关联的特权。
bool GetPrivileges(CTokenPrivileges* pPrivileges) const throw(...);
参数
pPrivileges
指向将接收特权的 CTokenPrivileges 类对象的指针。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::GetProcessToken
调用此方法可使用给定进程中的访问令牌初始化 CAccessToken
。
bool GetProcessToken(DWORD dwDesiredAccess, HANDLE hProcess = NULL) throw();
参数
dwDesiredAccess
指定一个访问掩码,该掩码指定对访问令牌发起访问的请求类型。 这些请求的访问类型与令牌的 DACL 比较来确定同意或拒绝哪些访问。
hProcess
用于访问令牌已打开的进程的句柄。 如果使用默认值 NULL,将使用当前进程。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
调用 Win32 函数 OpenProcessToken。
CAccessToken::GetProfile
调用此方法以获取指向与 CAccessToken
对象关联的用户配置文件的句柄。
HANDLE GetProfile() const throw();
返回值
返回指向用户配置文件的句柄,如果不存在配置文件,则返回 NULL。
CAccessToken::GetSource
调用此方法可获取 CAccessToken
对象的来源。
bool GetSource(TOKEN_SOURCE* pSource) const throw(...);
参数
pSource
指向 TOKEN_SOURCE 结构的指针。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::GetStatistics
调用此方法可获取与 CAccessToken
对象关联的信息。
bool GetStatistics(TOKEN_STATISTICS* pStatistics) const throw(...);
参数
pStatistics
指向 TOKEN_STATISTICS 结构的指针。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::GetTerminalServicesSessionId
调用此方法可获取与 CAccessToken
对象关联的终端服务会话 ID。
bool GetTerminalServicesSessionId(DWORD* pdwSessionId) const throw(...);
参数
pdwSessionId
终端服务会话 ID。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::GetThreadToken
调用此方法可使用给定线程中的令牌初始化 CAccessToken
。
bool GetThreadToken(
DWORD dwDesiredAccess,
HANDLE hThread = NULL,
bool bOpenAsSelf = true) throw();
参数
dwDesiredAccess
指定一个访问掩码,该掩码指定对访问令牌发起访问的请求类型。 这些请求的访问类型与令牌的 DACL 比较来确定同意或拒绝哪些访问。
hThread
其访问令牌已打开的线程的句柄。
bOpenAsSelf
指示是针对调用 GetThreadToken
方法的线程的安全上下文还是针对调用线程的进程的安全上下文进行访问检查。
如果此参数为 FALSE,则使用调用线程的安全上下文执行访问检查。 如果线程正在模拟客户端,此安全性上下文可以是客户端进程的安全性上下文。 如果此参数为 TRUE,则使用调用线程的进程的安全上下文进行访问检查。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::GetTokenId
调用此方法可获取与 CAccessToken
对象关联的令牌 ID。
bool GetTokenId(LUID* pluid) const throw(...);
参数
pluid
指向将接收令牌 ID 的 LUID。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::GetType
调用此方法可获取 CAccessToken
对象的令牌类型。
bool GetType(TOKEN_TYPE* pType) const throw(...);
参数
pType
成功时接收令牌类型的 TOKEN_TYPE 变量的地址。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
TOKEN_TYPE 枚举类型包含区分主令牌和模拟令牌的值。
CAccessToken::GetUser
调用此方法可识别与 CAccessToken
对象关联的用户。
bool GetUser(CSid* pSid) const throw(...);
参数
pSid
指向 CSid 类对象的指针。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
CAccessToken::HKeyCurrentUser
调用此方法以获取指向与 CAccessToken
对象关联的用户配置文件的句柄。
HKEY HKeyCurrentUser() const throw();
返回值
返回指向用户配置文件的句柄,如果不存在配置文件,则返回 NULL。
CAccessToken::Impersonate
调用此方法可将模拟 CAccessToken
分配给线程。
bool Impersonate(HANDLE hThread = NULL) const throw(...);
参数
hThread
要分配模拟令牌的线程的句柄。 此句柄必须已使用 TOKEN_IMPERSONATE 访问权限打开。 如果 hThread 为 NULL,则该方法会导致线程停止使用模拟令牌。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
在调试版本中,如果 CAccessToken
没有指向令牌的有效指针,则会发生断言错误。
CAutoRevertImpersonation 类可用于自动还原模拟的访问令牌。
CAccessToken::ImpersonateLoggedOnUser
调用此方法可允许调用线程模拟登录用户的安全上下文。
bool ImpersonateLoggedOnUser() const throw(...);
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
注解
重要
如果对模拟函数的调用因任何原因失败,则不会模拟客户端,并且客户端请求是在进行调用的进程的安全上下文中进行的。 如果该进程作为高特权帐户或作为管理组的成员运行,则用户可能能够执行他或她将被禁止的操作。 因此,应始终确认此函数的返回值。
CAccessToken::IsTokenRestricted
调用此方法可测试 CAccessToken
对象是否包含受限 SID 列表。
bool IsTokenRestricted() const throw();
返回值
如果对象包含限制 SID 列表,则返回 TRUE,如果没有限制 SID 或方法失败,则返回 FALSE。
CAccessToken::LoadUserProfile
调用此方法可加载与 CAccessToken
对象关联的用户配置文件。
bool LoadUserProfile() throw(...);
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
在调试版本中,如果 CAccessToken
不包含有效令牌或用户配置文件已存在,则会发生断言错误。
CAccessToken::LogonUser
调用此方法来为与给定凭据关联的用户创建登录会话。
bool LogonUser(
LPCTSTR pszUserName,
LPCTSTR pszDomain,
LPCTSTR pszPassword,
DWORD dwLogonType = LOGON32_LOGON_INTERACTIVE,
DWORD dwLogonProvider = LOGON32_PROVIDER_DEFAULT) throw();
参数
pszUserName
指向指定用户名的以空字符结尾的字符串的指针。 这是要登录的用户帐户的名称。
pszDomain
指向以 null 结尾的字符串的指针,该字符串指定其帐户数据库包含 pszUserName 帐户的域或服务器的名称。
pszPassword
指向以 null 结尾的字符串的指针,该字符串指定 pszUserName 指定的用户帐户的明文密码。
dwLogonType
指定要执行的登录操作的类型。 有关更多详细信息,请参阅 LogonUser。
dwLogonProvider
指定登录提供程序。 有关更多详细信息,请参阅 LogonUser。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
从登录生成的访问令牌将与 CAccessToken
相关联。 要使此方法成功,CAccessToken
对象必须拥有 SE_TCB_NAME 特权,将持有者标识为受信任计算机库的一部分。 有关所需权限的更多信息,请参阅 LogonUser。
CAccessToken::OpenCOMClientToken
从处理来自客户端的调用的 COM 服务器中调用此方法,以使用来自 COM 客户端的访问令牌来初始化 CAccessToken
。
bool OpenCOMClientToken(
DWORD dwDesiredAccess,
bool bImpersonate = false,
bool bOpenAsSelf = true) throw(...);
参数
dwDesiredAccess
指定一个访问掩码,该掩码指定对访问令牌发起访问的请求类型。 这些请求的访问类型与令牌的 DACL 比较来确定同意或拒绝哪些访问。
bImpersonate
如果为 TRUE,如果此调用成功完成,当前线程将模拟调用 COM 客户端。 如果为 FALSE,则将打开访问令牌,但在此调用完成时线程将没有模拟令牌。
bOpenAsSelf
指示是针对调用 GetThreadToken 方法的线程的安全上下文还是针对调用线程的进程的安全上下文进行访问检查。
如果此参数为 FALSE,则使用调用线程的安全上下文执行访问检查。 如果线程正在模拟客户端,此安全性上下文可以是客户端进程的安全性上下文。 如果此参数为 TRUE,则使用调用线程的进程的安全上下文进行访问检查。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
CAutoRevertImpersonation 类可用于自动恢复通过将 bImpersonate 标志设置为 TRUE 创建的模拟访问令牌。
CAccessToken::OpenNamedPipeClientToken
从通过命名管道接收请求的服务器中调用此方法,以使用来自客户端的访问令牌来初始化 CAccessToken
。
bool OpenNamedPipeClientToken(
HANDLE hPipe,
DWORD dwDesiredAccess,
bool bImpersonate = false,
bool bOpenAsSelf = true) throw(...);
参数
hPipe
命名管道的句柄。
dwDesiredAccess
指定一个访问掩码,该掩码指定对访问令牌发起访问的请求类型。 这些请求的访问类型与令牌的 DACL 比较来确定同意或拒绝哪些访问。
bImpersonate
如果为 TRUE,如果此调用成功完成,当前线程将模拟调用管道客户端。 如果为 FALSE,则将打开访问令牌,但在此调用完成时线程将没有模拟令牌。
bOpenAsSelf
指示是针对调用 GetThreadToken 方法的线程的安全上下文还是针对调用线程的进程的安全上下文进行访问检查。
如果此参数为 FALSE,则使用调用线程的安全上下文执行访问检查。 如果线程正在模拟客户端,此安全性上下文可以是客户端进程的安全性上下文。 如果此参数为 TRUE,则使用调用线程的进程的安全上下文进行访问检查。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
CAutoRevertImpersonation 类可用于自动恢复通过将 bImpersonate 标志设置为 TRUE 创建的模拟访问令牌。
CAccessToken::OpenRPCClientToken
从处理来自 RPC 客户端的调用的服务器中调用此方法,以使用来自客户端的访问令牌来初始化 CAccessToken
。
bool OpenRPCClientToken(
RPC_BINDING_HANDLE BindingHandle,
DWORD dwDesiredAccess,
bool bImpersonate = false,
bool bOpenAsSelf = true) throw(...);
参数
BindingHandle
服务器上的绑定句柄,表示与客户端的绑定。
dwDesiredAccess
指定一个访问掩码,该掩码指定对访问令牌发起访问的请求类型。 这些请求的访问类型与令牌的 DACL 比较来确定同意或拒绝哪些访问。
bImpersonate
如果为 TRUE,如果此调用成功完成,当前线程将模拟调用 RPC 客户端。 如果为 FALSE,则将打开访问令牌,但在此调用完成时线程将没有模拟令牌。
bOpenAsSelf
指示是针对调用 GetThreadToken 方法的线程的安全上下文还是针对调用线程的进程的安全上下文进行访问检查。
如果此参数为 FALSE,则使用调用线程的安全上下文执行访问检查。 如果线程正在模拟客户端,此安全性上下文可以是客户端进程的安全性上下文。 如果此参数为 TRUE,则使用调用线程的进程的安全上下文进行访问检查。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
CAutoRevertImpersonation 类可用于自动恢复通过将 bImpersonate 标志设置为 TRUE 创建的模拟访问令牌。
CAccessToken::OpenThreadToken
调用此方法来设置模拟级别,然后使用给定线程中的令牌来初始化 CAccessToken
。
bool OpenThreadToken(
DWORD dwDesiredAccess,
bool bImpersonate = false,
bool bOpenAsSelf = true,
SECURITY_IMPERSONATION_LEVEL sil = SecurityImpersonation) throw(...);
参数
dwDesiredAccess
指定一个访问掩码,该掩码指定对访问令牌发起访问的请求类型。 这些请求的访问类型与令牌的 DACL 比较来确定同意或拒绝哪些访问。
bImpersonate
如果为 TRUE,则在此方法完成后,线程将保留在请求的模拟级别。 如果为 FALSE,线程将恢复到其原始模拟级别。
bOpenAsSelf
指示是针对调用 GetThreadToken 方法的线程的安全上下文还是针对调用线程的进程的安全上下文进行访问检查。
如果此参数为 FALSE,则使用调用线程的安全上下文执行访问检查。 如果线程正在模拟客户端,此安全性上下文可以是客户端进程的安全性上下文。 如果此参数为 TRUE,则使用调用线程的进程的安全上下文进行访问检查。
sil
指定提供令牌的模拟级别的 SECURITY_IMPERSONATION_LEVEL 枚举类型。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
OpenThreadToken
类似于 CAccessToken::GetThreadToken,但在从线程的访问令牌初始化 CAccessToken
之前设置模拟级别。
CAutoRevertImpersonation 类可用于自动恢复通过将 bImpersonate 标志设置为 TRUE 创建的模拟访问令牌。
CAccessToken::PrivilegeCheck
调用此方法可确定是否在 CAccessToken
对象中启用了一组指定的特权。
bool PrivilegeCheck(
PPRIVILEGE_SET RequiredPrivileges,
bool* pbResult) const throw();
参数
RequiredPrivileges
指向 PRIVILEGE_SET 结构的指针。
pbResult
指向该方法设置的值的指针,以指示是否在 CAccessToken
对象中启用了任何或所有指定的特权。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
PrivilegeCheck
返回时,如果启用了相应的权限,则每个 LUID_AND_ATTRIBUTES 结构的 Attributes
成员都设置为 SE_PRIVILEGE_USED_FOR_ACCESS。 此方法调用 PrivilegeCheck Win32 函数。
CAccessToken::Revert
调用此方法以停止线程使用模拟令牌。
bool Revert(HANDLE hThread = NULL) const throw();
参数
hThread
要从模拟中恢复的线程的句柄。 如果 hThread 为 NULL,则假定当前线程。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
注解
可以使用 CAutoRevertImpersonation 类自动执行模拟令牌的还原。
CAccessToken::SetDefaultDacl
调用此方法可设置 CAccessToken
对象的默认 DACL。
bool SetDefaultDacl(const CDacl& rDacl) throw(...);
参数
rDacl
新的默认 CDacl 类信息。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
默认 DACL 是在使用此访问令牌有效创建新对象时默认使用的 DACL。
CAccessToken::SetOwner
调用此方法可设置 CAccessToken
对象的所有者。
bool SetOwner(const CSid& rSid) throw(...);
参数
rSid
包含所有者信息的 CSid 类对象。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
注解
所有者是用于在此访问令牌生效时创建的新对象的默认所有者。
CAccessToken::SetPrimaryGroup
调用此方法可设置 CAccessToken
对象的主要组。
bool SetPrimaryGroup(const CSid& rSid) throw(...);
参数
rSid
包含主要组信息的 CSid 类对象。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
主组是此访问令牌生效时创建的新对象的默认组。
另请参阅
ATLSecurity 示例
访问令牌
类概述