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 メンバーによって指定されたパス名のルート オブジェクト ディレクトリへの省略可能なハンドル。 RootDirectory が の場合、ObjectName はNULL
、ターゲット オブジェクトへの完全パスを含む完全修飾オブジェクト名を指す必要があります。 RootDirectory が非NULL
の場合、ObjectName は RootDirectory ディレクトリに対する相対オブジェクト名を指定します。 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) を指定します。 SecurityDescriptor が の場合、NULL
オブジェクトは既定のセキュリティ設定を受け取ります。 新しいオブジェクトについては、「DACL」を参照してください。
SecurityQualityOfService
作成時にオブジェクトに適用されるオプションのサービス品質。 セキュリティ偽装レベルとコンテキスト追跡モード (動的または静的) を示すために使用されます。 現在、 InitializeObjectAttributes マクロは 、このメンバーを に NULL
設定します。
注釈
InitializeObjectAttributes マクロを使用して、OBJECT_ATTRIBUTES構造体のメンバーを初期化します。 InitializeObjectAttributes は SecurityQualityOfService メンバーを に初期化しますNULL
。 値以外NULL
を指定する必要がある場合は、初期化後に SecurityQualityOfService メンバーを 設定します。
この構造体に含まれる属性をオブジェクトまたはオブジェクト ハンドルに適用するには、オブジェクトにアクセスするか、オブジェクト ハンドル ( ZwCreateFile や ZwCreateDirectoryObject など) を返すルーチンに、この構造体へのポインターを渡します。
この構造体のすべてのメンバーは読み取り専用です。 この構造体のメンバーがポインターの場合、このメンバーが指すオブジェクトも読み取り専用です。 読み取り専用のメンバーとオブジェクトを使用して関連情報を取得できますが、変更することはできません。 この構造体のメンバーを設定するには、 InitializeObjectAttributes マクロを 使用します。
システム プロセス以外のプロセス コンテキストで実行されるドライバー ルーチンでは、Attributes メンバーのOBJ_KERNEL_HANDLE フラグを設定する必要があります (InitializeObjectAttributes マクロを使用)。 これにより、そのオブジェクトに対して開かれたハンドルの使用が、カーネル モードでのみ実行されているプロセスに制限されます。 それ以外の場合は、ドライバーが実行されているコンテキスト内のプロセスによってハンドルにアクセスできます。
要件
要件 | 値 |
---|---|
Header | ntdef.h (D3dkmthk.h、Ntdef.h、Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h を含む) |