共用方式為


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的位元元組大小。 如果 deviceList NULL,則此參數應該是零。

[out] ConflictDetected

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

傳回值

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

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

言論

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

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

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

此例程的呼叫者會指定 deviceList 中的 CM_RESOURCE_LIST,或從分頁記憶體配置且由未經傳輸的資源所配置的 DriverList。 呼叫端負責釋放記憶體。

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

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 呼叫此例程,Count 為零。

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

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

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

要求

要求 價值
目標平臺 普遍
標頭 ntddk.h (包括 Ntddk.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (請參閱一節)

另請參閱

CM_RESOURCE_LIST

IoReportDetectedDevice