BOOL LookupAccountSid( LPCTSTR SystemName, PSID sid, LPTSTR AccountName, LPDWORD AccountLen, LPTSTR DomainName, LPDWORD DomainLen, PSID_NAME_USE SidType);
この関数はNTで使用可能である。
引数の意味は、以下の通り。
SystemName | (IN) | SIDを検索するコンピュータ名。NULLの場合、ローカルを意味する |
sid | (IN) | 名前を取得するSID |
AccountName | (OUT) | 取得結果の名前 |
AccountLen | (I/O) | AccountNameのサイズ。AccountLenが小さすぎる場合、必要なサイズが設定される。 |
DomainName | (OUT) | SIDが見つかったドメインの名前。 |
DomainLen | (I/O) | DomainNameのサイズ。DomainLenが小さすぎる場合、必要なサイズが設定される。 |
SidType | (OUT) | SIDのタイプ。後述の表を参照。 |
SidTypeに返される値の内、主な物は以下の通り。
SidTypeUser | ユーザSID |
SidTypeGroup | グループSID |
SidTypeDomain | ドメインSID |
void DispFileOwner() { PSECURITY_DESCRIPTOR psd; PSID psid; SID_NAME_USE snu; DWORD sdsize; BOOL OwnerDefaulted; char *AccountName, *DomainName; DWORD AccountLen, DomainLen; /* 初期化 */ psd = GlobalAlloc(GMEM_FIXED, 1000); AccountName = GlobalAlloc(GMEM_FIXED, 1000); DomainName = GlobalAlloc(GMEM_FIXED, 1000); AccountLen = DomainLen = 1000; /* ファイルのセキュリティ情報取得 */ GetFileSecurity("c:\\test", OWNER_SECURITY_INFORMATION, psd, 1000, &sdsize); /* 所有者のSID取得 */ GetSecurityDescriptorOwner(psd, &psid, &OwnerDefaulted); /* SIDを名前に変換 */ LookupAccountSid(NULL, psid, AccountName, &AccountLen, DomainName, &DomainLen, &snu); /* 表示 */ printf("Owner Name: %s\n", AccountName); printf("Domain of Owner: %s\n", DomainName); /* 後処理 */ GlobalFree(psd); GlobalFree(AccountName); GlobalFree(DomainName); }