OBJECT_ATTRIBUTES構造体 (ntdef.h)

OBJECT_ATTRIBUTES構造体は、オブジェクトを作成したり、オブジェクトにハンドルを返したりするルーチンによって、オブジェクトまたはオブジェクト ハンドルに適用できる属性を指定します。

構文

typedef struct _OBJECT_ATTRIBUTES {
  ULONG           Length;
  HANDLE          RootDirectory;
  PUNICODE_STRING ObjectName;
  ULONG           Attributes;
  PVOID           SecurityDescriptor;
  PVOID           SecurityQualityOfService;
} OBJECT_ATTRIBUTES;

メンバー

Length

この構造体に含まれるデータのバイト数。 InitializeObjectAttributes マクロは、このメンバーを sizeof(OBJECT_ATTRIBUTES) に設定します。

RootDirectory

ObjectName メンバーによって指定されたパス名のルート オブジェクト ディレクトリへの省略可能なハンドル。 RootDirectoryNULL の場合、ObjectName は、ターゲット オブジェクトへの完全なパスを含む完全修飾オブジェクト名を指す必要があります。 RootDirectoryNULL 以外の場合、ObjectNameRootDirectory ディレクトリを基準としたオブジェクト名を指定します。 RootDirectory ハンドルは、オブジェクト・マネージャー名前空間内のファイル・システム・ディレクトリーまたはオブジェクト・ディレクトリーを参照できます。

ObjectName

ハンドルを開くオブジェクトの名前を含む Unicode 文字列 へのポインター。 これは、完全修飾オブジェクト名、または RootDirectory メンバーによって指定されたディレクトリへの相対パス名である必要があります。

Attributes

オブジェクト ハンドル属性を指定するフラグのビットマスク。 このメンバーには、次の表の 1 つ以上のフラグを含めることができます。

フラグ 説明
OBJ_INHERIT このハンドルは、現在のプロセスの子プロセスによって継承できます。
OBJ_PERMANENT このフラグは、オブジェクト マネージャー内で名前が付けられたオブジェクトにのみ適用されます。 既定では、開いているすべてのハンドルが閉じられると、このようなオブジェクトは削除されます。 このフラグを指定した場合、開いているすべてのハンドルが閉じられると、オブジェクトは削除されません。 ドライバーは、 ZwMakeTemporaryObject ルーチンを使用して、永続的なオブジェクトを非永続的にすることができます。
OBJ_EXCLUSIVE このフラグが設定され、オブジェクトを作成するルーチンに OBJECT_ATTRIBUTES 構造体が渡された場合、オブジェクトには排他的にアクセスできます。 つまり、プロセスがオブジェクトに対してこのようなハンドルを開くと、他のプロセスはこのオブジェクトのハンドルを開くできなくなります。

このフラグが設定され 、オブジェクト ハンドルを作成するルーチンにOBJECT_ATTRIBUTES構造体が渡された場合、呼び出し元は、ハンドルが作成されたプロセス コンテキストのオブジェクトへの排他アクセスを要求します。 この要求は、オブジェクトの作成時にOBJ_EXCLUSIVE フラグが設定された場合にのみ付与できます。

