IRP_MN_DEVICE_USAGE_NOTIFICATION

Komponen sistem mengirim IRP ini untuk meminta perangkat kepada driver apakah perangkat dapat mendukung file khusus. File khusus mencakup file halaman, file cadangan, dan file hibernasi. Jika semua driver untuk perangkat berhasil IRP, sistem akan membuat file khusus. Sistem juga mengirimkan IRP ini untuk memberi tahu driver bahwa file khusus telah dihapus dari perangkat.

Driver fungsi harus menangani IRP ini jika perangkat mereka dapat berisi file halaman, file cadangan, atau file hibernasi. Driver filter harus menangani IRP ini jika driver fungsi yang mereka filter menangani IRP. Pengemudi bus harus menangani IRP ini untuk adaptor atau pengontrolnya (FDO bus) dan untuk perangkat anak mereka (PDO anak).

Nilai

0x16

Kode Utama

IRP_MJ_PNP

Ketika Dikirim

Sistem mengirimkan IRP ini saat membuat atau menghapus file halaman, file cadangan, atau file hibernasi. Jika perangkat memiliki hubungan manajemen daya yang berada di luar hubungan induk-anak konvensional, driver dapat mengirim IRP ini untuk menyebarluaskan informasi penggunaan perangkat ke tumpukan perangkat lain. Untuk informasi selengkapnya, lihat deskripsi permintaan PowerRelations di IRP_MN_QUERY_DEVICE_RELATIONS.

Komponen dan driver sistem mengirim IRP ini di IRQL PASSIVE_LEVEL dalam konteks utas arbitrer.

Parameter Input

Anggota Parameters.UsageNotification.InPath dari struktur IO_STACK_LOCATION adalah BOOLEAN. Ketika parameter ini TRUE, sistem membuat file paging, crash dump, atau hibernasi pada perangkat. Ketika InPathFALSE, file tersebut telah dihapus dari perangkat.

Parameters.UsageNotification.Type adalah enum yang menunjukkan jenis file. Parameter ini memiliki salah satu nilai berikut: DeviceUsageTypePaging, DeviceUsageTypeDumpFile, atau DeviceUsageTypeHibernation.

Parameter Output

Tidak ada

Blok Status I/O

Driver mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS atau ke status kesalahan yang sesuai.

Driver tidak memodifikasi bidang Irp-IoStatus.Information>; itu tetap pada nol, seperti yang diatur oleh komponen yang mengirim IRP.

Operasi

Driver menangani IRP ini saat IRP menuruni tumpukan perangkat dan saat IRP mencadangkan tumpukan.

Driver merespons IRP ini dengan prosedur seperti berikut:

  • Jika Parameters.UsageNotification.InPathTRUE, tentukan apakah perangkat mendukung file khusus.

    Driver harus menguji Parameters.UsageNotification.Type tertentu yang dapat didukung driver. Jenis pemberitahuan tambahan mungkin ditambahkan di masa mendatang.

    Lihat informasi lebih lanjut di bawah ini yang menjelaskan tindakan yang diperlukan untuk mendukung setiap jenis pemberitahuan.

    Jika Parameters.UsageNotification.InPathTRUE dan driver tidak dapat mendukung file khusus pada perangkat, driver harus menyelesaikan IRP dengan status kegagalan.

  • Jika perangkat mendukung file khusus:

    1. Ambil tindakan yang sesuai untuk mencerminkan bahwa perangkat sekarang berisi, atau tidak lagi berisi, file khusus.

      Driver biasanya menaikkan atau mengurangi penghitung. Misalnya, jika Parameters.UsageNotification.Type adalah DeviceUsageTypePaging dan Parameters.UsageNotification.InPathadalah TRUE, tahapkan jumlah file halaman pada perangkat. Rutinitas pengiriman driver tertentu harus memeriksa penghitung.

      Perangkat yang berisi file khusus tidak boleh dinonaktifkan. Driver dapat memanggil IoInvalidateDeviceState, meminta manajer PnP untuk mengkueri ulang informasi status perangkat PnP perangkat. Menanggapi IRP IRP_MN_QUERY_PNP_DEVICE_STATE yang dihasilkan, driver harus mengatur bendera PNP_DEVICE_NOT_DISABLEABLE.

      Jika InPathFALSE, driver mengatur bit DO_POWER_PAGABLE di objek perangkatnya untuk perangkat.

    2. Menyebarkan informasi penggunaan perangkat ke perangkat terkait apa pun yang memerlukan informasi tersebut.

      Sebagai bagian dari penanganan IRP IRP_MN_DEVICE_USAGE_NOTIFICATION , driver mungkin diperlukan untuk meneruskan informasi ke satu atau beberapa tumpukan perangkat lainnya. Driver seperti itu membuat IRP IRP_MN_DEVICE_USAGE_NOTIFICATION baru (atau IRP) dan mengirimkannya ke tumpukan perangkat (atau tumpukan) yang sesuai. Driver harus menunggu penyelesaian IRP pemberitahuan penggunaan perangkat apa pun yang dikirimnya sebelum driver selesai memproses IRP penggunaan perangkat yang diterimanya.

      Cara mengidentifikasi perangkat terkait adalah perangkat dan khusus driver. Biasanya, driver mengirim IRP ke driver lain yang akan mengirim permintaan I/O untuk file tersebut. Ketika driver bus menangani permintaan ini untuk perangkat anak, driver tersebut harus mengirim IRP pemberitahuan penggunaan ke tumpukan perangkat untuk induk perangkat.

      Misalnya, ketika ftdisk menjalankan set stripe lima disk, ftdisk menyebarkan pemberitahuan halaman ke masing-masing dari lima disk ini, karena masing-masing perangkat ini dapat diperlukan untuk menangani operasi file halaman.

    3. Dalam fungsi atau driver filter, atur rutinitas IoCompletion .

    4. Dalam driver fungsi atau filter, atur Irp-IoStatus.Status> ke STATUS_SUCCESS, siapkan lokasi tumpukan berikutnya, dan teruskan IRP ke driver bawah berikutnya dengan IoCallDriver. Jangan selesaikan IRP.

      Dalam pengemudi bus yang menangani IRP untuk PDO anak: atur Irp-IoStatus.Status> dan selesaikan IRP (IoCompleteRequest).

    5. Selama pemrosesan penyelesaian IRP:

      Jika rutinitas IoCompletion mendeteksi bahwa driver yang lebih rendah telah gagal IRP, fungsi atau driver filter harus membatalkan operasi apa pun yang dilakukannya sebagai respons terhadap IRP dan menyebarluaskan kesalahan. Jika fungsi atau driver filter menyebarkan informasi penggunaan ke tumpukan perangkat lain, driver harus mengirim IRP penggunaan lain ke tumpukan tersebut untuk memberi tahu mereka tentang kegagalan tersebut.

      Jika status STATUS_SUCCESS dan InPathTRUE, kosongkan bit DO_POWER_PAGABLE.

