假設我有一個句柄下面的代碼
pid = 1234
pHandle = win32api.OpenProcess(win32con.MAXIMUM_ALLOWED,pywintypes.FALSE,pid)
tHandle = win32security.OpenProcessToken(pHandle,win32con.MAXIMUM_ALLOWED)
我如何確定行程的令牌是主要令牌還是模擬令牌?
uj5u.com熱心網友回復:
行程令牌始終是主令牌。所以這里沒有什么可以確定的。執行緒令牌始終是(如果存在)模擬令牌。因此,當您打開行程或執行緒令牌時 - 您已經知道它的型別。所有回傳令牌的 api - 從開始令牌型別回傳已知。唯一的情況是,當您需要確定令牌型別(未知)時 - 您列舉行程句柄并嘗試檢查令牌句柄。為此,您需要使用GetTokenInformationwith TokenType,但實際上這種情況很少見,當您需要它時。僅適用于某些除錯實用程式。
c/c 上的演示代碼
ULONG GetTokenType(_In_ HANDLE hToken, _Out_ PTOKEN_TYPE ptp)
{
ULONG cb;
return GetTokenInformation(hToken, ::TokenType, ptp,
sizeof(TOKEN_TYPE), &cb) ? NOERROR : GetLastError();
}
void DemT()
{
HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
{
TOKEN_TYPE tp;
// we already know that token is primary
if (GetTokenType(hToken, &tp) != NOERROR || tp != TokenPrimary)
{
__debugbreak();
}
CloseHandle(hToken);
if (0 <= NtImpersonateAnonymousToken(GetCurrentThread()))
{
if (OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE, &hToken))
{
// we already know that token is impersonating
if (GetTokenType(hToken, &tp) != NOERROR || tp != TokenImpersonation)
{
__debugbreak();
}
CloseHandle(hToken);
}
SetThreadToken(0, 0);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/474726.html
上一篇:訪問ArraylistofObjects中的特定元素
下一篇:洗掉非字串字符-Python
