次の方法で共有


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 バージョンの要求は次のとおりです。

意味
ACL_REVISION

すべての Windows バージョンで有効なリビジョン レベル。

ACL_REVISION_DS
Acl の ACL にオブジェクト固有の ACE が含まれている場合は、 AceRevision をACL_REVISION_DSする必要があります。
 

 

戻り値

RtlCreateAcl は、次のいずれかの状態値を返すことができます。

リターン コード 説明
STATUS_SUCCESS
ACL が正常に作成され、初期化されました。
STATUS_BUFFER_TOO_SMALL
新しい ACL は、 ACL のバッファーに収まりません。 より大きな ACL バッファーが必要です。
STATUS_INVALID_PARAMETER
指定したリビジョンが最新ではないか、 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

こちらもご覧ください

ACCESS_ALLOWED_ACE

エース

ACL

RtlAddAccessAllowedAce

RtlLengthSid

SID