Bagikan melalui


Metode IWDFIoRequest2::RetrieveOutputMemory (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 RetrieveOutputMemory mengambil antarmuka IWDFMemory dari objek memori kerangka kerja yang mewakili buffer output permintaan I/O.

Sintaks

HRESULT RetrieveOutputMemory(
  [out] IWDFMemory **Memory
);

Parameter

[out] Memory

Alamat lokasi yang menerima pointer ke antarmuka IWDFMemory dari objek memori UMDF.

Nilai kembali

RetrieveOutputMemory mengembalikan S_OK jika operasi berhasil. Jika tidak, metode ini dapat mengembalikan nilai berikut:

Menampilkan kode Deskripsi
HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER)
Permintaan I/O tidak menyediakan buffer input.
E_OUTOFMEMORY
Tidak tersedia cukup memori untuk mengambil buffer. Driver harus menyelesaikan permintaan dengan nilai status kesalahan.
 

Metode ini mungkin mengembalikan salah satu nilai lain yang dikandung Winerror.h.

Keterangan

Buffer output permintaan menerima informasi, seperti data dari disk, yang disediakan driver kepada penolong permintaan. Driver Anda dapat memanggil RetrieveOutputMemory untuk mendapatkan buffer output untuk permintaan baca atau permintaan kontrol I/O perangkat, tetapi tidak untuk permintaan tulis (karena permintaan tulis tidak menyediakan data output).

Metode RetrieveOutputMemory mengambil buffer output untuk permintaan I/O yang menggunakan I/O yang di-buffer atau metode I/O langsung untuk mengakses buffer data.

Jika RetrieveOutputMemory mengembalikan S_OK, driver menerima pointer ke antarmuka IWDFMemory dari objek memori UMDF yang mewakili buffer output. Untuk mengakses buffer, driver harus memanggil IWDFMemory::GetDataBuffer.

Driver dapat mengakses objek memori kerangka kerja yang diambil hingga menyelesaikan permintaan I/O. Sebelum driver menyelesaikan permintaan I/O, driver harus memanggil IWDFMemory::Release.

Alih-alih memanggil RetrieveOutputMemory, driver dapat memanggil IWDFIoRequest2::RetrieveOutputBuffer, yang mengambil alamat dan panjang buffer.

Untuk informasi selengkapnya tentang mengakses buffer data permintaan I/O, lihat Mengakses Buffer Data di Driver UMDF-Based.

Contoh

Contoh kode berikut menunjukkan bagaimana fungsi panggilan balik IQueueCallbackRead::OnRead dapat memperoleh antarmuka IWDFMemory dari objek memori kerangka kerja yang mewakili buffer output permintaan baca. Contoh kemudian memformat dan mengirim permintaan baca ke target I/O USB.

VOID
STDMETHODCALLTYPE
  CMyQueue::OnRead(
     __in IWDFIoQueue *pWdfQueue,
     __in IWDFIoRequest *pWdfRequest,
     __in SIZE_T BytesToRead
     )
{
    HRESULT hr = S_OK;
    IWDFMemory * pOutputMemory = NULL;

    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    r2->RetrieveOutputMemory(&pOutputMemory);
    if (FAILED(hr)) goto Exit;

    hr = m_Device->GetInputPipe()->FormatRequestForRead(pWdfRequest,
                                                        NULL,
                                                        pOutputMemory,
                                                        NULL,
                                                        NULL);
Exit:
    if (FAILED(hr))
    {
        pWdfRequest->Complete(hr);
    }
    else
    {
        ForwardFormattedRequest(pWdfRequest, m_Device->GetInputPipe());
    }
    SAFE_RELEASE(pOutputMemory);
    return;
}

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

IWDFIoRequest2

IWDFIoRequest2::RetrieveInputBuffer

IWDFIoRequest2::RetrieveInputMemory

IWDFIoRequest2::RetrieveOutputBuffer

IWDFIoRequest::GetInputMemory

IWDFIoRequest::GetOutputMemory