Bagikan melalui


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(&params);

    WdfRequestGetParameters(
                            Request,
                            &params
                            );

    //
    // 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

Persyaratan Nilai
Target Platform Universal
Versi KMDF minimum 1,0
Versi UMDF minimum 2.0
Header wdfrequest.h (termasuk Wdf.h)
Pustaka Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Aturan kepatuhan DDI BufAfterReqCompletedIntIoctl(kmdf), BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctl(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedRead(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWrite(kmdf), BufAfterReqCompletedWriteA(kmdf), CompleteCanceledReq(kmdf), DeferredRequestCompleted(kmdf), DoubleCompletion(kmdf), DoubleCompletionLocal(kmdf), DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), EvtSurpriseRemoveNoRequestComplete(kmdf), InvalidReqAccess(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MarkCancOnCancReqLocal(kmdf), MdlAfterReqCompletedIntIoctl(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWrite(kmdf), MdlAfterReqCompletedWriteA(kmdf), MemAfterReqCompletedIntIoctl(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctl(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedRead(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWrite(kmdf), MemAfterReqCompletedWriteA(kmdf), NoCancelFromEvtSurpriseRemove(kmdf), ReqDelete(kmdf), ReqIsCancOnCancReq(kmdf), ReqNotCanceledLocal(kmdf), ReqSendFail(kmdf), RequestCompleted(kmdf), RequestCompletedLocal(kmdf)

Lihat juga

WDF_REQUEST_PARAMETERS

WDF_REQUEST_PARAMETERS_INIT

WdfObjectReference

WdfRequestCompleteWithInformation

WdfRequestCompleteWithPriorityBoost

WdfRequestGetStatus