p*******i 发帖数: 190 | 1 写一个filter driver, intecept 所有Disk IO,处理一下再传给下层driver。大概流
程如下:
1. get an IRP from upper layer driver
2. check if associated MDLs have been locked or are paging IO. If not, call
MmProbeAndLockPages() to lock those physical pages. Then
3. call MmGetSystemAddressForMdlSafe() to get the system virtual address for
further process.
现在问题是,我不确定应该如何判断一个IRP中的MDL是否需要lock.我现在的处理好像
有问题,因为当IO返回时,我还没有release这个IRP,却发现IRP中的MDL buffer里的
内容被改写了。貌似没有lock住?还是那个system virtual address没有map对?那位
达人给解答一下,不胜感激,谢谢。 | i*****o 发帖数: 1714 | 2 这个没问题的啊。一般lockpage就是把这个memory个锁住,然后dma device就可以直接
把data放进去。你所说的是最普通的操作了,等io回来后你memory里就是dma来的新数
据。
call
for
【在 p*******i 的大作中提到】 : 写一个filter driver, intecept 所有Disk IO,处理一下再传给下层driver。大概流 : 程如下: : 1. get an IRP from upper layer driver : 2. check if associated MDLs have been locked or are paging IO. If not, call : MmProbeAndLockPages() to lock those physical pages. Then : 3. call MmGetSystemAddressForMdlSafe() to get the system virtual address for : further process. : 现在问题是,我不确定应该如何判断一个IRP中的MDL是否需要lock.我现在的处理好像 : 有问题,因为当IO返回时,我还没有release这个IRP,却发现IRP中的MDL buffer里的 : 内容被改写了。貌似没有lock住?还是那个system virtual address没有map对?那位
|
|