IWDFIoQueue::RetrieveNextRequest 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 RetrieveNextRequest mengambil permintaan I/O berikutnya dari antrean I/O.
Sintaks
HRESULT RetrieveNextRequest(
[out] IWDFIoRequest **ppRequest
);
Parameter
[out] ppRequest
Penunjuk ke buffer yang menerima penunjuk ke antarmuka IWDFIoRequest untuk objek permintaan berikutnya, atau menerima NULL jika antrean kosong atau jika permintaan berikutnya tidak ditemukan.
Nilai kembali
RetrieveNextRequest mengembalikan salah satu nilai berikut:
Menampilkan kode | Deskripsi |
---|---|
|
Permintaan I/O berikutnya berhasil diambil dari antrean I/O. |
|
Antrean tidak mengirimkan permintaan. Situasi ini terjadi jika perangkat mengalami transisi status daya dan semua antrean dihentikan dari permintaan pengiriman atau jika driver secara eksplisit disebut IWDFIoQueue::Stop untuk menghentikan pengiriman permintaan. Situasi ini juga dapat terjadi jika driver mencoba menghapus permintaan dari antrean manual yang dikelola daya dan yang dimatikan atau jika antrean dijeda. |
|
Tidak ada permintaan dalam antrean. |
|
Panggilan dilakukan untuk mengambil permintaan dari antrean paralel. |
RetrieveNextRequest mungkin juga mengembalikan nilai HRESULT lainnya.
Keterangan
Jika driver mengonfigurasi antrean I/O untuk pengiriman manual permintaan I/O, driver dapat memanggil metode RetrieveNextRequest untuk mendapatkan permintaan berikutnya dari antrean. Untuk informasi selengkapnya tentang mengirimkan permintaan I/O secara manual, lihat Mengonfigurasi Mode Pengiriman untuk Antrean I/O.
Jika driver mengonfigurasi antrean I/O untuk pengiriman permintaan I/O berurutan, driver masih dapat memanggil metode RetrieveNextRequest untuk mendapatkan permintaan berikutnya dari antrean tanpa menerima kesalahan. Meskipun kerangka kerja mengizinkan driver untuk memanggil RetrieveNextRequest untuk mengambil permintaan dari antrean berurutan, driver hanya boleh memanggil RetrieveNextRequest sebelum driver menyelesaikan permintaan saat ini. Jika tidak, jika pembalap mencoba memanggil RetrieveNextRequest setelah pembalap menyelesaikan permintaan saat ini, kondisi balapan mungkin terjadi. Kondisi balapan ini terjadi antara pengiriman otomatis kerangka kerja permintaan berikutnya dari antrean berurutan dan panggilan driver ke RetrieveNextRequest untuk mengambil permintaan berikutnya.
Contoh
Contoh kode berikut, yang berasal dari driver sampel umdf_fx2 , melakukan polling antrean untuk permintaan selama permintaan dapat diambil. Kode pertama-tama memverifikasi apakah permintaan dikaitkan dengan objek file tertentu.
VOID
CMyDevice::ServiceSwitchChangeQueue(
__in SWITCH_STATE NewState,
__in HRESULT CompletionStatus,
__in_opt IWDFFile *SpecificFile
)
{
IWDFIoRequest *fxRequest;
HRESULT enumHr = S_OK;
do {
HRESULT hr;
//
// Get the next request.
//
if (NULL != SpecificFile) {
enumHr = m_SwitchChangeQueue->RetrieveNextRequestByFileObject(
SpecificFile,
&fxRequest
);
}
else {
enumHr = m_SwitchChangeQueue->RetrieveNextRequest(&fxRequest);
}
//
// If a request was retrieved, complete it.
//
if (S_OK == enumHr) {
if (S_OK == CompletionStatus) {
IWDFMemory *fxMemory;
//
// Copy the result to the request buffer.
//
fxRequest->GetOutputMemory(&fxMemory);
hr = fxMemory->CopyFromBuffer(0,
&NewState,
sizeof(SWITCH_STATE));
fxMemory->Release();
}
else {
hr = CompletionStatus;
}
//
// Complete the request with the copy or
// completion status.
//
if (S_OK == hr) {
fxRequest->CompleteWithInformation(hr,
sizeof(SWITCH_STATE));
}
else {
fxRequest->Complete(hr);
}
fxRequest->Release();
}
}
while (S_OK == enumHr);
}
Persyaratan
Persyaratan | Nilai |
---|---|
Akhir dukungan | Tidak tersedia di UMDF 2.0 dan yang lebih baru. |
Target Platform | Desktop |
Versi UMDF minimum | 1,5 |
Header | wudfddi.h (termasuk Wudfddi.h) |
DLL | WUDFx.dll |
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