分类: C/C++
2008-03-14 14:17:54
if(!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE, &hToken)) {
if(GetLastError() == ERROR_NO_TOKEN) {
//
// 如果得不到线程令牌,则试图打开进程令牌。
//
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken )) {
......
}
}
else {
//
// 存取线程令牌出错。
//
......
}
......
}如果与当前线程关联的存取令牌不存在,则调用 OpenProcessToken 获取与当前进程关联的存取令牌。 bSuccess = GetTokenInformation(hToken,
TokenUser,
InfoBuffer,
cbInfoBuffer,
&cbInfoBuffer);
if(!bSuccess) {
......
}
else {
bRet = LookupAccountSid(NULL, ((PTOKEN_USER)InfoBuffer)->User.Sid,
UserName,
cchUserName,
DomainName,
cchDomainName,
&snu );
if (!bRet) {
......
CloseHandle(hToken);
......
}
else {
// 显示得到的 用户名和域名
SetDlgItemText(IDC_STATIC_USRN,UserName);
SetDlgItemText(IDC_STATIC_DOMAIN,DomainName);
......
}
......
}最后,调用 LookupAccountSid 函数获取与该SID关联的账号名和域名,详细实现细节请参考本文的例子代码。图一是例子程序运行的画面: