Win32API プロセストークンのユーザー情報を取得
プロセストークンのユーザー情報を取得するには、
を用いる
手順は、以下のとおり
No | 項目 |
1 | OpenProcessToken関数で、プロセストークンを取得する |
2 | GetTokenInformation関数で、トークン情報を取得する |
3 | LookupAccountSidA関数で、トークンのSIDに対するアカウント情報を取得する |
自分自身のプロセスの、プロセストークンのユーザー情報を取得する
#include <windows.h> #include <aclapi.h> #include <stdio.h> int main() { DWORD dwLength; HANDLE hToken; PTOKEN_USER pTokenUser; char szAccountName[256]; DWORD dwAccountNameSize; char szDomainName[256]; DWORD dwDomainNameSize; SID_NAME_USE snu; //1.OpenProcessToken関数で、プロセストークンを取得する if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { return 1; } GetTokenInformation(hToken, TokenUser, NULL, 0, &dwLength); pTokenUser = (PTOKEN_USER)LocalAlloc(LPTR, dwLength); if (pTokenUser == NULL) { CloseHandle(hToken); return 1; } //2.GetTokenInformation関数で、トークン情報を取得する GetTokenInformation(hToken, TokenUser, pTokenUser, dwLength, &dwLength); dwAccountNameSize = sizeof(szAccountName)/sizeof(szAccountName[0]); dwDomainNameSize = sizeof(szDomainName)/sizeof(szDomainName[0]); //3.LookupAccountSid関数で、トークンのSIDに対するアカウント情報を取得する LookupAccountSidA(NULL, pTokenUser->User.Sid, szAccountName, &dwAccountNameSize, szDomainName, &dwDomainNameSize, &snu); printf("TokenUser - AccountName: %s, DomainName: %s\n", szAccountName, szDomainName); switch (snu) { case SidTypeUser: puts("SidTypeUser"); break; case SidTypeGroup: puts("SidTypeGroup"); break; case SidTypeDomain: puts("SidTypeDomain"); break; case SidTypeAlias: puts("SidTypeAlias"); break; case SidTypeWellKnownGroup: puts("SidTypeWellKnownGroup"); break; case SidTypeDeletedAccount: puts("SidTypeDeletedAccount"); break; case SidTypeInvalid: puts("SidTypeInvalid"); break; case SidTypeUnknown: puts("SidTypeUnknown"); break; case SidTypeComputer: puts("SidTypeComputer"); break; default: puts("Unknown"); break; } CloseHandle(hToken); LocalFree(pTokenUser); return 0; }