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; } }
相关文章推荐
- windows via c/c++ 学习笔记(三) 线程池
- Windows Via C/C++ 读书笔记 12 Heap(堆)
- Windows via C/C++ 学习(15)线程调度、线程优先级和亲缘性
- Windows via C/C++ 学习(13)作业
- Windows Via C/C++:vista下的应用程序权限控制
- 《Windows Via C/C++》边学习,边翻译(四)操作字符和字符串-3
- 《Windows Via C/C++》学习之同步设备I/O与异步设备I/O
- Windows via C/C++ 学习(16)用户模式下的线程同步(一)
- 《Windows via C/C++》 学习笔记
- windows via c/c++ 学习笔记(一)
- Windows via C/C++ 学习(11)管理员用户作为标准用户运行
- 《Windows Via C/C++》边学习,边翻译(七)操作字符和字符串-6
- 《Windows Via C/C++》边学习,边翻译(三)操作字符和字符串-2
- 《Windows Via C/C++》边学习,边翻译(一)错误处理(Error Handling)
- 《Windows Via C/C++》边学习,边翻译(二)操作字符和字符串-1
- 《Windows Via C/C++》边学习,边翻译(六)操作字符和字符串-5
- Windows via C/C++ 学习(14)线程基础
- 《Windows Via C/C++》边学习,边翻译(五)操作字符和字符串-4
- Windows via C/C++ 学习(10)子进程
- windows via c/c++ 学习笔记(二) 内核同步