Fungsi IoReportDetectedDevice (ntddk.h)
Rutinitas IoReportDetectedDevice melaporkan perangkat non-PnP ke manajer PnP.
Sintaks
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
);
Parameter
[in] DriverObject
Penunjuk ke objek pengandar driver yang mendeteksi perangkat.
[in] LegacyBusType
Menentukan jenis bus tempat perangkat berada. Manajer PnP menggunakan informasi ini untuk mencocokkan perangkat yang dilaporkan dengan instans yang dijumlahkan PnP-nya, jika ada.
Jenis antarmuka, seperti PCIBus, didefinisikan dalam Wdm.h. Jika driver tidak mengetahui LegacyBusType untuk perangkat, driver menyediakan nilai InterfaceTypeUndefined untuk parameter ini.
[in] BusNumber
Menentukan nomor bus untuk perangkat. Manajer PnP menggunakan informasi ini untuk mencocokkan perangkat yang dilaporkan dengan instans yang dijumlahkan PnP-nya, jika ada.
Nomor bus membedakan bus tempat perangkat berada dari bus lain dengan jenis yang sama di komputer. Skema penomoran bus khusus bus. Jika driver tidak mengetahui BusNumber untuk perangkat, driver menyediakan nilai -1 untuk parameter ini.
[in] SlotNumber
Menentukan nomor slot logis perangkat. Manajer PnP menggunakan informasi ini untuk mencocokkan perangkat yang dilaporkan dengan instans yang dijumlahkan PnP-nya, jika ada.
Jika driver tidak tahu SlotNumber untuk perangkat, driver menyediakan nilai -1 untuk parameter ini.
[in, optional] ResourceList
Arahkan ke daftar sumber daya yang digunakan driver untuk mendeteksi perangkat. Sumber daya dalam daftar ini dalam bentuk mentah dan tidak diterjemahkan.
[in, optional] ResourceRequirements
Secara opsional menunjuk ke daftar persyaratan sumber daya untuk perangkat yang terdeteksi. NULL jika pemanggil tidak memiliki informasi ini untuk perangkat.
[in] ResourceAssigned
Menentukan apakah sumber daya perangkat telah dilaporkan ke manajer PnP. Jika ResourceAssignedTRUE, sumber daya telah dilaporkan, mungkin dengan IoReportResourceForDetection, dan manajer PnP tidak akan mencoba mengklaimnya atas nama perangkat. Jika TRUE, manajer PnP juga tidak akan mengklaim sumber daya ketika perangkat dijumlahkan akar pada boot berikutnya.
[in, out] DeviceObject
Secara opsional menunjuk ke PDO untuk perangkat yang terdeteksi.
NULL jika pemanggil tidak memiliki PDO untuk perangkat, yang biasanya terjadi. Jika DeviceObject adalah NULL, manajer PnP membuat PDO untuk perangkat dan mengembalikan penunjuk ke pemanggil.
Jika penelepon menyediakan PDO, manajer PnP tidak membuat PDO baru. Pada panggilan tertentu ke rutinitas ini, parameter DeviceObject adalah parameter IN atau OUT, tetapi tidak keduanya.
Nilai kembali
IoReportDetectedDevice mengembalikan STATUS_SUCCESS pada keberhasilan, atau kode kesalahan yang sesuai pada kegagalan.
Keterangan
Driver untuk perangkat warisan menggunakan IoReportDetectedDevice untuk melaporkan perangkat mereka ke sistem. Driver hanya boleh memanggil IoReportDetectedDevice untuk melaporkan perangkat warisan non-PnP. Perangkat PnP harus dilaporkan sebagai respons terhadap permintaan IRP_MN_QUERY_DEVICE_RELATIONS .
Driver hanya perlu memanggil IoReportDetectedDevice saat pertama kali dimuat karena manajer PnP menyimpan informasi yang dilaporkan. Driver yang menggunakan rutinitas ini harus menyimpan bendera di registri untuk menunjukkan apakah mereka telah melakukan deteksi perangkat.
Driver biasanya menyebut rutinitas ini dari rutinitas DriverEntry-nya . Beberapa driver, seperti driver NDIS atau EISA tertentu, mungkin menyebut rutinitas ini dari rutinitas AddDevice .
Setelah berhasil menyelesaikan IoReportDetectedDevice, pemanggil harus melampirkan FDO ke PDO yang dikembalikan di DeviceObject. Setelah penelepon melampirkan FDO-nya, pemanggil adalah driver fungsi untuk perangkat, setidaknya untuk sementara. Tidak ada driver filter. Manajer PnP memiliki PDO.
Manajer PnP menganggap perangkat dimulai dan oleh karena itu tidak memanggil rutinitas AddDevice driver dan tidak mengirim permintaan IRP_MN_START_DEVICE . Driver harus siap untuk menangani semua runtime integrasi PnP lainnya.
IoReportDetectedDevice menandai perangkat sebagai perangkat yang dijumlahkan akar dan identifikasi ini persisten di seluruh boot sistem. Selama sistem berikutnya booting manajer PnP "mendeteksi" perangkat pada daftar root-enumerated dan mengonfigurasinya seperti perangkat PnP: manajer PnP meminta informasi perangkat, mengidentifikasi driver yang sesuai dan memanggil rutinitas AddDevice mereka, dan mengirim semua RUNTIME PnP yang sesuai.
Sistem menghasilkan dua string ID yang kompatibel untuk perangkat, dari bentukDETECTEDInterface\ Driver dan DETECTED\Driver. Antarmuka adalah nama string dari INTERFACE_TYPE bus pertama yang ditentukan dalam parameter ResourceList . Antarmuka diatur ke "Internal" jika tidak ada bus yang ditentukan. Driver adalah nama layanan driver. Driver dapat menyediakan ID perangkat keras tambahan atau ID yang kompatibel dengan menangani permintaan IRP_MN_QUERY_ID .
Penulis driver harus menyediakan file INF yang cocok dengan SALAH SATU ID perangkat keras yang ditentukan atau ID yang kompatibel. File INF harus menentukan driver asli yang disebut IoReportDetectedDevice sebagai driver yang akan dimuat untuk ID tersebut. Sistem menggunakan informasi ini untuk membangun kembali tumpukan driver untuk perangkat, misalnya saat menghidupkan ulang. Pemanggil IoReportDetectedDevice harus berjalan di IRQL = PASSIVE_LEVEL dalam konteks utas sistem.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia dimulai dengan Windows 2000. |
Target Platform | Universal |
Header | ntddk.h (termasuk Ntddk.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (lihat bagian Keterangan) |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |