次の方法で共有


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 要求に応答して報告する必要があります。

ドライバーは、IoReportDetectedDevice を呼び出す必要があるのは、PnP マネージャーが報告された情報をキャッシュするため、初めて読み込まれた だけです。 このルーチンを使用するドライバーは、既にデバイスの検出を行っているかどうかを示すフラグをレジストリに格納する必要があります。

ドライバーは通常、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 を送信します。

システムは、DETECTEDInterface\Driver と DETECTED\Driverの形式で、デバイスに対応する 2 つの ID 文字列を生成します。 インターフェイス は、ResourceList パラメーターで指定された最初のバスの INTERFACE_TYPE の文字列名です。 バスが指定されていない場合、インターフェイス は "Internal" に設定されます。 ドライバー はドライバーのサービス名です。 ドライバーは、IRP_MN_QUERY_ID 要求を処理することによって、追加のハードウェア ID または互換性のある ID を提供できます。

ドライバー ライターは、指定されたハードウェア ID または互換性のある ID のいずれかに一致する INF ファイルを提供する必要があります。 INF ファイルでは、IoReportDetectedDevice 呼び出した元のドライバーを、それらの ID に対して読み込むドライバーとして指定する必要があります。 システムはこの情報を使用して、再起動時などにデバイスのドライバー スタックを再構築します。 IoReportDetectedDevice の呼び出し元は、システム スレッドのコンテキストで IRQL = PASSIVE_LEVELで実行されている必要があります。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 以降で使用できます。
ターゲット プラットフォーム 万国
ヘッダー ntddk.h (Ntddk.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (「解説」セクションを参照)
DDI コンプライアンス規則 する HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

関連項目

IRP_MN_QUERY_DEVICE_RELATIONS

IoReportResourceForDetection