LookupAccountSid SIDに対応する名前の取得

Cの宣言:

BOOL LookupAccountSid(
	LPCTSTR SystemName,
	PSID sid,
	LPTSTR AccountName,
	LPDWORD AccountLen,
	LPTSTR DomainName,
	LPDWORD DomainLen,
	PSID_NAME_USE SidType);

説明:

与えられたSIDに対応する名前を取得する。

この関数は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

Cのサンプル:

ファイルの所有者を表示する。呼び出し元はREAD_CONTROLアクセスを持っていなければならない。
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);

}
(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。