Fungsi IoReportResourceForDetection (ntddk.h)

Rutinitas IoReportResourceForDetection mengklaim sumber daya perangkat keras dalam registri konfigurasi untuk perangkat warisan.

Sintaks

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
);

Parameter

[in] DriverObject

Penunjuk ke objek driver yang dimasukkan ke rutinitas DriverEntry driver.

[in, optional] DriverList

Secara opsional menunjuk ke buffer yang disediakan penelepon yang berisi daftar sumber daya driver, jika driver mengklaim sumber daya yang sama untuk semua perangkatnya. Jika penelepon menentukan DeviceList, parameter ini diabaikan.

[in, optional] DriverListSize

Menentukan ukuran dalam byte dari DriverList opsional. Jika DriverListNULL, parameter ini harus nol.

[in, optional] DeviceObject

Secara opsional menunjuk ke objek perangkat yang mewakili perangkat yang drivernya mencoba mengklaim sumber daya.

[in, optional] DeviceList

Secara opsional menunjuk ke buffer yang disediakan penelepon yang berisi daftar sumber daya perangkat. Jika driver mengklaim sumber daya yang sama untuk semua perangkatnya, pemanggil dapat menentukan DriverList sebagai gantinya.

[in, optional] DeviceListSize

Menentukan ukuran dalam byte dari DeviceList opsional. Jika DeviceListNULL, parameter ini harus nol.

[out] ConflictDetected

Penunjuk ke nilai Boolean yang disediakan penelepon yang diatur ke TRUE saat dikembalikan jika sumber daya tidak tersedia.

Nilai kembali

IoReportResourceForDetection mengembalikan STATUS_SUCCESS jika sumber daya diklaim. Kemungkinan nilai pengembalian kesalahan mencakup yang berikut ini.

Menampilkan kode Deskripsi
STATUS_CONFLICTING_ADDRESSES Sumber daya tidak dapat diklaim karena sudah digunakan atau diperlukan untuk perangkat yang dapat dijumlahkan PnP.
STATUS_UNSUCCESSFUL DeviceList atau DriverList tidak valid.

Keterangan

Rutinitas ini untuk driver yang mendeteksi perangkat keras sebelumnya yang tidak dapat dijumlahkan oleh Plug and Play (PnP).

Jika driver hanya mendukung perangkat keras PnP, driver tidak melakukan deteksi dan karenanya tidak memanggil IoReportResourceForDetection. Sistem PnP menghitung setiap perangkat PnP, menetapkan sumber daya ke perangkat, dan meneruskan sumber daya tersebut ke driver perangkat dalam permintaan IRP_MN_START_DEVICE .

Namun, jika driver PnP mendukung perangkat keras warisan, driver tersebut harus memanggil IoReportResourceForDetection untuk mengklaim sumber daya perangkat keras sebelum mencoba mendeteksi perangkat.

Penelepon rutin ini menentukan CM_RESOURCE_LIST di DeviceList atau DriverList yang dialokasikan dari memori halaman dan yang terdiri dari sumber daya mentah yang tidak diterjemahkan. Pemanggil bertanggung jawab untuk membebaskan memori.

Driver yang dapat mengontrol lebih dari satu kartu warisan pada saat yang sama harus mengklaim sumber daya untuk setiap perangkat terhadap objek perangkat untuk perangkat masing-masing (menggunakan parameter DeviceObject, DeviceList, dan DeviceListSize ). Driver seperti itu tidak boleh mengklaim sumber daya ini terhadap objek driver mereka.

CM_RESOURCE_LIST berisi dua array berukuran variabel. Setiap array memiliki ukuran default satu. Jika salah satu array memiliki lebih dari satu elemen, pemanggil harus mengalokasikan memori secara dinamis untuk berisi elemen tambahan. Hanya satu CM_PARTIAL_RESOURCE_DESCRIPTOR yang dapat menjadi bagian dari setiap CM_FULL_RESOURCE_DESCRIPTOR dalam daftar, kecuali untuk deskriptor sumber daya lengkap terakhir di CM_RESOURCE_LIST, yang dapat memiliki deskriptor sumber daya parsial tambahan dalam array-nya.

IoReportResourceForDetection, dengan bantuan manajer PnP, menentukan apakah sumber daya yang diminta bertentangan dengan sumber daya yang telah diklaim.

Jika konflik terdeteksi, rutinitas ini mengatur BOOLEAN di ConflictDetected ke TRUE dan mengembalikan STATUS_CONFLICTING_ADDRESSES.

Jika tidak ada konflik yang terdeteksi, rutinitas ini mengklaim sumber daya, mengatur BOOLEAN di ConflictDetected ke FALSE, dan mengembalikan STATUS_SUCCESS.

Jika rutinitas ini berhasil dan driver mendeteksi perangkat warisan, driver melaporkan perangkat ke manajer PnP dengan memanggil IoReportDetectedDevice. Dalam panggilan itu, driver mengatur ResourceAssigned ke TRUE sehingga manajer PnP tidak mencoba mengklaim sumber daya lagi.

Ketika driver tidak lagi memerlukan sumber daya yang diklaim oleh panggilan ke rutinitas ini, driver memanggil rutinitas ini lagi dengan DriverList atau DeviceList dengan Hitungan nol.

Jika driver mengklaim sumber daya berdasarkan perangkat khusus untuk lebih dari satu perangkat, driver harus memanggil rutinitas ini untuk setiap perangkat tersebut.

Driver dapat memanggil rutinitas ini lebih dari sekali untuk perangkat tertentu. Jika satu set sumber daya gagal, driver dapat memanggil rutinitas lagi untuk perangkat yang sama dengan sekumpulan sumber daya yang berbeda. Jika sekumpulan sumber daya berhasil, driver dapat memanggil rutinitas ini lagi dengan daftar baru; daftar baru menggantikan daftar sebelumnya.

Pemanggil IoReportResourceForDetection harus berjalan di IRQL = PASSIVE_LEVEL dalam konteks utas sistem.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header ntddk.h (termasuk Ntddk.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (lihat bagian Keterangan)

Lihat juga

CM_RESOURCE_LIST

IoReportDetectedDevice