Menangani Permintaan untuk Menghentikan Perangkat
Ada dua keadaan di mana, sebelum meminta driver perangkat untuk menghentikan perangkat, manajer PnP bertanya kepada driver apakah menghentikan perangkat adalah ide yang baik:
Pengguna telah menyambungkan perangkat baru, dan manajer PnP harus mendistribusikan ulang sumber daya perangkat keras sistem untuk mengakomodasi perangkat baru.
Pengguna telah menunjukkan bahwa dia ingin menghapus perangkat.
Ada beberapa cara di mana driver dapat menangani situasi ini:
Jika driver Anda telah memanggil WdfDeviceSetSpecialFileSupport karena perangkat mendukung file khusus, dan jika file khusus terbuka pada perangkat, kerangka kerja tidak akan memungkinkan perangkat dihentikan.
Untuk sementara mencegah semua penghentian untuk waktu yang relatif singkat, driver dapat memanggil WdfDeviceSetStaticStopRemove.
Untuk mengevaluasi dan memproses setiap upaya pemberhentian satu per satu, driver dapat menyediakan fungsi panggilan balik EvtDeviceQueryStop dan EvtDeviceQueryRemove .
Jika perangkat tidak mendukung file khusus, dan jika menghentikan atau menghapus perangkat tidak pernah menjadi masalah bagi driver atau perangkat, driver tidak menyediakan fungsi panggilan balik EvtDeviceQueryStop dan EvtDeviceQueryRemove dan tidak pernah memanggil WdfDeviceSetStaticStopRemove. Dalam hal ini manajer PnP selalu menghentikan perangkat tanpa terlebih dahulu memeriksa untuk melihat apakah driver mengizinkannya.
Mendistribusikan ulang Sumber Daya
Terkadang manajer PnP harus mendistribusikan ulang sumber daya perangkat keras sistem. Biasanya, redistribusi ini terjadi karena driver bus telah melaporkan bahwa perangkat baru telah dicolokkan, dan perangkat baru memerlukan sumber daya yang sudah ditetapkan. Perangkat harus dihentikan sebelum sumber daya ditetapkan ulang.
Jika driver Anda perlu terkadang mencegah manajer PnP menghentikan perangkat yang sibuk, driver dapat menyediakan fungsi panggilan balik EvtDeviceQueryStop . Jika fungsi panggilan balik EvtDeviceQueryStop driver Anda mengembalikan nilai status kesalahan, manajer PnP tidak akan menghentikan perangkat.
Jika driver menentukan bahwa aman untuk menghentikan perangkat, fungsi panggilan balik mengembalikan STATUS_SUCCESS. Jika tidak ada driver lain perangkat yang mencegah penghentian, manajer PnP menghentikan perangkat untuk sementara.
Untuk informasi tentang urutan di mana kerangka kerja memanggil fungsi panggilan balik peristiwa driver ketika manajer PnP menghentikan perangkat untuk mendistribusikan ulang sumber daya, lihat Manajer PnP Mendistribusikan Ulang Sumber Daya Sistem.
Pengguna Menghapus atau Menonaktifkan Perangkat
Pengguna dapat menghapus atau menonaktifkan beberapa perangkat. Contohnya:
Jika driver Anda telah mengatur anggota Yang Dapat Dilepas (dan bukan anggota SurpriseRemovalOK ) dari struktur WDF_DEVICE_PNP_CAPABILITIES perangkat, pengguna dapat menjalankan program Cabut atau Keluarkan Perangkat Keras lalu melepas atau mengeluarkan perangkat.
Jika driver Anda belum mengatur anggota notDisable dari struktur WDF_DEVICE_STATE perangkat, pengguna dapat menggunakan Manajer Perangkat untuk menonaktifkan perangkat.
Dalam kasus seperti itu, manajer PnP mencoba menghentikan perangkat sebelum pengguna menghapusnya.
Jika perlu bagi driver Anda untuk terkadang mencegah penghapusan perangkat yang sibuk, driver dapat menyediakan fungsi panggilan balik EvtDeviceQueryRemove . Jika fungsi panggilan balik EvtDeviceQueryRemove driver mengembalikan nilai status kesalahan, manajer PnP tidak akan menghentikan perangkat.
Jika driver menentukan bahwa aman bagi pengguna untuk menghapus perangkat, fungsi panggilan balik mengembalikan STATUS_SUCCESS. Jika tidak ada driver lain perangkat yang mencegah penghapusan, manajer PnP menghentikan perangkat.
Untuk informasi tentang urutan di mana kerangka kerja memanggil fungsi panggilan balik peristiwa driver saat menghentikan perangkat untuk dihapus, lihat Pengguna Mencabut Perangkat.