OBJ_CASE_INSENSITIVE このフラグを指定すると、 ObjectName メンバーが指す名前と既存のオブジェクトの名前を照合するときに、大文字と小文字を区別しない比較が使用されます。 それ以外の場合は、既定のシステム設定を使用してオブジェクト名が比較されます。
OBJ_OPENIF このフラグがオブジェクト ハンドルを使用してオブジェクトを作成するルーチンに指定されている場合、そのオブジェクトが既に存在する場合、ルーチンはそのオブジェクトを開く必要があります。 それ以外の場合、オブジェクトを作成するルーチンは、STATUS_OBJECT_NAME_COLLISIONの NTSTATUS コードを返します。
OBJ_OPENLINK このフラグを設定したオブジェクト ハンドルがオブジェクトを開くルーチンに渡される場合、オブジェクトがシンボリック リンク オブジェクトの場合、シンボリック リンクが参照するオブジェクトではなく、シンボリック リンク オブジェクト自体を開く必要があります (既定の動作です)。
OBJ_KERNEL_HANDLE ハンドルはシステム プロセス コンテキストで作成され、カーネル モードからのみアクセスできます。
OBJ_FORCE_ACCESS_CHECK ハンドルを開くルーチンは、カーネル モードでハンドルを開いている場合でも、オブジェクトのすべてのアクセス チェックを適用する必要があります。
OBJ_DONT_REPARSE このフラグが設定されている場合、関連付けられているオブジェクトの名前を解析するときに再解析ポイントは続かなくなります。 再解析が発生した場合、試行は失敗し、 STATUS_REPARSE_POINT_ENCOUNTERED 結果が返されます。 これは、セキュリティ シナリオで、オブジェクトのパスに再解析ポイントがあるかどうかを判断するために使用できます。
OBJ_IGNORE_IMPERSONATED_DEVICEMAP デバイス マップは、DOS デバイス名とシステム内のデバイス間のマッピングであり、DOS 名を解決するときに使用されます。 システム内のユーザーごとに個別のデバイス マップが存在し、ユーザーは独自のデバイス マップを管理できます。 通常、偽装中は、偽装されたユーザーのデバイス マップが使用されます。 ただし、このフラグを設定すると、代わりにプロセス ユーザーのデバイス マップが使用されます。
OBJ_VALID_ATTRIBUTES 予約済み。

SecurityDescriptor

オブジェクトの作成時に、オブジェクトのセキュリティ記述子 (SECURITY_DESCRIPTOR) を指定します。 このメンバーが NULL の場合、オブジェクトは既定のセキュリティ設定を受け取ります。

SecurityQualityOfService

オブジェクトの作成時にオブジェクトに適用されるオプションのサービス品質。 セキュリティ偽装レベルとコンテキスト追跡モード (動的または静的) を示すために使用されます。 現在、 InitializeObjectAttributes マクロは、このメンバーを NULL に設定します。

注釈

InitializeObjectAttributes マクロを使用して、OBJECT_ATTRIBUTES構造体のメンバーを初期化します。 InitializeObjectAttributesSecurityQualityOfService メンバーを NULL に初期化します。 NULL 以外の値を指定する必要がある場合は、初期化後に SecurityQualityOfService メンバーを設定します。

この構造体に含まれる属性をオブジェクトまたはオブジェクト ハンドルに適用するには、オブジェクトにアクセスするルーチンまたはオブジェクト ハンドル ( ZwCreateFileZwCreateDirectoryObject など) を返すルーチンに、この構造体へのポインターを渡します。

この構造体のすべてのメンバーは読み取り専用です。 この構造体のメンバーがポインターの場合、このメンバーが指すオブジェクトも読み取り専用です。 読み取り専用のメンバーとオブジェクトを使用して関連情報を取得できますが、変更することはできません。 この構造体のメンバーを設定するには、 InitializeObjectAttributes マクロを 使用します。

システム プロセス以外のプロセス コンテキストで実行されるドライバー ルーチンは、(InitializeObjectAttributes マクロを使用して) Attributes メンバーのOBJ_KERNEL_HANDLE フラグを設定する必要があります。 これにより、そのオブジェクトに対して開かれたハンドルの使用が、カーネル モードでのみ実行されるプロセスに制限されます。 それ以外の場合は、ドライバーが実行されているコンテキスト内のプロセスによってハンドルにアクセスできます。

要件

   
ヘッダー ntdef.h (D3dkmthk.h、Ntdef.h、Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h を含む)

こちらもご覧ください

FltCreateCommunicationPort

FltCreateFile

FltCreateFileEx

FltCreateFileEx2

InitializeObjectAttributes

IoCreateFile

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

ZwCreateDirectoryObject

ZwCreateFile

f1_keywords:

  • "ntdef/ANSI_STRING"