Lihat Plug and Play aturan umum untuk menangani Plug and Play runtime integrasi kecil.

Mendukung File Paging, Crash Dump, dan Hibernation di Perangkat

Ketika salah satu jumlah file khusus driver bukan nol, driver harus mendukung keberadaan file khusus pada perangkatnya (atau perangkat turunan).

Untuk file DeviceUsageTypePaging yang dibuat di perangkatnya, driver harus melakukan hal berikut:

  • Kunci kode dalam memori untuk rutinitas DispatchRead, DispatchWrite, DispatchDeviceControl, dan DispatchPower .

  • Bersihkan bit DO_POWER_PAGABLE di objek perangkatnya untuk perangkat (pada IRP akan meningkatkan tumpukan perangkat).

  • Gagal IRP_MN_QUERY_STOP_DEVICE dan permintaan IRP_MN_QUERY_REMOVE_DEVICE untuk perangkat.

Untuk file DeviceUsageTypeDumpFile di perangkatnya, driver harus melakukan hal berikut:

  • Kunci kode dalam memori untuk rutinitas DispatchRead, DispatchWrite, DispatchDeviceControl, dan DispatchPower .

  • Jangan mengeluarkan perangkat dari status D0.

    Jangan mendaftarkan perangkat untuk deteksi diam (PoRegisterDeviceForIdleDetection). Jika perangkat sudah terdaftar, batalkan pendaftaran. Jika driver melakukan deteksi diam sendiri untuk perangkat, tangguhkan deteksi tersebut.

  • Bersihkan bit DO_POWER_PAGABLE di objek perangkatnya untuk perangkat (pada IRP akan meningkatkan tumpukan perangkat).

  • Gagal IRP_MN_QUERY_STOP_DEVICE dan permintaan IRP_MN_QUERY_REMOVE_DEVICE untuk perangkat.

Untuk file DeviceUsageTypeHibernation di perangkatnya, driver harus melakukan hal berikut:

  • Kunci kode dalam memori untuk rutinitas DispatchRead, DispatchWrite, DispatchDeviceControl, dan DispatchPower .

  • Pastikan perangkat dalam status D0 ketika driver menerima IRP daya sistem S4 yang menunjukkan bahwa sistem akan berhibernasi.

  • Jangan matikan perangkat sebagai respons terhadap IRP set-power D3 yang merupakan bagian dari tindakan hibernasi S4. Lihat Tindakan Daya Sistem untuk informasi selengkapnya.

    Setelah menerima IRP set-power D3 tersebut, lakukan semua tugas yang diperlukan untuk menempatkan perangkat dalam status D3 kecuali untuk mematikan perangkat dan memberi tahu manajer daya (PoSetPowerState). Perangkat harus mempertahankan daya hingga file hibernasi ditulis.

  • Bersihkan bit DO_POWER_PAGABLE di objek perangkatnya untuk perangkat (pada IRP akan meningkatkan tumpukan perangkat).

  • Gagal IRP_MN_QUERY_STOP_DEVICE dan permintaan IRP_MN_QUERY_REMOVE_DEVICE untuk perangkat.

Lihat Manajemen Daya untuk informasi selengkapnya tentang status daya perangkat, runtime integrasi daya, dan manajemen daya pendukung di driver.

Mengirim IRP ini

Driver dapat mengirim IRP_MN_DEVICE_USAGE_INFORMATION IRP, tetapi hanya untuk menyebarluaskan informasi penggunaan perangkat ke tumpukan perangkat lain. Driver tidak pernah menjadi sumber awal informasi penggunaan perangkat.

Persyaratan

Header

Wdm.h (termasuk Wdm.h, Ntddk.h, atau Ntifs.h)

Lihat juga

DispatchDeviceControl

DispatchPower

DispatchRead

DispatchWrite

IoAdjustPagingPathCount

IoCallDriver

IoCompleteRequest

IO_STACK_LOCATION

IRP_MJ_PNP

IRP_MN_QUERY_DEVICE_RELATIONS

IRP_MN_QUERY_PNP_DEVICE_STATE

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_QUERY_STOP_DEVICE

PoRegisterDeviceForIdleDetection

PoSetPowerState