RtlCreateAcl 関数 (ntifs.h)
RtlCreateAcl ルーチンは、アクセス制御リスト (ACL) を作成して初期化します。
構文
NTSYSAPI NTSTATUS RtlCreateAcl(
[out] PACL Acl,
[in] ULONG AclLength,
ULONG AclRevision
);
パラメーター
[out] Acl
初期化された ACL 構造体を受け取る呼び出し元によって割り当てられたバッファーへのポインター。 このバッファーは、少なくとも sizeof(ACL) である必要があります。
[in] AclLength
Acl パラメーターが指すバッファーの長さ (バイト単位)。 この値は、ACL ヘッダーと、ACL に格納されるすべてのアクセス制御エントリ (ACE) を格納するのに十分な大きさである必要があります。 ACL のサイズの計算については、次の「備考」セクションを参照してください。
AclRevision
追加する ACE の ACL リビジョン レベル。 Windows バージョンの要求は次のとおりです。
値 | 意味 |
---|---|
|
すべての Windows バージョンで有効なリビジョン レベル。 |
|
注Acl の ACL にオブジェクト固有の ACE が含まれている場合は、 AceRevision をACL_REVISION_DSする必要があります。
|
戻り値
RtlCreateAcl は、次のいずれかの状態値を返すことができます。
リターン コード | 説明 |
---|---|
|
ACL が正常に作成され、初期化されました。 |
|
新しい ACL は、 ACL のバッファーに収まりません。 より大きな ACL バッファーが必要です。 |
|
指定したリビジョンが最新ではないか、 AclLength の値が大きすぎます。 |
注釈
RtlCreateAcl によって初期化された ACL には、アクセス制御エントリ (ACE) が含まれています。 存在しない ACL ではなく、この ACL は空です。 空の ACL がオブジェクトに適用されている場合、ACL はそのオブジェクトへのすべてのアクセスを暗黙的に拒否します。 ACL に ACE を追加するには、 RtlAddAccessAllowedAce を使用します。
ACL のサイズを計算するには、ACL に格納されるすべての ACE のサイズに sizeof(ACL) を追加します。 ACE のサイズを計算するには、ACE 構造体のサイズ ( sizeof(ACCESS_ALLOWED_ACE) など) を ACE に関連付けられている SID の長さに加算し、 SidStart メンバー (ACE 構造体と SID の両方の一部) のサイズを減算します。 RtlLengthSid 関数を使用して、指定した SID の長さを取得します。
次の例は、アクセス許可 ACE のサイズを計算する方法を示しています。
sizeof (ACCESS_ALLOWED_ACE) - sizeof (ACCESS_ALLOWED_ACE.SidStart)
+ GetLengthSid (pAceSid);
ACL のサイズを計算するには、 sizeof(ACE) 式で適切な ACE 構造体を置き換えて、次のアルゴリズムを使用します。
cbAcl = sizeof (ACL);
for (i = 0 ; i < nAceCount ; i++) {
// subtract ACE.SidStart from the size
cbAce = sizeof (ACE) - sizeof (DWORD);
// add this ACE's SID length
cbAce += GetLengthSid (pAceSid[i]);
// add the length of each ACE to the total ACL length
cbAcl += cbAce;
}
セキュリティとアクセス制御の詳細については、 ドライバー開発者向けの Windows セキュリティ モデル と、Windows SDK のこれらのトピックに関するドキュメントを参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | ntifs.h (Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= APC_LEVEL |