Mengontrol Status Target I/O Umum

Anda dapat memvisualisasikan objek target I/O sebagai memiliki dua gerbang: in-gate dan out-gate. Out-gate mengontrol kapan kerangka kerja mengirimkan permintaan ke objek perangkat target, sementara di gerbang mengontrol kapan permintaan diizinkan untuk memasukkan target I/O sama sekali.

Kerangka kerja menentukan status berikut untuk target I/O umum:

Mulai
Kedua gerbang objek target I/O terbuka. Driver dapat mengirim permintaan I/O ke antrean target I/O, dan kerangka kerja mengirimkan permintaan ke driver yang sesuai.

Berhenti
Gerbang masuk target I/O terbuka, tetapi gerbang keluar ditutup. Kerangka kerja berhenti mengirimkan permintaan ke driver yang sesuai. Untuk mengirim permintaan I/O ke target I/O, driver harus mengatur WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE atau WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET dalam struktur WDF_REQUEST_SEND_OPTIONS setiap permintaan.

Dibersihkan
Kedua gerbang objek target I/O ditutup. Driver tidak dapat mengirim permintaan I/O ke target I/O kecuali ditetapkan WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE atau WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. Selain itu, kerangka kerja membatalkan permintaan yang tidak diolah dalam antrean internal objek target I/O. Status ini tersedia mulai dari KMDF versi 1.11.

Ditutup untuk Hapus-Kueri
Target I/O jarak jauh ditutup sementara karena perangkatnya mungkin akan segera dihapus.

Ditutup
Target I/O ditutup dan tidak dapat dimulai atau dihentikan.

Dihapus
Perangkat target I/O telah dihapus.

Enumerasi WDF_IO_TARGET_STATE menentukan nilai yang mewakili status ini. Driver Anda dapat memanggil WdfIoTargetGetState untuk mendapatkan status target I/O.

Status Target I/O Lokal

Kerangka kerja secara otomatis membuka dan memulai target I/O lokal.

Jika perlu, driver dapat memanggil WdfIoTargetStop untuk menghentikan target I/O lokal untuk sementara waktu dan memanggil WdfIoTargetStart untuk memulai ulang. Misalnya, driver mungkin menghentikan target I/O lokal jika mendeteksi kondisi kesalahan sementara lalu memulai ulang target I/O jika kondisi kesalahan diperbaiki.

Di KMDF versi 1.11 dan yang lebih baru, driver dapat memanggil WdfIoTargetPurge untuk sementara mencegah permintaan I/O dikirim ke target I/O lokal, dan untuk membatalkan permintaan yang tidak diolah dalam antrean target. Misalnya, sebagai bagian dari pembersihan handel file, driver mungkin menghapus menyeluruh target I/O lokal untuk memastikan bahwa semua permintaan yang dikirim ke driver dibatalkan.

Jika perangkat target I/O lokal dihapus, kerangka kerja secara otomatis menghentikan dan menutup target I/O dan membatalkan semua permintaan I/O yang ada dalam antrean target. Kerangka kerja memberi tahu driver bahwa perangkat tidak lagi tersedia dengan memanggil fungsi panggilan balik peristiwa objek perangkat. Untuk informasi selengkapnya tentang fungsi panggilan balik ini, lihat Skenario PnP dan Manajemen Daya.

Status Target I/O Jarak Jauh

Driver harus memanggil WdfIoTargetOpen untuk membuka target I/O jarak jauh. Ketika driver membuka target I/O jarak jauh, kerangka kerja secara otomatis memulai target I/O.

Jika perlu, driver dapat memanggil WdfIoTargetStop untuk menghentikan target I/O jarak jauh untuk sementara waktu dan memanggil WdfIoTargetStart untuk memulai ulang.

Di KMDF versi 1.11 dan yang lebih baru, driver dapat memanggil WdfIoTargetPurge untuk sementara mencegah permintaan I/O dikirim ke target I/O jarak jauh, dan untuk membatalkan permintaan yang tidak diolah dalam antrean target.

Jika perangkat target I/O jarak jauh dihapus, kerangka kerja secara otomatis menghentikan dan menutup target I/O dan membatalkan semua permintaan I/O yang ada dalam antrean target, kecuali driver mendaftarkan fungsi panggilan balik peristiwa berikut:

EvtIoTargetQueryRemove
Memberi tahu driver bahwa perangkat target I/O jarak jauh mungkin dihapus. Driver Anda harus memanggil WdfIoTargetCloseForQueryRemove jika Anda ingin driver mengizinkan penghapusan perangkat.

EvtIoTargetRemoveComplete
Memberi tahu driver bahwa perangkat target I/O jarak jauh telah dihapus. Fungsi panggilan balik ini harus memanggil WdfIoTargetClose.

EvtIoTargetRemoveCanceled
Memberi tahu driver bahwa upaya untuk menghapus perangkat target I/O jarak jauh telah dibatalkan. Fungsi panggilan balik ini harus memanggil WdfIoTargetOpen, dan driver biasanya memanggil WDF_IO_TARGET_OPEN_PARAMS_INIT_REOPEN untuk menginisialisasi fungsi WDF_IO_TARGET_OPEN_PARAMS_INIT.

Jika driver telah selesai menggunakan target I/O jarak jauh dan tidak akan menggunakan target lagi, dan target tidak memiliki objek permintaan anak yang masih tertunda, driver dapat memanggil WdfObjectDelete tanpa terlebih dahulu memanggil WdfIoTargetClose. Jika target memiliki objek permintaan anak yang masih tertunda, driver harus memanggil WdfIoTargetClose sebelum dapat memanggil WdfObjectDelete dengan aman.