CAccessToken 類別
這個類別是存取令牌的包裝函式。
重要
這個類別及其成員不能用於在 Windows 執行階段 中執行的應用程式。
語法
class CAccessToken
成員
公用建構函式
名稱 | 描述 |
---|---|
CAccessToken::~CAccessToken | 解構函式。 |
公用方法
名稱 | 描述 |
---|---|
CAccessToken::Attach | 呼叫此方法以取得指定存取令牌句柄的擁有權。 |
CAccessToken::CheckTokenMembership | 呼叫這個方法,以判斷物件中 CAccessToken 是否已啟用指定的 SID。 |
CAccessToken::CreateImpersonationToken | 呼叫此方法以建立新的模擬存取令牌。 |
CAccessToken::CreatePrimaryToken | 呼叫此方法以建立新的主要令牌。 |
CAccessToken::CreateProcessAsUser | 呼叫這個方法,以在物件所 CAccessToken 表示之使用者的安全性內容中建立執行的新進程。 |
CAccessToken::CreateRestrictedToken | 呼叫此方法以建立新的受限制 CAccessToken 物件。 |
CAccessToken::D etach | 呼叫此方法以撤銷存取令牌的擁有權。 |
CAccessToken::D isablePrivilege | 呼叫此方法以停用 物件中的 CAccessToken 許可權。 |
CAccessToken::D isablePrivileges | 呼叫此方法以停用 物件中的 CAccessToken 一或多個許可權。 |
CAccessToken::EnablePrivilege | 呼叫此方法以啟用 物件中的 CAccessToken 許可權。 |
CAccessToken::EnablePrivileges | 呼叫此方法以啟用 物件中的 CAccessToken 一或多個許可權。 |
CAccessToken::GetDefaultDacl | 呼叫這個方法以傳回 CAccessToken 對象的預設 DACL。 |
CAccessToken::GetEffectiveToken | 呼叫這個方法,以取得 CAccessToken 物件等於目前線程生效的存取令牌。 |
CAccessToken::GetGroups | 呼叫此方法可傳回 CAccessToken 物件的令牌群組。 |
CAccessToken::GetHandle | 呼叫此方法以擷取存取令牌的句柄。 |
CAccessToken::GetImpersonationLevel | 呼叫此方法以從存取令牌取得模擬層級。 |
CAccessToken::GetLogonSessionId | 呼叫這個方法以取得與 CAccessToken 對象相關聯的登入會話標識碼。 |
CAccessToken::GetLogonSid | 呼叫這個方法以取得與 CAccessToken 對象相關聯的Logon 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 對象相關聯的終端機服務會話標識碼。 |
CAccessToken::GetThreadToken | 呼叫這個方法,使用來自指定線程的令牌初始化 CAccessToken 。 |
CAccessToken::GetTokenId | 呼叫此方法以取得與 CAccessToken 對象相關聯的令牌標識碼。 |
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::P rivilegeCheck | 呼叫這個方法,以判斷 物件中 CAccessToken 是否啟用一組指定的許可權。 |
CAccessToken::Revert | 呼叫此方法以停止使用模擬令牌的線程。 |
CAccessToken::SetDefaultDacl | 呼叫這個方法以設定 對象的預設 DACL CAccessToken 。 |
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 Class 物件的參考。
pbIsMember
接收檢查結果的變數指標。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
方法 CheckTokenMembership
會檢查存取令牌的使用者和群組 SID 是否存在。 如果 SID 存在且具有 SE_GROUP_ENABLED 屬性, pbIsMember 會設定為 TRUE,否則會設定為 FALSE。
在偵錯組建中,如果 pbIsMember 不是有效的指標,就會發生判斷提示錯誤。
注意
對象 CAccessToken
必須是模擬令牌,而不是主要令牌。
CAccessToken::CreateImpersonationToken
呼叫此方法以建立模擬存取令牌。
bool CreateImpersonationToken(
CAccessToken* pImp,
SECURITY_IMPERSONATION_LEVEL sil = SecurityImpersonation) const throw(...);
參數
皮條客
新 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 終止字串的指標。 此參數可能不是 NULL。
pCommandLine
指定要執行的命令行之 Null 終止字串的指標。
pProcessInformation
PROCESS_INFORMATION結構的指標,這個結構會接收新進程的識別資訊。
pStartupInfo
STARTUPINFO 結構的指標,指定新進程的主視窗應該如何顯示。
dwCreationFlags
指定控制優先順序類別和建立進程的其他旗標。 如需旗標清單,請參閱 Win32 函式 CreateProcessAsUser 。
bLoadProfile
如果為 TRUE,則會使用 LoadUserProfile 載入使用者的配置檔。
pProcessAttributes
SECURITY_ATTRIBUTES 結構的指標,指定新進程的安全性描述元,並判斷子進程是否可以繼承傳回的句柄。 如果 pProcessAttributes 為 NULL,進程會取得預設的安全性描述元,而且無法繼承句柄。
pThreadAttributes
SECURITY_ATTRIBUTES結構的指標,指定新線程的安全性描述元,並判斷子進程是否可以繼承傳回的句柄。 如果 pThreadAttributes 為 NULL,線程會取得預設的安全性描述元,而且無法繼承句柄。
bInherit
指出新進程是否繼承來自呼叫進程的句柄。 如果為TRUE,則呼叫進程中每個可繼承的開啟句柄都會由新進程繼承。 繼承的句柄具有與原始句柄相同的值和訪問許可權。
pCurrentDirectory
Null 終止字串的指標,指定新進程的目前磁碟驅動器和目錄。 字串必須是包含驅動器號的完整路徑。 如果此參數為 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
CTokenGroups
物件,指定僅限拒絕的 SID。
SidsToRestrict
CTokenGroups
物件,指定限制 SID。
PrivilegesToDelete
CTokenPrivileges
物件,指定要在受限制令牌中刪除的許可權。 預設值會建立空的物件。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
CreateRestrictedToken
會使用 CreateRestrictedToken Win32 函式來建立具有限制的新CAccessToken
物件。
重要
使用 CreateRestrictedToken
時,請確定下列事項:現有的令牌有效(且使用者未輸入)和 SidsToDisable 和 PrivilegesToDelete 都是有效的(且使用者未輸入)。 如果方法傳回 FALSE,則拒絕功能。
CAccessToken::D etach
呼叫此方法以撤銷存取令牌的擁有權。
HANDLE Detach() throw();
傳回值
傳回已中斷連結之 的句柄 CAccessToken
。
備註
這個方法會 CAccessToken
撤銷存取令牌的擁有權。
CAccessToken::D isablePrivilege
呼叫此方法以停用 物件中的 CAccessToken
許可權。
bool DisablePrivilege(
LPCTSTR pszPrivilege,
CTokenPrivileges* pPreviousState = NULL) throw(...);
參數
pszPrivilege
字串的指標,包含物件中 CAccessToken
要停用的許可權。
pPreviousState
CTokenPrivileges
物件的指標,該物件將包含先前的許可權狀態。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
CAccessToken::D isablePrivileges
呼叫此方法以停用 物件中的 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
CDacl 類別物件的指標,該物件將接收CAccessToken
對象的預設 DACL。
傳回值
如果已復原預設 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
對象相關聯的登入會話標識碼。
bool GetLogonSessionId(LUID* pluid) const throw(...);
參數
pluid
將接收登入會話標識碼的 LUID 指標。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
在偵錯組建中,如果 pluid 是無效的值,就會發生判斷提示錯誤。
CAccessToken::GetLogonSid
呼叫這個方法以取得與 CAccessToken
對象相關聯的Logon SID。
bool GetLogonSid(CSid* pSid) const throw(...);
參數
pSid
CSid Class 物件的指標。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
在偵錯組建中,如果 pSid 是無效的值,就會發生判斷提示錯誤。
CAccessToken::GetOwner
呼叫這個方法以取得與 CAccessToken
對象相關聯的擁有者。
bool GetOwner(CSid* pSid) const throw(...);
參數
pSid
CSid Class 物件的指標。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
此存取令牌生效時,預設會在任何建立的對象上設定擁有者。
CAccessToken::GetPrimaryGroup
呼叫這個方法以取得與 CAccessToken
對象相關聯的主要群組。
bool GetPrimaryGroup(CSid* pSid) const throw(...);
參數
pSid
CSid Class 物件的指標。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
此群組預設會在此存取令牌生效時所建立的任何對象上設定。
CAccessToken::GetPrivileges
呼叫這個方法以取得與 CAccessToken
對象相關聯的許可權。
bool GetPrivileges(CTokenPrivileges* pPrivileges) const throw(...);
參數
pPrivileges
將接收許可權的 CTokenPrivileges Class 物件的指標。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
CAccessToken::GetProcessToken
呼叫這個方法,以所指處理序的存取權杖初始化 CAccessToken
。
bool GetProcessToken(DWORD dwDesiredAccess, HANDLE hProcess = NULL) throw();
參數
dwDesiredAccess
指定存取遮罩,用以指定對存取權杖的必要存取類型。 這些必要的存取類型會與權杖的 DACL 比較,以決定要授與或拒絕的存取。
hProcess
處理已開啟存取權杖的處理序。 如果使用 NULL 的預設值,則會使用目前的進程。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
呼叫 OpenProcessToken Win32 函式。
CAccessToken::GetProfile
呼叫這個方法,以取得指向與 對象相關聯之使用者配置檔的 CAccessToken
句柄。
HANDLE GetProfile() const throw();
傳回值
傳回指向使用者配置檔的句柄,如果沒有配置檔,則傳回NULL。
CAccessToken::GetSource
呼叫這個方法以取得 物件的來源 CAccessToken
。
bool GetSource(TOKEN_SOURCE* pSource) const throw(...);
參數
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
CAccessToken::GetStatistics
呼叫此方法以取得與 CAccessToken
對象相關聯的資訊。
bool GetStatistics(TOKEN_STATISTICS* pStatistics) const throw(...);
參數
pStatistics
TOKEN_STATISTICS 結構的指標。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
CAccessToken::GetTerminalServicesSessionId
呼叫這個方法,以取得與 CAccessToken
對象相關聯的終端機服務會話標識碼。
bool GetTerminalServicesSessionId(DWORD* pdwSessionId) const throw(...);
參數
pdwSessionId
終端機服務會話標識碼。
傳回值
在成功時傳回 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
對象相關聯的令牌標識碼。
bool GetTokenId(LUID* pluid) const throw(...);
參數
pluid
將接收令牌識別碼的 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 Class 物件的指標。
傳回值
在成功時傳回 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
指定用戶名稱之 Null 終止字串的指標。 這是要登入的用戶帳戶名稱。
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::P rivilegeCheck
呼叫這個方法,以判斷 物件中 CAccessToken
是否啟用一組指定的許可權。
bool PrivilegeCheck(
PPRIVILEGE_SET RequiredPrivileges,
bool* pbResult) const throw();
參數
RequiredPrivileges
PRIVILEGE_SET 結構的指標。
pbResult
方法設定的值指標,指出物件中 CAccessToken
是否啟用任何或所有指定的許可權。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
傳回時 PrivilegeCheck
,如果啟用對應的許可權, Attributes
則每個 LUID_AND_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
呼叫這個方法以設定 對象的預設 DACL CAccessToken
。
bool SetDefaultDacl(const CDacl& rDacl) throw(...);
參數
rDacl
新的預設 CDacl 類別 資訊。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
預設 DACL 是使用這個存取令牌建立新物件時預設使用的 DACL。
CAccessToken::SetOwner
呼叫這個方法以設定 對象的擁有者 CAccessToken
。
bool SetOwner(const CSid& rSid) throw(...);
參數
rSid
包含擁有者資訊的 CSid Class 物件。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
擁有者是預設擁有者,用於這個存取令牌生效時所建立的新物件。
CAccessToken::SetPrimaryGroup
呼叫此方法以設定物件的主要群組 CAccessToken
。
bool SetPrimaryGroup(const CSid& rSid) throw(...);
參數
rSid
包含主要群組資訊的 CSid Class 物件。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
當這個存取令牌生效時,主要群組是新對象的預設群組。