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.
Ekstensi !dma menampilkan informasi tentang subsistem Akses Memori Langsung (DMA), dan opsi Pemverifikasi DMA dari Pemverifikasi Driver.
!dma
!dma Adapter [Flags]
Parameter
Adaptor
Menentukan alamat heksadesimal adaptor DMA yang akan ditampilkan. Jika ini nol, semua adaptor DMA akan ditampilkan.
Bendera
Menentukan informasi yang akan disertakan dalam tampilan. Ini bisa menjadi kombinasi dari bit berikut. Defaultnya adalah 0x1.
Bit 0 (0x1)
Menyebabkan tampilan menyertakan informasi adaptor generik.
Bit 1 (0x2)
Menyebabkan tampilan menyertakan informasi daftar peta. (Hanya ketika Verifikasi DMA aktif.)
Bit 2 (0x4)
Menyebabkan tampilan menyertakan informasi buffer umum. (Hanya ketika Verifikasi DMA aktif.)
Bit 3 (0x8)
Menyebabkan tampilan menyertakan informasi daftar sebar/kumpulkan. (Hanya ketika Verifikasi DMA aktif.)
Bit 4 (0x10)
Menyebabkan tampilan menyertakan deskripsi perangkat untuk perangkat keras. (Hanya ketika Verifikasi DMA aktif.)
Bit 5 (0x20)
Menyebabkan tampilan menyertakan informasi blok konteks Tunggu.
DLL
Kdexts.dll
Informasi Tambahan
Untuk informasi tentang Driver Verifier, lihat dokumentasi Windows Driver Kit (WDK). Untuk informasi tentang DMA, lihat dokumentasi Windows Driver Kit (WDK) dan Microsoft Windows Internals oleh Mark Russinovich David Solomon.
Keterangan
Argumen tidak valid (misalnya, !dma 1) menghasilkan teks bantuan singkat.
Ketika ekstensi !dma digunakan tanpa parameter, ekstensi ini menampilkan daftar ringkas dari semua adaptor DMA dan alamatnya. Ini dapat digunakan untuk mendapatkan alamat adaptor untuk digunakan dalam versi yang lebih panjang dari perintah ini.
Berikut adalah contoh bagaimana ekstensi ini dapat digunakan ketika opsi Verifikasi DMA Driver Verifier aktif:
0:kd> !dma
Dumping all DMA adapters...
Adapter: 82faebd0 Owner: SCSIPORT!ScsiPortGetUncachedExtension
Adapter: 82f88930 Owner: SCSIPORT!ScsiPortGetUncachedExtension
Adapter: 82f06cd0 Owner: NDIS!NdisMAllocateMapRegisters
Master adapter: 80076800
Dari output ini, Anda dapat melihat bahwa ada tiga adaptor DMA dalam sistem. SCSIPORT memiliki dua dan NDIS memiliki yang ketiga. Untuk memeriksa adaptor NDIS secara rinci, gunakan ekstensi !dma dengan alamatnya:
0:kd> !dma 82f06cd0
Adapter: 82f06cd0 Owner: NDIS!NdisMAllocateMapRegisters (0x9fe24351)
MasterAdapter: 00000000
Adapter base Va 00000000
Map register base: 00000000
WCB: 82f2b604
Map registers: 00000000 mapped, 00000000 allocated, 00000002 max
Dma verifier additional information:
DeviceObject: 82f98690
Map registers: 00000840 allocated, 00000000 freed
Scatter-gather lists: 00000000 allocated, 00000000 freed
Common buffers: 00000004 allocated, 00000000 freed
Adapter channels: 00000420 allocated, 00000420 freed
Bytes mapped since last flush: 000000f2
Blok data pertama adalah informasi khusus yang dapat digunakan pengembang HAL untuk men-debug masalah. Untuk tujuan Anda, data di bawah "Informasi tambahan pemverifikasi Dma" adalah hal yang menarik. Dalam contoh ini, Anda melihat bahwa NDIS telah mengalokasikan 0x840 daftar peta. Ini adalah jumlah yang sangat besar, terutama karena NDIS telah menunjukkan bahwa NDIS berencana untuk menggunakan maksimum dua register peta. Adaptor ini tampaknya tidak menggunakan daftar sebar/kumpulkan dan telah menyingkirkan semua saluran adaptornya. Lihatlah daftar peta secara lebih rinci:
0:kd> !dma 82f06cd0 2
Adapter: 82f06cd0 Owner: NDIS!NdisMAllocateMapRegisters
...
Map register file 82f06c58 (0/2 mapped)
Double buffer mdl: 82f2c188
Map registers:
82f06c80: Not mapped
82f06c8c: Not mapped
Map register file 82f06228 (1/2 mapped)
Double buffer mdl: 82f1b678
Map registers:
82f06250: 00bc bytes mapped to f83c003c
82f0625c: Not mapped
Map register file 82fa5ad8 (1/2 mapped)
Double buffer mdl: 82f1b048
Map registers:
82fa5b00: 0036 bytes mapped to 82d17102
82fa5b0c: Not mapped
...
Dalam contoh ini, Anda melihat bahwa register peta tertentu telah dipetakan. Setiap file register peta adalah alokasi register peta oleh driver. Dengan kata lain, ini mewakili satu panggilan ke AllocateAdapterChannel. NDIS mengumpulkan sejumlah besar file register peta ini, sementara beberapa driver membuatnya satu per satu dan membuangnya ketika selesai.
File register peta juga merupakan alamat yang dikembalikan ke perangkat dengan nama "MapRegisterBase". Perhatikan bahwa pemverifikasi DMA hanya menghubungkan 64 register peta pertama untuk setiap driver. Sisanya diabaikan karena alasan ruang (setiap register peta mewakili tiga halaman fisik).
Dalam contoh ini, dua file register peta sedang digunakan. Ini berarti bahwa driver telah memetakan buffer sehingga terlihat oleh perangkat keras. Dalam kasus pertama, byte 0xBC dipetakan ke alamat virtual sistem 0xF83C003C.
Pemeriksaan buffer umum mengungkapkan:
0:kd> !dma 82f06cd0 4
Adapter: 82f06cd0 Owner: NDIS!NdisMAllocateMapRegisters
...
Common buffer allocated by NDIS!NdisMAllocateSharedMemory:
Length: 1000
Virtual address: 82e77000
Physical address: 2a77000
Common buffer allocated by NDIS!NdisMAllocateSharedMemory:
Length: 12010
Virtual address: 82e817f8
Physical address: 2a817f8
Common buffer allocated by NDIS!NdisMAllocateSharedMemory:
Length: 4300
Virtual address: 82e95680
Physical address: 2a95680
Common buffer allocated by NDIS!NdisMAllocateSharedMemory:
Length: 4800
Virtual address: 82e9d400
Physical address: 2a9d400
Ini cukup mudah; ada empat buffer umum dengan panjang yang bervariasi. Alamat fisik dan virtual semuanya diberikan.