您的位置:首页 > 编程语言 > C语言/C++

WIndows via C/C++ 学习(12)权限上下文

2011-01-21 15:23 274 查看
摘抄了 Windows via C/C++ 上的一段代码,一个函数——GetProcessElevation,返回安全令牌的提升类型和一个表示当前是否运行在管理员身份下。

BOOL GetProcesElevation(TOKEN_ELEVATION_TYPE *pElevation, BOOL *pIsAdmin)
{
HANDLE	hToken = NULL;
DWORD	dwSize;

// 获得当前进程令牌
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
return FALSE;

BOOL b_Result = FALSE;

// 检索提升类型信息
if (GetTokenInformation(hToken, TokenElevationType, pElevation, sizeof(TOKEN_ELEVATION_TYPE), &dwSize))
{
if(*pElevation == TokenElevationTypeLimited)
{
// 创建 Administrator 组相应的 SID
BYTE adminSID[SECURITY_MAX_SID_SIZE];
dwSize = sizeof(adminSID);
CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, adminSID, &dwSize);

// 获得链接令牌的句柄
HANDLE hUnfilteredToken = NULL;
GetTokenInformation(hToken, TokenLinkedToken, (LPVOID)&hUnfilteredToken, sizeof(HANDLE), &dwSize);

// 检测令牌是否包含管理员SID
if(CheckTokenMembership(hUnfilteredToken, &adminSID, pIsAdmin))
b_Result = TRUE;

CloseHandle(hUnfilteredToken);
}else{
*pIsAdmin = IsUserAnAdmin();
b_Result = TRUE;
}

CloseHandle(hToken);

return b_Result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: