Fungsi WdfRequestRetrieveInputBuffer (wdfrequest.h)

[Berlaku untuk KMDF dan UMDF]

Metode WdfRequestRetrieveInputBuffer mengambil buffer input permintaan I/O.

Sintaks

NTSTATUS WdfRequestRetrieveInputBuffer(
  [in]            WDFREQUEST Request,
                  size_t     MinimumRequiredLength,
  [out]           PVOID      *Buffer,
  [out, optional] size_t     *Length
);

Parameter

[in] Request

Handel ke objek permintaan kerangka kerja.

MinimumRequiredLength

Ukuran buffer minimum, dalam byte, yang dibutuhkan driver untuk memproses permintaan I/O.

[out] Buffer

Penunjuk ke lokasi yang menerima alamat buffer.

[out, optional] Length

Penunjuk ke lokasi yang menerima ukuran buffer, dalam byte. Parameter ini bersifat opsional dan dapat berupa NULL.

Nilai kembali

WdfRequestRetrieveInputBuffer 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_BUFFER_TOO_SMALL
Panjang buffer input adalah nol, atau parameter MinimumRequiredSize menentukan ukuran buffer yang lebih besar dari ukuran aktual buffer.
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_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 WdfRequestRetrieveInputBuffer 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 WdfRequestRetrieveInputBuffer mengambil buffer input untuk permintaan I/O yang menggunakan metode I/O yang di-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, WdfRequestRetrieveInputBuffer juga mendukung permintaan I/O yang tidak menggunakan buffer atau I/O langsung.

Jika WdfRequestRetrieveInputBuffer mengembalikan STATUS_SUCCESS, driver menerima alamat dan, secara opsional, ukuran buffer input.

Driver dapat mengakses buffer yang diambil sampai menyelesaikan permintaan I/O yang diwakili parameter Permintaan .

Alih-alih memanggil WdfRequestRetrieveInputBuffer, driver dapat memanggil WdfRequestRetrieveInputMemory, yang membuat objek memori kerangka kerja yang mewakili buffer.

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

Contoh

Contoh kode berikut adalah bagian dari fungsi panggilan balik EvtIoDeviceControl driver sampel Serial. Jika kode kontrol I/O IOCTL_SERIAL_SET_TIMEOUT, driver mendapatkan nilai batas waktu baru dari buffer input permintaan I/O.

VOID
SerialEvtIoDeviceControl(
    IN WDFQUEUE     Queue,
    IN WDFREQUEST   Request,
    IN size_t       OutputBufferLength,
    IN size_t       InputBufferLength,
    IN ULONG        IoControlCode
    )
{
    PVOID  buffer;
    size_t  bufSize;

    switch (IoControlCode) {
...

        case IOCTL_SERIAL_SET_TIMEOUTS: {

            PSERIAL_TIMEOUTS NewTimeouts;

            Status = WdfRequestRetrieveInputBuffer(
                                                   Request,
                                                   sizeof(SERIAL_TIMEOUTS),
                                                   &buffer,
                                                   &bufSize
                                                   );
            if (!NT_SUCCESS(Status)) {
                break;
            }

            NewTimeouts =(PSERIAL_TIMEOUTS)buffer;
    }
...
}

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), BufAfterReqCompletedWrite(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), InputBufferAPI(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Lihat juga

WdfRequestRetrieveInputMemory

WdfRequestRetrieveOutputBuffer

WdfUsbTargetDeviceRetrieveConfigDescriptor