IoReportDetectedDevice 関数 (ntddk.h)
IoReportDetectedDevice ルーチンは、PnP 以外のデバイスを PnP マネージャーに報告します。
構文
NTSTATUS IoReportDetectedDevice(
[in] PDRIVER_OBJECT DriverObject,
[in] INTERFACE_TYPE LegacyBusType,
[in] ULONG BusNumber,
[in] ULONG SlotNumber,
[in, optional] PCM_RESOURCE_LIST ResourceList,
[in, optional] PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements,
[in] BOOLEAN ResourceAssigned,
[in, out] PDEVICE_OBJECT *DeviceObject
);
パラメーター
[in] DriverObject
デバイスを検出したドライバーのドライバー オブジェクトへのポインター。
[in] LegacyBusType
デバイスが存在するバスの種類を指定します。 PnP マネージャーは、この情報を使用して、報告されたデバイスを PnP 列挙インスタンス (存在する場合) と照合します。
PCIBus などのインターフェイス型は Wdm.h で定義されています。 ドライバーがデバイスの LegacyBusType を認識していない場合、ドライバーは、このパラメーターの 値 InterfaceTypeUndefined を提供します。
[in] BusNumber
デバイスのバス番号を指定します。 PnP マネージャーは、この情報を使用して、報告されたデバイスを PnP 列挙インスタンス (存在する場合) と照合します。
バス番号は、デバイスが存在するバスを、コンピューター上の同じ種類の他のバスと区別します。 バス番号付けスキームはバス固有です。 ドライバーがデバイスの BusNumber を認識していない場合、ドライバーはこのパラメーターの値 -1 を提供します。
[in] SlotNumber
デバイスの論理スロット番号を指定します。 PnP マネージャーは、この情報を使用して、報告されたデバイスを PnP 列挙インスタンス (存在する場合) と照合します。
ドライバーがデバイスの SlotNumber を認識していない場合、ドライバーはこのパラメーターの値 -1 を提供します。
[in, optional] ResourceList
デバイスの検出に使用されるドライバーのリソース 一覧へのポインター。 この一覧のリソースは、未加工の未翻訳の形式です。
[in, optional] ResourceRequirements
必要に応じて、検出されたデバイスのリソース要件リストをポイントします。 呼び出し元にデバイスのこの情報がない場合は NULL。
[in] ResourceAssigned
デバイスのリソースが PnP マネージャーに既に報告されているかどうかを指定します。 ResourceAssigned が TRUE の場合、リソースは既に報告されており、IoReportResourceForDetection を使用している可能性があり、PnP マネージャーはデバイスの代わりに要求を試みません。 TRUE の場合、PnP マネージャーは、後続の起動時にデバイスがルート列挙されるときにもリソースを要求しません。
[in, out] DeviceObject
必要に応じて、検出されたデバイスの PDO を指します。
呼び出し元にデバイスの PDO がない場合は NULL (通常は該当します)。 DeviceObject が NULL の場合、PnP マネージャーはデバイスの PDO を作成し、呼び出し元へのポインターを返します。
呼び出し元が PDO を提供する場合、PnP マネージャーは新しい PDO を作成しません。 このルーチンの特定の呼び出しでは、 DeviceObject パラメーターは IN または OUT パラメーターのいずれかですが、両方ではありません。
戻り値
IoReportDetectedDevice は、成功した場合はSTATUS_SUCCESS、失敗した場合は適切なエラー コードを返します。
注釈
レガシ デバイスのドライバーでは、 IoReportDetectedDevice を使用してデバイスをシステムに報告します。 ドライバーは、レガシの PnP 以外のデバイスを報告するためにのみ IoReportDetectedDevice を呼び出す必要があります。 PnP デバイスは、IRP_MN_QUERY_DEVICE_RELATIONS要求に応答して報告する必要があります。
ドライバーは、PnP マネージャーが報告された情報をキャッシュするため、 IoReportDetectedDevice を初めて読み込むときにのみ呼び出す必要があります。 このルーチンを使用するドライバーは、既にデバイス検出を行っているかどうかを示すフラグをレジストリに格納する必要があります。
ドライバーは通常、 DriverEntry ルーチンからこのルーチンを呼び出します。 特定の NDIS ドライバーや EISA ドライバーなど、いくつかのドライバーは、 AddDevice ルーチンからこのルーチンを呼び出す場合があります。
IoReportDetectedDevice が正常に完了したら、呼び出し元は DeviceObject で返された PDO に FDO をアタッチする必要があります。 呼び出し元が FDO をアタッチすると、呼び出し元は少なくとも一時的にデバイスの関数ドライバーになります。 フィルター ドライバーはありません。 PnP マネージャーは PDO を所有しています。
PnP マネージャーは、デバイスが開始されると見なされるため、ドライバーの AddDevice ルーチンを呼び出せず、 IRP_MN_START_DEVICE 要求を送信しません。 ただし、ドライバーは、他のすべての PnP IRP を処理するように準備する必要があります。
IoReportDetectedDevice は 、デバイスをルート列挙デバイスとしてマークし、この識別はシステムの起動時に永続的です。 後続のシステムの起動時に、PnP マネージャーは、ルート列挙リスト上のデバイスを "検出" し、PnP デバイスのように構成します。PnP マネージャーは、デバイス情報を照会し、適切なドライバーを識別して AddDevice ルーチンを呼び出し、すべての適切な PnP IRP を送信します。
システムは、DETECTEDインターフェイス\ドライバー と DETECTED\Driver という形式のデバイスに対応する 2 つの ID 文字列を生成します。 Interface は、ResourceList パラメーターで指定された最初のバスのINTERFACE_TYPEの文字列名です。 バス が指定されていない場合、インターフェイスは "Internal" に設定されます。 ドライバー はドライバーのサービス名です。 ドライバーは、 IRP_MN_QUERY_ID 要求を処理することによって、追加のハードウェア ID または互換性のある ID を提供できます。
ドライバー ライターは、指定されたハードウェア ID または互換性のある ID のいずれかに一致する INF ファイルを提供する必要があります。 INF ファイルでは、 IoReportDetectedDevice を呼び出した元のドライバーを、それらの ID 用に読み込むドライバーとして指定する必要があります。 システムはこの情報を使用して、再起動時などにデバイスのドライバー スタックを再構築します。 IoReportDetectedDevice の呼び出し元は、システム スレッドのコンテキストで IRQL = PASSIVE_LEVELで実行されている必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | ntddk.h (Ntddk.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (「解説」セクションを参照) |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |