Fungsi WdfRequestComplete (wdfrequest.h)
[Berlaku untuk KMDF dan UMDF]
Metode WdfRequestComplete menyelesaikan permintaan I/O tertentu dan memberikan status penyelesaian.
Sintaks
void WdfRequestComplete(
[in] WDFREQUEST Request,
[in] NTSTATUS Status
);
Parameter
[in] Request
Handel ke objek permintaan kerangka kerja yang mewakili permintaan I/O yang sedang diselesaikan.
[in] Status
Nilai NTSTATUS yang mewakili status penyelesaian permintaan. Nilai status yang valid termasuk, tetapi tidak terbatas pada, berikut ini:
STATUS_SUCCESS
Driver berhasil menyelesaikan permintaan.
STATUS_CANCELLED
Driver membatalkan permintaan.
STATUS_UNSUCCESSFUL
Driver mengalami kesalahan saat memproses permintaan.
Nilai kembali
Tidak ada
Keterangan
Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.
Setelah driver memanggil WdfRequestComplete, driver tingkat yang lebih tinggi pada tumpukan driver dapat memanggil WdfRequestGetStatus untuk mendapatkan nilai status penyelesaian yang ditentukan untuk parameter Status . Biasanya, driver memanggil WdfRequestGetStatus dari dalam fungsi panggilan balik CompletionRoutine .
Setelah panggilan ke WdfRequestComplete kembali, handel permintaan tidak lagi valid kecuali driver telah memanggil WdfObjectReference untuk menambahkan satu atau beberapa jumlah referensi tambahan ke objek permintaan. Perhatikan bahwa setelah WdfRequestComplete kembali, driver tidak boleh mencoba mengakses struktur IRP WDM terkait, bahkan jika telah disebut WdfObjectReference. Persyaratan ini diperluas untuk mengakses struktur IRP WDM terkait dengan memanggil metode pada WDFREQUEST, seperti WdfRequestRetrieveOutputBuffer atau WdfRequestRetrieveInputBuffer.
Setelah driver memanggil WdfRequestComplete, kerangka kerja memanggil fungsi EvtCleanupCallback driver untuk permintaan tersebut, jika driver telah menyediakannya.
Alih-alih memanggil WdfRequestComplete, driver dapat memanggil WdfRequestCompleteWithInformation atau WdfRequestCompleteWithPriorityBoost. Lihat Keterangan WdfRequestCompleteWithInformation untuk informasi selengkapnya.
Ketika driver Anda memanggil WdfRequestComplete, kerangka kerja menyediakan nilai default yang digunakan sistem untuk meningkatkan prioritas run-time utas yang meminta operasi I/O. Untuk informasi tentang nilai peningkatan prioritas default, lihat Menentukan Peningkatan Prioritas Saat Menyelesaikan Permintaan I/O. Driver Anda dapat memanggil WdfRequestCompleteWithPriorityBoost untuk mengambil alih nilai peningkatan prioritas default.
Untuk informasi selengkapnya tentang memanggil WdfRequestComplete, lihat Menyelesaikan Permintaan I/O.
Contoh
Contoh kode berikut adalah bagian dari handler permintaan. Penangan permintaan hanya menerima permintaan baca dan tulis, dan menyelesaikan setiap permintaan dengan status kesalahan jika jenis permintaan tidak dibaca atau ditulis.
VOID
MyEvtIoDefault(
IN WDFQUEUE Queue,
IN WDFREQUEST Request
)
{
WDF_REQUEST_PARAMETERS params;
WDF_DMA_DIRECTION direction;
...
WDF_REQUEST_PARAMETERS_INIT(¶ms);
WdfRequestGetParameters(
Request,
¶ms
);
//
// Validate and gather parameters.
//
switch (params.Type) {
case WdfRequestTypeRead:
length = params.Parameters.Read.Length;
direction = WdfDmaDirectionReadFromDevice;
break;
case WdfRequestTypeWrite:
length = params.Parameters.Write.Length;
direction = WdfDmaDirectionWriteToDevice;
break;
default:
WdfRequestComplete(
Request,
STATUS_INVALID_DEVICE_REQUEST
);
return;
}
...
}
Persyaratan
Lihat juga
WdfRequestCompleteWithInformation