Fungsi WdfRequestRetrieveOutputMemory (wdfrequest.h)
[Berlaku untuk KMDF dan UMDF]
Metode WdfRequestRetrieveOutputMemory mengambil handel ke objek memori kerangka kerja yang mewakili buffer output permintaan I/O.
Sintaks
NTSTATUS WdfRequestRetrieveOutputMemory(
[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
WdfRequestRetrieveOutputMemory mengembalikan STATUS_SUCCESS jika operasi berhasil. Jika tidak, metode ini mungkin mengembalikan salah satu nilai berikut:
Menampilkan kode | Deskripsi |
---|---|
|
Parameter input tidak valid. |
|
Jenis permintaan tidak valid atau permintaan tidak menggunakan buffer atau I/O langsung. Untuk informasi selengkapnya tentang metode yang didukung untuk mengakses buffer data, lihat bagian Keterangan berikut ini. |
|
Permintaan telah selesai. |
|
Panjang buffer output adalah nol. |
|
Memori tidak cukup. |
Metode ini mungkin juga mengembalikan nilai NTSTATUS lainnya.
Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.
Keterangan
Buffer output permintaan menerima informasi, seperti data dari disk, yang disediakan driver kepada penolong permintaan. Driver Anda dapat memanggil WdfRequestRetrieveOutputMemory 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 WdfRequestRetrieveOutputMemory mengambil buffer output 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, WdfRequestRetrieveOutputMemory juga mendukung permintaan I/O yang tidak menggunakan buffer atau I/O langsung.
Jika WdfRequestRetrieveOutputMemory mengembalikan STATUS_SUCCESS, driver menerima handel ke objek memori kerangka kerja yang mewakili buffer output. 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 WdfRequestRetrieveOutputMemory, driver dapat memanggil WdfRequestRetrieveOutputBuffer, yang mengambil alamat dan panjang buffer.
Untuk informasi selengkapnya tentang WdfRequestRetrieveOutputMemory, lihat Mengakses Buffer Data di driver Framework-Based.
Contoh
Contoh kode berikut menunjukkan bagaimana fungsi panggilan balik EvtIoRead dapat memperoleh handel ke objek memori kerangka kerja yang mewakili buffer output permintaan baca. Contoh kemudian memformat dan mengirim permintaan baca ke target I/O USB.
VOID
MyEvtIoRead(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t Length
)
{
WDFUSBPIPE pipe;
NTSTATUS status;
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->BulkReadPipe;
//
// Get output memory.
//
status = WdfRequestRetrieveOutputMemory(
Request,
&reqMemory
);
if(!NT_SUCCESS(status)){
goto Exit;
}
//
// Format the request.
//
status = WdfUsbTargetPipeFormatRequestForRead(
pipe,
Request,
reqMemory,
NULL
);
if (!NT_SUCCESS(status)) {
goto Exit;
}
WdfRequestSetCompletionRoutine(
Request,
EvtRequestReadCompletionRoutine,
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), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MemAfterReqCompletedIntIoctl(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctl(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedRead(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWrite(kmdf), OutputBufferAPI(kmdf) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk