GetFileSecurity ファイルのセキュリティ情報取得

Cの宣言:


BOOL GetFileSecurity(
	LPCTSTR FileName,
	SECURITY_INFORMATION InfoType,
	PSECURITY_DESCRIPTOR SecurityDesc,
	DWORD DescSize,
	LPDWORD NeededSize);

説明:

ファイルやディレクトリのセキュリティ情報を取得する。呼び出し元は、READ_CONTROLの権限を持っているか、またはFileNameで指定するファイルまたはディレクトリの所有者でなければならない。

この関数は、NTでのみ使用可能である。

引数の意味は、以下の通り。
FileName (IN) セキュリティ情報取得元のファイル名
InfoType (IN) どのようなセキュリティ情報を取得するかを指定するフラグ。後述の表を参照。システムACLの読み取りには、SE_SECURITY_NAME特権が必要。
SecurityDesc (OUT) 取得結果のセキュリティ記述子。
DescSize (IN) SecurityDescのサイズ。
NeededSize (OUT) DescSizeで指定したサイズが小さすぎるときに、必要なサイズが格納される。正常に終了した場合、0が格納される。

関数の実行に成功した場合、TRUEが返される。関数の実行に失敗した場合、FALSEが返される。

InfoTypeに指定可能なフラグは、以下の論理和である。
OWNER_SECURITY_INFORMATION 所有者情報
GROUP_SECURITY_INFORMATION グループ情報
DACL_SECURITY_INFORMATION 随意ACL情報
SACL_SECURITY_INFORMATION システムACL情報

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 更新)

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