次の方法で共有


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で呼び出されます。

こちらもご覧ください

DRIVER_OBJECT