アクセス マスク

アクセス マスクの機能は、アクセス権をコンパクトな形式で記述することです。 アクセス管理を簡略化するために、アクセス マスクには、汎用権限である 4 ビットのセットが含まれています。これは、関数 RtlMapGenericMask を使用してより詳細な権限のセットに変換されます。

次の図はアクセス マスクを示しています。

diagram illustrating the access mask.

汎用権限は、次のいずれかです。

  • GENERIC_READ — オブジェクトによって管理される情報を読み取る権限。

  • GENERIC_WRITE — オブジェクトによって管理される情報を書き込む権限。

  • GENERIC_EXECUTE — オブジェクトを実行または確認する権限。

  • GENERIC_ALL — オブジェクトの読み取り、書き込み、実行を行う権限。

これらの権限は組み合わせることができ (たとえば、GENERIC_READ と GENERIC_WRITE の両方を要求できます)、結果として得られるマッピングでは各汎用権限に必要な権限の和集合が必要であることに注意してください。 このパラダイムは、UNIX リソースへのアクセスを制御するために使用される UNIX "rwx" アクセス ビットを模倣しています。 アクセス マスク内の汎用権限は、さまざまなオブジェクトの種類に対して異なるセキュリティ権限をマスクするため、これらの権限によって Windows でのアプリケーション開発が簡略化されます。

次の標準権限セットは、すべてのオブジェクトの種類に適用されます。

  • DELETE — 特定のオブジェクトを削除する権限。

  • READ_CONTROL — オブジェクトの制御 (セキュリティ) 情報を読み取る権限。

  • WRITE_DAC — オブジェクトの制御 (セキュリティ) 情報を変更する権限。

  • WRITE_OWNER — オブジェクトの所有者 SID を変更する権限。 所有者にはオブジェクトを変更する権限が常にあることを思い出してください。

  • SYNCHRONIZE — 指定されたオブジェクトを待機する権限 (これがオブジェクトに対して有効な概念であることが前提)。

アクセス マスクの下位 16 ビットは、特定の権限を表します。 これらの特定の権限の意味は、対象となっているオブジェクトに固有です。 ファイル システムの場合、主な関心事はファイル オブジェクトに対する特定の権限です。 ファイル オブジェクトの場合、通常、特定の権限が解釈される方法は、ファイル オブジェクトがファイルとディレクトリのどちらを表すかによって異なります。 ファイルの場合、通常の解釈は次のとおりです。

  • FILE_READ_DATA — 指定されたファイルからデータを読み取る権限。

  • FILE_WRITE_DATA — 指定されたファイル (ファイルの既存の範囲内) にデータを書き込む権限。

  • FILE_APPEND_DATA — 指定されたファイルを拡張する権限。

  • FILE_READ_EA — ファイルの拡張属性を読み取る権限。

  • FILE_WRITE_EA — ファイルの拡張属性を変更する権限。

  • FILE_EXECUTE — 指定されたファイルをローカルで実行する権限。 リモート共有に格納されているファイルを実行するには、読み取りアクセス許可が必要です。このようなファイルはサーバーから読み取られますが、クライアントで実行されるためです。

  • FILE_READ_ATTRIBUTES — ファイルの属性情報を読み取る権限。

  • FILE_WRITE_ATTRIBUTES — ファイルの属性情報を変更する権限。

ディレクトリの場合も同じビット値が使用されますが、以下のケースの一部では解釈が異なります。

  • FILE_LIST_DIRECTORY — ディレクトリの内容を一覧表示する権限。

  • FILE_ADD_FILE — ディレクトリ内に新しいファイルを作成する権限。

  • FILE_ADD_SUBDIRECTORY — ディレクトリ内に新しいディレクトリ (サブディレクトリ) を作成する権限。

  • FILE_READ_EA — 指定されたディレクトリの拡張属性を読み取る権限。

  • FILE_WRITE_EA — 指定されたディレクトリの拡張属性を書き込む権限。

  • FILE_TRAVERSE — ディレクトリ内のオブジェクトにアクセスする権限。 FILE_TRAVERSE アクセス権は、FILE_LIST_DIRECTORY アクセス権とは異なります。 FILE_LIST_DIRECTORY アクセス権を保持していると、エンティティはディレクトリの内容の一覧を取得できます。一方、FILE_TRAVERSE アクセス権はオブジェクトにアクセスする権限をエンティティに付与します。 FILE_LIST_DIRECTORY アクセス権を持たない呼び出し元は、既に存在することがわかっているファイルを開くことはできますが、ディレクトリの内容の一覧を取得することはできません。

  • FILE_DELETE_CHILD — 現在のディレクトリ内のファイルまたはディレクトリを削除する権限。

  • FILE_READ_ATTRIBUTES — ディレクトリの属性情報を読み取る権限。

  • FILE_WRITE_ATTRIBUTES — ディレクトリの属性情報を変更する権限。

ファイル オブジェクトの汎用権限から標準権限と特定の権限への実際のマッピングは、I/O マネージャーによって定義されます。 このマッピングは、IoGetFileObjectGenericMapping を使用してファイル システムによって取得できます。 通常、このマッピングは、ファイル システムを呼び出す前の I/O マネージャーによる IRP_MJ_CREATE 処理中に行われます。 ただしこれは、特定の操作 (特殊な FSCTL 操作など) のセキュリティをチェックするファイル システムによって行われる場合があります。