Bagikan melalui


Mengontrol Status Target I/O Umum di UMDF

Peringatan

UMDF 2 adalah versi terbaru UMDF dan supersedes UMDF 1. Semua driver UMDF baru harus ditulis menggunakan UMDF 2. Tidak ada fitur baru yang ditambahkan ke UMDF 1 dan ada dukungan terbatas untuk UMDF 1 pada versi Windows 10 yang lebih baru. Driver Universal Windows harus menggunakan UMDF 2.

Sampel UMDF 1 yang diarsipkan dapat ditemukan di Windows 11, versi 22H2 - Pembaruan Sampel Driver Mei 2022.

Untuk informasi selengkapnya, lihat Mulai menggunakan UMDF.

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

Mulai
Target I/O terbuka (yaitu, tersedia untuk driver UMDF) dan driver dapat mengirim permintaan I/O ke dalamnya. Kerangka kerja mengirimkan permintaan ke driver yang sesuai.

Berhenti
Target I/O terbuka, tetapi driver UMDF tidak dapat mengirim permintaan I/O ke target I/O kecuali driver meneruskan bendera WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE ke parameter Bendera dalam panggilan ke metode IWDFIoRequest::Send .

Kerangka kerja berhenti mengirimkan permintaan ke driver yang sesuai.

Ditutup untuk Hapus-Kueri
Target I/O 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.

Status Target I/O Lokal

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

Jika perlu, driver dapat memanggil IWDFIoTargetStateManagement::Stop untuk menghentikan target I/O lokal untuk sementara waktu dan memanggil IWDFIoTargetStateManagement::Start untuk memulai ulang. Misalnya, driver mungkin menghentikan target I/O lokal jika mendeteksi kondisi kesalahan sementara lalu menghidupkan ulang target I/O jika kondisi kesalahan dikoreksi.

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 Power Management di UMDF.

Driver dapat memanggil IWDFIoTargetStateManagement::GetState untuk mendapatkan status target I/O lokal saat ini.

Status Target I/O Jarak Jauh

Driver harus memanggil IWDFRemoteTarget::OpenFileByName atau IWDFRemoteTarget::OpenRemoteInterface 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 IWDFRemoteTarget::Stop untuk menghentikan target I/O jarak jauh untuk sementara waktu dan memanggil IWDFRemoteTarget::Start untuk memulai ulang.

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:

IRemoteTargetCallbackRemoval::OnRemoteTargetQueryRemove
Memberi tahu driver bahwa perangkat target I/O jarak jauh mungkin dihapus. Driver Anda harus memanggil IWDFRemoteTarget::CloseForQueryRemove jika Anda ingin driver mengizinkan penghapusan perangkat.

IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveComplete
Memberi tahu driver bahwa perangkat target I/O jarak jauh telah dihapus. Fungsi panggilan balik ini harus memanggil IWDFRemoteTarget::Close.

IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveCanceled
Memberi tahu driver bahwa upaya untuk menghapus perangkat target I/O jarak jauh telah dibatalkan. Jika Anda ingin driver terus menggunakan target, driver harus memanggil IWDFRemoteTarget::Buka kembali. Biasanya, driver memanggil Buka kembali dari dalam fungsi panggilan balik OnRemoteTargetRemoveCanceled , tetapi Buka kembali sebagai gantinya dapat dipanggil setelah pengembalian OnRemoteTargetRemoveCanceled .

Driver dapat memanggil IWDFRemoteTarget::GetState untuk mendapatkan status target I/O jarak jauh saat ini.