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_ATTRIBUTESSecurityQualityOfService メンバーを NULL に設定します。 NULL 以外の値を必要とするドライバーは、SecurityQualityOfService を直接設定できます。

必要条件

   
対象プラットフォーム デスクトップ
Header ntdef.h (Wdm.h、Ntddk.h、Ntdef.h を含む)

関連項目

ExCreateCallback

IoCreateFile

OBJECT_ATTRIBUTES

PsCreateSystemThread

SECURITY_DESCRIPTOR

UNICODE_STRING

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwMakeTemporaryObject

ZwOpenFile

ZwOpenKey

ZwOpenSection

ZwOpenSymbolicLinkObject