Fungsi WdfRequestRetrieveInputMemory (wdfrequest.h)

[Berlaku untuk KMDF dan UMDF]

Metode WdfRequestRetrieveInputMemory mengambil handel ke objek memori kerangka kerja yang mewakili buffer input permintaan I/O.

Sintaks

NTSTATUS WdfRequestRetrieveInputMemory(
  [in]  WDFREQUEST Request,
  [out] WDFMEMORY  *Memory
);

Parameter

[in] Request

Handel ke objek permintaan kerangka kerja.

[out] Memory

Penunjuk ke lokasi yang menerima handel ke objek memori kerangka kerja.

Nilai kembali

WdfRequestRetrieveInputMemory mengembalikan STATUS_SUCCESS jika operasi berhasil. Jika tidak, metode ini mungkin mengembalikan salah satu nilai berikut:

Menampilkan kode Deskripsi
STATUS_INVALID_PARAMETER
Parameter input tidak valid.
STATUS_INVALID_DEVICE_REQUEST
Jenis permintaan tidak valid atau permintaan tidak menggunakan I/O buffer atau langsung. Untuk informasi selengkapnya tentang metode yang didukung untuk mengakses buffer data, lihat bagian Keterangan berikut ini.
STATUS_INTERNAL_ERROR
Permintaan telah selesai.
STATUS_BUFFER_TOO_SMALL
Panjang buffer input adalah nol.
STATUS_INSUFFICIENT_RESOURCES
Memori tidak cukup.
 

Metode ini mungkin juga mengembalikan nilai NTSTATUS lainnya.

Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.

Keterangan

Buffer input permintaan berisi informasi, seperti data yang akan ditulis ke disk, yang disediakan oleh asal permintaan. Driver Anda dapat memanggil WdfRequestRetrieveInputMemory untuk mendapatkan buffer input untuk permintaan tulis atau permintaan kontrol I/O perangkat, tetapi tidak untuk permintaan baca (karena permintaan baca tidak menyediakan data input).

Metode WdfRequestRetrieveInputMemory mengambil buffer input untuk permintaan I/O yang menggunakan metode I/O buffer atau metode I/O langsung untuk mengakses buffer data. Jika kode kontrol I/O permintaan IRP_MJ_INTERNAL_DEVICE_CONTROL, atau jika permintaan berasal dari driver mode kernel lain, WdfRequestRetrieveInputMemory juga mendukung permintaan I/O yang tidak menggunakan buffer atau I/O langsung.

Jika WdfRequestRetrieveInputMemory mengembalikan STATUS_SUCCESS, driver menerima handel ke objek memori kerangka kerja yang mewakili buffer input. Untuk mengakses buffer, driver harus memanggil WdfMemoryGetBuffer.

Driver dapat mengakses objek memori kerangka kerja yang diambil sampai menyelesaikan permintaan I/O yang diwakili parameter Permintaan .

Alih-alih memanggil WdfRequestRetrieveInputMemory, driver dapat memanggil WdfRequestRetrieveInputBuffer, yang mengambil alamat dan panjang buffer.

Untuk informasi selengkapnya tentang WdfRequestRetrieveInputMemory, lihat Mengakses Buffer Data di Driver Framework-Based.

Contoh

Contoh kode berikut menunjukkan bagaimana fungsi panggilan balik EvtIoWrite dapat memperoleh handel ke objek memori kerangka kerja yang mewakili buffer input permintaan tulis. Contohnya kemudian memformat dan mengirim permintaan tulis ke target I/O USB.

VOID 
MyEvtIoWrite(
    IN WDFQUEUE  Queue,
    IN WDFREQUEST  Request,
    IN size_t  Length
    )
{
    NTSTATUS  status;
    WDFUSBPIPE  pipe;
    WDFMEMORY  reqMemory;
    PDEVICE_CONTEXT  pDeviceContext;

    //
    // The driver previously stored a pipe handle in 
    // the device object's context space.
    //
    pDeviceContext = GetDeviceContext(WdfIoQueueGetDevice(Queue));
    pipe = pDeviceContext->BulkWritePipe;

    //
    // Get input memory.
    //
    status = WdfRequestRetrieveInputMemory(
                                           Request,
                                           &reqMemory
                                           );
    if(!NT_SUCCESS(status)){
        goto Exit;
    }

    //
    // Format the request.
    //
    status = WdfUsbTargetPipeFormatRequestForWrite(
                                          pipe,
                                          Request,
                                          reqMemory,
                                          NULL
                                          );
    if (!NT_SUCCESS(status)) {
        goto Exit;
    }
    WdfRequestSetCompletionRoutine(
                                   Request,
                                   EvtRequestWriteCompletionRoutine,
                                   pipe
                                   );

    //
    // Send the request.
    //
    if (WdfRequestSend(
                       Request,
                       WdfUsbTargetPipeGetIoTarget(pipe),
                       WDF_NO_SEND_OPTIONS
                       ) == FALSE) {
        status = WdfRequestGetStatus(Request);
        goto Exit;
    }
Exit:
    //
    // Complete the request now if an error occurred.
    //
    if (!NT_SUCCESS(status)) {
        WdfRequestCompleteWithInformation(
                                          Request,
                                          status,
                                          0
                                          );
    }
    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 DriverCreate(kmdf), InputBufferAPI(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MemAfterReqCompletedIntIoctl(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctl(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedRead(kmdf), MemAfterReqCompletedWrite(kmdf) , MemAfterReqCompletedWriteA(kmdf)

Lihat juga

WdfMemoryGetBuffer

WdfRequestRetrieveInputBuffer

WdfRequestRetrieveOutputMemory