Win32API プロセスのグループ情報を取得する
プロセスのグループ情報を取得するためには、GetKernelObjectSecurity関数、GetSecurityDescriptorGroup関数、LookupAccountSid関数を用いる
手順は以下のとおり
No | 項目 |
1 | GetKernelObjectSecurity関数で、カーネルオブジェクトのセキュリティ記述子を取得する |
2 | GetSecurityDescriptorGroup関数で、セキュリティ記述子からSIDを取得する |
3 | LookupAccountSid関数で、SIDに対するアカウント情報を取得する |
自分自身のプロセスのグループ情報を取得する
#include <windows.h> #include <aclapi.h> #include <stdio.h> int main() { PSECURITY_DESCRIPTOR pSD; DWORD nLengthNeeded = 0; char szAccountName[256]; DWORD dwAccountNameSize; char szDomainName[256]; DWORD dwDomainNameSize; SID_NAME_USE snu; BOOL bGroupDefault; PSID pSID; GetKernelObjectSecurity(GetCurrentProcess(), GROUP_SECURITY_INFORMATION, NULL, nLengthNeeded, &nLengthNeeded); pSD = LocalAlloc(LPTR, nLengthNeeded); if (pSD == NULL) { return 1; } //1.GetKernelObjectSecurity関数で、カーネルオブジェクトのセキュリティ記述子を取得する GetKernelObjectSecurity(GetCurrentProcess(), GROUP_SECURITY_INFORMATION, pSD, nLengthNeeded, &nLengthNeeded); //2.GetSecurityDescriptorGroup関数で、セキュリティ記述子からSIDを取得する GetSecurityDescriptorGroup(pSD, &pSID, &bGroupDefault); if (pSID == NULL) { puts("No group"); goto EXIT_FUNC; } dwAccountNameSize = sizeof(szAccountName)/sizeof(szAccountName[0]); dwDomainNameSize = sizeof(szDomainName)/sizeof(szDomainName[0]); //3.LookupAccountSid関数で、SIDに対するアカウント情報を取得する LookupAccountSidA(NULL, pSID, szAccountName, &dwAccountNameSize, szDomainName, &dwDomainNameSize, &snu); printf("AccountName: %s\n", szAccountName); printf("DomainName: %s\n", 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; } EXIT_FUNC: LocalFree(pSD); return 0; }