InitializeObjectAttributes マクロ (ntdef.h)
InitializeObjectAttributes マクロは、ハンドルを開くルーチンに対するオブジェクト ハンドルのプロパティを指定する不透明なOBJECT_ATTRIBUTES構造体を初期化します。
構文
VOID InitializeObjectAttributes(
[out] POBJECT_ATTRIBUTES p,
[in] PUNICODE_STRING n,
[in] ULONG a,
[in] HANDLE r,
[in, optional] PSECURITY_DESCRIPTOR s
);
パラメーター
p
初期化する OBJECT_ATTRIBUTES 構造体へのポインター。
n
ハンドルを開くオブジェクトの名前を含む Unicode 文字列へのポインター。 これは、完全修飾オブジェクト名、または RootDirectory パラメーターで指定されたオブジェクト ディレクトリへの相対パス名である必要があります。
a
次のフラグの 1 つ以上を指定します。
フラグ | 説明 |
---|---|
OBJ_INHERIT | このハンドルは、現在のプロセスの子プロセスによって継承できます。 |
OBJ_PERMANENT | このフラグは、オブジェクト マネージャー内で名前が付けられたオブジェクトにのみ適用されます。 既定では、このようなオブジェクトは、開いているすべてのハンドルが閉じられると削除されます。 このフラグを指定した場合、開いているすべてのハンドルが閉じられると、オブジェクトは削除されません。 ドライバーは、ZwMakeTemporaryObject を使用して永続的なオブジェクトを削除できます。 |
OBJ_EXCLUSIVE | このオブジェクトに対して開くことができるハンドルは 1 つだけです。 |
OBJ_CASE_INSENSITIVE | このフラグを指定すると、ObjectName パラメーターを既存のオブジェクトの名前と照合するときに、大文字と小文字を区別しない比較が使用されます。 それ以外の場合は、既定のシステム設定を使用してオブジェクト名が比較されます。 |
OBJ_OPENIF | オブジェクトを作成するルーチンにこのフラグを指定し、そのオブジェクトが既に存在する場合、ルーチンはそのオブジェクトを開く必要があります。 それ以外の場合、オブジェクトを作成するルーチンは、STATUS_OBJECT_NAME_COLLISIONの NTSTATUS コードを返します。 |
OBJ_KERNEL_HANDLE | カーネル モードでのみハンドルにアクセスできることを指定します。 |
OBJ_FORCE_ACCESS_CHECK | ハンドルを開くルーチンは、ハンドルがカーネル モードで開かれている場合でも、オブジェクトのすべてのアクセス チェックを適用する必要があります。 |
r
ObjectName パラメーターで指定されたパス名のルート オブジェクト ディレクトリへのハンドル。 ObjectName が完全修飾オブジェクト名の場合、RootDirectory は NULL です。 オブジェクト ディレクトリへのハンドルを取得するには、 ZwCreateDirectoryObject ZwCreateDirectoryObject を使用します。
s
オブジェクトの作成時に適用するセキュリティ記述子を指定します。 このパラメーターは省略可能です。 ドライバーは、オブジェクトの既定のセキュリティを受け入れるために NULL を指定できます。 詳細については、「解説」を参照してください。
戻り値
なし
解説
InitializeObjectAttributes は、 開くオブジェクト ハンドルのプロパティを指定する OBJECT_ATTRIBUTES 構造体を初期化します。 呼び出し元は、この構造体へのポインターを、実際にハンドルを開くルーチンに渡すことができます。
システム プロセス以外のプロセス コンテキストで実行されるドライバー ルーチンは、 Attributes パラメーターのOBJ_KERNEL_HANDLE フラグを設定する必要があります。 このフラグは、そのオブジェクトに対して開かれたハンドルの使用を、カーネル モードでのみ実行されているプロセスに制限します。 それ以外の場合は、ドライバーが実行されているコンテキスト内のプロセスによってハンドルにアクセスできます。
InitializeObjectAttributes は常に、OBJECT_ATTRIBUTESの SecurityQualityOfService メンバーを NULL に設定します。 NULL 以外の値を必要とするドライバーは、SecurityQualityOfService を直接設定できます。
必要条件
対象プラットフォーム | デスクトップ |
Header | ntdef.h (Wdm.h、Ntddk.h、Ntdef.h を含む) |