共用方式為


IoReportResourceForDetection 函式 (ntddk.h)

IoReportResourceForDetection 例程會宣告舊版裝置組態登錄中的硬體資源。

語法

NTSTATUS IoReportResourceForDetection(
  [in]           PDRIVER_OBJECT    DriverObject,
  [in, optional] PCM_RESOURCE_LIST DriverList,
  [in, optional] ULONG             DriverListSize,
  [in, optional] PDEVICE_OBJECT    DeviceObject,
  [in, optional] PCM_RESOURCE_LIST DeviceList,
  [in, optional] ULONG             DeviceListSize,
  [out]          PBOOLEAN          ConflictDetected
);

參數

[in] DriverObject

驅動程式物件的指標,該對像是驅動程式的 DriverEntry 例程輸入。

[in, optional] DriverList

如果驅動程式為其所有裝置宣告相同的資源,則選擇性地指向包含驅動程序資源清單的呼叫端提供的緩衝區。 如果呼叫端指定 DeviceList,則會忽略此參數。

[in, optional] DriverListSize

指定選擇性 DriverList 的位元元組大小。 如果 DriverListNULL,則此參數應為零。

[in, optional] DeviceObject

選擇性地指向代表驅動程式嘗試宣告資源的裝置裝置物件。

[in, optional] DeviceList

選擇性地指向包含裝置資源清單的呼叫端提供的緩衝區。 如果驅動程式為其所有裝置宣告相同的資源,則呼叫端可以改為指定 DriverList

[in, optional] DeviceListSize

指定選擇性 DeviceList 的位元元元大小。 如果 DeviceListNULL,則此參數應為零。

[out] ConflictDetected

呼叫端提供的布爾值指標,如果資源無法使用,則會在傳回時設定為 TRUE

傳回值

如果宣告資源,IoReportResourceForDetection 會傳回STATUS_SUCCESS。 可能的錯誤傳回值包括下列專案。

傳回碼 Description
STATUS_CONFLICTING_ADDRESSES 無法宣告資源,因為它們已在使用中,或 PnP 可列舉裝置需要這些資源。
STATUS_UNSUCCESSFUL DeviceListDriverList 無效。

備註

此例程適用於偵測 隨插即用 (PnP) 無法列舉先前硬體的驅動程式。

如果驅動程式僅支援 PnP 硬體,則不會偵測,因此不會呼叫 IoReportResourceForDetection。 PnP 系統會列舉每個 PnP 裝置、將資源指派給裝置,並在 IRP_MN_START_DEVICE 要求中將這些資源傳遞至裝置的驅動程式。

不過,如果 PnP 驅動程式支援舊版硬體,它必須先呼叫 IoReportResourceForDetection 來宣告硬體資源,才能嘗試偵測裝置。

此例程的呼叫端會在 DeviceListDriverList 中指定一個CM_RESOURCE_LIST,其配置自分頁記憶體,且由未經傳輸的資源所組成。 呼叫端負責釋放記憶體。

可以同時控制多個舊版卡片的驅動程式,應該使用 DeviceObjectDeviceList 和 DeviceListSize 參數,針對個別裝置的裝置物件宣告每個裝置的資源 () 。 這類驅動程式不得針對其驅動程序物件宣告這些資源。

CM_RESOURCE_LIST包含兩個可變大小的陣列。 每個數位的預設大小為一。 如果任一陣列有多個元素,則呼叫端必須動態配置記憶體,以包含其他元素。 清單中每個 CM_FULL_RESOURCE_DESCRIPTOR 只能有一個 CM_PARTIAL_RESOURCE_DESCRIPTOR ,但 CM_RESOURCE_LIST中最後一個完整資源描述元除外,其陣列中可以有額外的部分資源描述元。

IoReportResourceForDetection 具有 PnP 管理員的協助,判斷要求的資源是否與已宣告的資源衝突。

如果偵測到衝突,此例程會將 ConflictDetected 的 BOOLEAN 設定為 TRUE ,並傳回STATUS_CONFLICTING_ADDRESSES。

如果未偵測到任何衝突,此例程會宣告資源、將 ConflictDetected 的 BOOLEAN 設定為 FALSE,並傳回STATUS_SUCCESS。

如果此例程成功,且驅動程式偵測到舊版裝置,驅動程式會呼叫 IoReportDetectedDevice 將裝置回報給 PnP 管理員。 在該呼叫中,驅動程式會將 ResourceAssigned 設定為 TRUE ,讓 PnP 管理員不會再次嘗試宣告資源。

當驅動程式不再需要呼叫此例程所宣告的資源時,驅動程式會再次使用 DriverListDeviceList 呼叫此例程, 其計數 為零。

如果驅動程式針對多個裝置以裝置特定為基礎宣告資源,驅動程式必須針對每個這類裝置呼叫此例程。

驅動程式可以針對指定的裝置多次呼叫此例程。 如果一組資源失敗,驅動程式可以針對具有相同資源集的相同裝置再次呼叫例程。 如果一組資源成功,驅動程式可以使用新的清單再次呼叫此例程;新清單會取代先前的清單。

IoReportResourceForDetection 的呼叫端必須在 IRQL = PASSIVE_LEVEL在系統線程的內容中執行。

規格需求

需求
目標平台 Universal
標頭 ntddk.h (包含 Ntddk.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL (请参阅一节)

另請參閱

CM_RESOURCE_LIST

IoReportDetectedDevice