DRIVER_INITIALIZE コールバック関数 (wdm.h)
DRIVER_INITIALIZE は、ドライバー初期化エントリ ポイントの型定義であり、DriverEntry 従来の名前が付けられています。 これは、ドライバーが読み込まれた後に呼び出される最初のルーチンです。
構文
DRIVER_INITIALIZE DriverInitialize;
NTSTATUS DriverInitialize(
[in] _DRIVER_OBJECT *DriverObject,
[in] PUNICODE_STRING RegistryPath
)
{...}
パラメーター
[in] DriverObject
ドライバーの DRIVER_OBJECT 構造体へのポインター。
[in] RegistryPath
ドライバーのレジストリ キーへのパスを指定するカウントされた Unicode 文字列へのポインター。
戻り値
ルーチンが成功した場合は、STATUS_SUCCESSを返す必要があります。 それ以外の場合は、Ntstatus.h で定義されているエラー状態値のいずれかを返す必要があります。
備考
DriverObject パラメーターは、DriverEntry ルーチンに、I/O マネージャーによって割り当てられるドライバーのドライバー オブジェクトへのポインターを提供します。 DriverEntry ルーチンは、ドライバーの標準ルーチンのエントリ ポイントをドライバー オブジェクトに入力する必要があります。
DriverObject ポインターは、レジストリの \Registry\Machine\Hardware ツリーへのパスを指定するカウントされた Unicode 文字列を指す、>HardwareDatabaseへのドライバー アクセスを提供します。
RegistryPath が指すレジストリ パス文字列は、DriverName\Registry\Machine\System\CurrentControlSet\Services\形式です。 ドライバーは、このパスを使用してドライバー固有の情報を格納できます。ドライバー のレジストリ キーのを参照してください。 DriverEntry ルーチンは、ポインターではなく Unicode 文字列のコピーを保存する必要があります。これは、RegistryPath バッファー DriverEntry が返された後であるためです。
DriverEntry ルーチンの実装の詳細については、「DriverEntry ルーチン の作成を参照してください。
このルーチンには、DriverEntry 以外の名前付けすることは可能ですが、これを行うことはお勧めしません。 DDK で提供されるビルド ツールは、ドライバーのエントリ ポイントが DriverEntry 呼び出されていることをリンカーに自動的に通知するため、ルーチンに別の名前を付ける場合は、ビルド ツールを変更する必要があります。 ビルド ツールの詳細については、「ドライバー のビルド」を参照してください。
例
DriverEntry コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー 、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析をすると、エラーが検出されます。
DriverEntry コールバック ルーチンを定義するには、次のコード例に示すようにDRIVER_INITIALIZE型を使用します。
DRIVER_INITIALIZE DriverEntry;
次に、次のようにコールバック ルーチンを実装します。
_Use_decl_annotations_
NTSTATUS
DriverEntry(
struct _DRIVER_OBJECT *DriverObject,
PUNICODE_STRING RegistryPath
)
{
// Function body
}
DRIVER_INITIALIZE関数の種類は、Wdm.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、_Use_decl_annotations_
注釈を関数定義に追加してください。
_Use_decl_annotations_
注釈により、ヘッダー ファイル内のDRIVER_INITIALIZE関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「WDM ドライバーの の関数の役割の種類を使用して関数を宣言するを参照してください。
_Use_decl_annotations_
の詳細については、「関数の動作 に注釈を付けるを参照してください。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | wdm.h (Mcd.h、Ntddk.h、Ntifs.h、Wudfwdm.h を含む) |
IRQL | PASSIVE_LEVELで呼び出されます。 |