IWDFIoRequest2::StopAcknowledge method (wudfddi.h)

[Peringatan: UMDF 2 adalah versi terbaru UMDF dan pengganti 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. Untuk informasi selengkapnya, lihat Mulai menggunakan UMDF.]

Metode StopAcknowledge menginformasikan kerangka kerja bahwa driver telah berhenti memproses permintaan I/O tertentu.

Sintaks

void StopAcknowledge(
  [in] BOOL Requeue
);

Parameter

[in] Requeue

Nilai Boolean yang, jika TRUE, menyebabkan kerangka kerja mengantre ulang permintaan ke dalam antrean sehingga kerangka kerja akan mengirimkannya ke driver lagi. Jika FALSE, kerangka kerja tidak mengantre ulang permintaan. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

Nilai kembali

Tidak ada

Keterangan

Jika driver mendaftarkan fungsi panggilan balik IQueueCallbackIoStop::OnIoStop untuk antrean I/O, kerangka kerja memanggilnya ketika perangkat yang mendasari antrean meninggalkan status berfungsi (D0). Kerangka kerja memanggil fungsi panggilan balik ini untuk setiap permintaan I/O yang dimiliki driver pada saat antrean dihentikan. Driver harus menyelesaikan, membatalkan, atau menunda pemrosesan setiap permintaan dengan melakukan salah satu hal berikut:

  • Jika driver memiliki permintaan, driver dapat memanggil IWDFIoRequest::Complete untuk menyelesaikan atau membatalkan permintaan.
  • Jika driver telah meneruskan permintaan ke target I/O, driver dapat memanggil IWDFIoRequest::CancelSentRequest untuk mencoba membatalkan permintaan.
  • Jika driver menunda pemrosesan permintaan, driver harus memanggil StopAcknowledge.
Jika driver Anda memanggil StopAcknowledge, driver harus memanggil metode ini dari dalam fungsi panggilan balik IQueueCallbackIoStop::OnIoStop .

Jika driver tidak memanggil IWDFIoRequest::Complete atau StopAcknowledge untuk setiap permintaan yang diterima fungsi panggilan balik IQueueCallbackIoStop::OnIoStop , kerangka kerja tidak mengizinkan perangkat untuk meninggalkan status berfungsi (D0). Berpotensi, tindakan ini dapat mencegah sistem memasuki status hibernasi atau status daya sistem rendah lainnya.

Ketika fungsi panggilan balik IQueueCallbackIoStop::OnIoStop driver memanggil StopAcknowledge, fungsi ini dapat mengatur parameter Antrean Ulang ke TRUE atau FALSE:

  • Mengatur Antrean Ulang ke TRUE menyebabkan kerangka kerja menempatkan permintaan kembali ke antrean I/O-nya.

    Ketika perangkat yang mendasar kembali ke status kerjanya (D0), kerangka kerja akan mengirimkan kembali permintaan ke driver.

  • Mengatur Antrean Ulang ke FALSE menyebabkan kepemilikan permintaan tetap ada pada driver. Driver harus berhenti melakukan pemrosesan I/O apa pun yang memerlukan akses perangkat keras.

    Ketika perangkat yang mendasarinya kembali ke status kerja (D0), kerangka kerja akan memanggil fungsi panggilan balik IQueueCallbackIoResume::OnIoResume driver, sehingga driver dapat terus memproses permintaan.

Jika sebelumnya driver memanggil IWDFIoRequest::MarkCancelable, driver harus memanggil IWDFIoRequest::UnmarkCancelable sebelum memanggil StopAcknowledge dengan Requeue diatur ke TRUE.

Sebelum memanggil StopAcknowledge, fungsi panggilan balik IQueueCallbackIoStop::OnIoStop driver harus menghentikan semua pemrosesan permintaan I/O yang memerlukan akses perangkat yang mendasarinya, karena perangkat akan memasuki status daya rendah.

Contoh

Contoh kode berikut adalah fungsi panggilan balik IQueueCallbackIoStop::OnIoStop yang memeriksa untuk melihat apakah permintaan yang diterima dapat dibatalkan dan, jika ya, memanggil IWDFIoRequest::UnmarkCancelable. Jika IWDFIoRequest::UnmarkCancelable mengembalikan HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED), contoh hanya kembali karena fungsi panggilan balik IRequestCallbackCancel::OnCancel driver akan menangani permintaan. Jika tidak, contoh memanggil StopAcknowledge dan menentukan FALSE sehingga kerangka kerja pada akhirnya akan memanggil fungsi panggilan balik IQueueCallbackIoResume::OnIoResume driver.

void
CMyReadWriteQueue::OnIoStop(
    __in IWDFIoQueue*  pWdfQueue,
    __in IWDFIoRequest*  pWdfRequest,
    __in ULONG  ActionFlags
    )
{ HRESULT status;

    if (ActionFlags & WdfRequestStopRequestCancelable) {
        status = pWdfRequest->UnmarkCancelable();
        if (status == HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED)) {
        return;
        }
    }
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    r2->StopAcknowledge(FALSE);
}

Persyaratan

Persyaratan Nilai
Akhir dukungan Tidak tersedia di UMDF 2.0 dan yang lebih baru.
Target Platform Desktop
Versi UMDF minimum 1.9
Header wudfddi.h (termasuk Wudfddi.h)
DLL WUDFx.dll

Lihat juga

IQueueCallbackIoResume::OnIoResume

IQueueCallbackIostop::OnIoStop

IWDFIoRequest2