Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
[Hanya berlaku untuk KMDF]
Driver untuk perangkat DMA terkadang harus mengalokasikan ruang buffer yang dapat diakses oleh perangkat dan driver. Misalnya, perangkat mungkin menulis informasi transfer, seperti jumlah byte, ke ruang buffer ini dan driver dapat membacanya untuk menentukan jumlah byte yang ditransfer. Jenis ruang buffer ini disebut buffer umum.
Untuk mengalokasikan buffer umum, fungsi panggilan balik EvtDriverDeviceAdd driver Anda:
Memanggil WdfDmaEnablerCreate untuk membuat objek pengaktif DMA.
Memanggil WdfCommonBufferCreate atau WdfCommonBufferCreateWithConfig untuk membuat buffer.
Memanggil WdfCommonBufferGetAlignedLogicalAddress untuk mendapatkan alamat logis buffer, yang dapat diakses perangkat.
Memanggil WdfCommonBufferGetAlignedVirtualAddress untuk mendapatkan alamat virtual buffer, yang dapat diakses driver.
Contoh kode berikut diambil dari file Init.c dari sampel PLX9x5x . Kode ini menunjukkan bagaimana driver KMDF mengalokasikan ruang buffer umum.
// Allocate common buffer for building writes
DevExt->WriteCommonBufferSize =
sizeof( DMA_TRANSFER_ELEMENT) * DevExt->WriteTransferElements;
status = WdfCommonBufferCreate( DevExt->DmaEnabler,
DevExt->WriteCommonBufferSize,
WDF_NO_OBJECT_ATTRIBUTES,
&DevExt->WriteCommonBuffer );
if (!NT_SUCCESS(status)) {
. . . //Error-handling code omitted
}
DevExt->WriteCommonBufferBase =
WdfCommonBufferGetAlignedVirtualAddress(
DevExt->WriteCommonBuffer);
DevExt->WriteCommonBufferBaseLA =
WdfCommonBufferGetAlignedLogicalAddress(
DevExt->WriteCommonBuffer);
RtlZeroMemory( DevExt->WriteCommonBufferBase, DevExt->WriteCommonBufferSize);
Jika driver Anda memanggil WdfDeviceSetAlignmentRequirement sebelum memanggil WdfDmaEnablerCreate, buffer yang dibuat WdfDmaEnablerCreate selaras dengan batas alamat memori yang ditentukan driver ke WdfDeviceSetAlignmentRequirement. Jika tidak, buffer umum diselaraskan dengan batas alamat kata. Atau, driver dapat memanggil WdfCommonBufferCreateWithConfig untuk menentukan perataan untuk satu buffer.
Untuk mendapatkan panjang buffer umum yang telah dialokasikan driver Anda, driver dapat memanggil WdfCommonBufferGetLength.
Ketika driver selesai menggunakan buffer umum, driver memanggil WdfObjectDelete.