DRIVER_INITIALIZE コールバック関数 (wdm.h)
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 ポインターは DriverObject-HardwareDatabase> へのドライバー アクセスを提供します。これは、レジストリの \Registry\Machine\Hardware ツリーへのパスを指定するカウントされた Unicode 文字列を指します。
RegistryPath が指すレジストリ パス文字列は、\Registry\Machine\System\CurrentControlSet\Services\DriverName という形式です。 ドライバーは、このパスを使用してドライバー固有の情報を格納できます。 「ドライバーのレジストリ キー」を参照してください。 DriverEntry ルーチンは、ポインターではなく Unicode 文字列のコピーを保存する必要があります。これは、DriverEntry が戻った後に I/O マネージャーによって RegistryPath バッファーが解放されるためです。
DriverEntry ルーチンの実装の詳細については、「DriverEntry ルーチンの記述」を参照してください。
このルーチンに DriverEntry 以外の名前を付ける可能性は高くなりますが、これはお勧めしません。 DDK で提供されるビルド ツールは、ドライバーのエントリ ポイントが DriverEntry と呼ばれることをリンカーに自動的に通知するため、ルーチンに別の名前を付ける場合は、ビルド ツールを変更する必要があります。 ビルド ツールの詳細については、「 ドライバーのビルド」を参照してください。
例
DriverEntry コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。
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_
については、「 関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | wdm.h (Mcd.h、Ntddk.h、Ntifs.h、Wudfwdm.h を含む) |
IRQL | PASSIVE_LEVELで呼び出されます。 |