Win32API プロセストークンのグループ情報を取得する
プロセストークンのグループ情報を取得するには、OpenProcessToken関数、GetTokenInformation関数、LookupAccountSidA関数を用いる
手順は、以下のとおり
No | 項目 |
1 | OpenProcessToken関数で、プロセストークンを取得する |
2 | GetTokenInformation関数で、トークン情報を取得する |
3 | LookupAccountSidA関数で、トークンのSIDに対するアカウント情報を取得する |
自分自身のプロセスの、プロセストークンのグループ情報を取得する
#include <windows.h> #include <aclapi.h> #include <stdio.h> int main() { DWORD dwLength; HANDLE hToken; PTOKEN_GROUPS pTokenGroups; char szAccountName[256]; DWORD dwAccountNameSize; char szDomainName[256]; DWORD dwDomainNameSize; SID_NAME_USE snu; DWORD i; //1.OpenProcessToken関数で、プロセストークンを取得する if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { return 1; } GetTokenInformation(hToken, TokenGroups, NULL, 0, &dwLength); pTokenGroups = (PTOKEN_GROUPS)LocalAlloc(LPTR, dwLength); if (pTokenGroups == NULL) { CloseHandle(hToken); return 1; } //2.GetTokenInformation関数で、トークン情報を取得する GetTokenInformation(hToken, TokenGroups, pTokenGroups, dwLength, &dwLength); for (i = 0; i < pTokenGroups->GroupCount; i++) { dwAccountNameSize = sizeof(szAccountName)/sizeof(szAccountName[0]); dwDomainNameSize = sizeof(szDomainName)/sizeof(szDomainName[0]); //3.LookupAccountSid関数で、トークンのSIDに対するアカウント情報を取得する LookupAccountSidA(NULL, pTokenGroups->Groups[i].Sid, szAccountName, &dwAccountNameSize, szDomainName, &dwDomainNameSize, &snu); puts("=================================================================="); printf("AccountName: %s, DomainName: %s\n", szAccountName, szDomainName); puts("\n===Attribute==="); if (pTokenGroups->Groups[i].Attributes & SE_GROUP_MANDATORY) { puts("SE_GROUP_MANDATORY"); } if (pTokenGroups->Groups[i].Attributes & SE_GROUP_ENABLED_BY_DEFAULT) { puts("SE_GROUP_ENABLED_BY_DEFAULT"); } if (pTokenGroups->Groups[i].Attributes & SE_GROUP_ENABLED) { puts("SE_GROUP_ENABLED"); } if (pTokenGroups->Groups[i].Attributes & SE_GROUP_OWNER) { puts("SE_GROUP_OWNER"); } if (pTokenGroups->Groups[i].Attributes & SE_GROUP_USE_FOR_DENY_ONLY) { puts("SE_GROUP_USE_FOR_DENY_ONLY"); } if (pTokenGroups->Groups[i].Attributes & SE_GROUP_LOGON_ID) { puts("SE_GROUP_LOGON_ID"); } if (pTokenGroups->Groups[i].Attributes & SE_GROUP_RESOURCE) { puts("SE_GROUP_RESOURCE"); } puts("\n===SID_NAME_USE==="); 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; } puts("\n\n"); } CloseHandle(hToken); LocalFree(pTokenGroups); return 0; }
================================================================== AccountName: None, DomainName: [マシン名] ===Attribute=== SE_GROUP_MANDATORY SE_GROUP_ENABLED_BY_DEFAULT SE_GROUP_ENABLED ===SID_NAME_USE=== SidTypeGroup ================================================================== AccountName: Everyone, DomainName: ===Attribute=== SE_GROUP_MANDATORY SE_GROUP_ENABLED_BY_DEFAULT SE_GROUP_ENABLED ===SID_NAME_USE=== SidTypeWellKnownGroup ================================================================== AccountName: Users, DomainName: BUILTIN ===Attribute=== SE_GROUP_MANDATORY SE_GROUP_ENABLED_BY_DEFAULT SE_GROUP_ENABLED ===SID_NAME_USE=== SidTypeAlias ================================================================== AccountName: INTERACTIVE, DomainName: NT AUTHORITY ===Attribute=== SE_GROUP_MANDATORY SE_GROUP_ENABLED_BY_DEFAULT SE_GROUP_ENABLED ===SID_NAME_USE=== SidTypeWellKnownGroup ================================================================== AccountName: Authenticated Users, DomainName: NT AUTHORITY ===Attribute=== SE_GROUP_MANDATORY SE_GROUP_ENABLED_BY_DEFAULT SE_GROUP_ENABLED ===SID_NAME_USE=== SidTypeWellKnownGroup ================================================================== AccountName: This Organization, DomainName: NT AUTHORITY ===Attribute=== SE_GROUP_MANDATORY SE_GROUP_ENABLED_BY_DEFAULT SE_GROUP_ENABLED ===SID_NAME_USE=== SidTypeWellKnownGroup ================================================================== AccountName: This Organization, DomainName: NT AUTHORITY ===Attribute=== SE_GROUP_MANDATORY SE_GROUP_ENABLED_BY_DEFAULT SE_GROUP_ENABLED SE_GROUP_LOGON_ID ===SID_NAME_USE=== SidTypeWellKnownGroup ================================================================== AccountName: LOCAL, DomainName: ===Attribute=== SE_GROUP_MANDATORY SE_GROUP_ENABLED_BY_DEFAULT SE_GROUP_ENABLED ===SID_NAME_USE=== SidTypeWellKnownGroup ================================================================== AccountName: NTLM Authentication, DomainName: NT AUTHORITY ===Attribute=== SE_GROUP_MANDATORY SE_GROUP_ENABLED_BY_DEFAULT SE_GROUP_ENABLED ===SID_NAME_USE=== SidTypeWellKnownGroup ================================================================== AccountName: Medium Mandatory Level, DomainName: Mandatory Label ===Attribute=== ===SID_NAME_USE=== Unknown