能力值:
( LV2,RANK:10 )
|
-
-
2 楼
可以,重新分配一个mdl,写入后再释放
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
yy虫子yy
可以,重新分配一个mdl,写入后再释放
感谢回复,可是调用IoCompleteRequest好像就没办法重新分配MDL呢. 这个问题可能无法实现,我是初学者不太懂,让大家见笑了.
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
蒋明通
感谢回复,可是调用IoCompleteRequest好像就没办法重新分配MDL呢.
这个问题可能无法实现,我是初学者不太懂,让大家见笑了.
调用IoCompleteRequest之前,取出MDL描述的地址 调用后,再用这个地址重新分配MDL就好了 因为这个地址在返回用户层之前还是有效的 而此时MDL的作用是确保内核层间接访问用户层不会引起页故障 间接访问的意思就像是MDL在内核层和用户层之间架起一座桥梁,因为不能直接访问 所以,IoCompleteRequest虽然把MDL这座桥梁拆了,但是你可以自己重新搭起来,用完之后再自行拆除
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
yy虫子yy
调用IoCompleteRequest之前,取出MDL描述的地址
调用后,再用这个地址重新分配MDL就好了
因为这个地址在返回用户层之前还是有效的
而此时MDL的作用是确保内核层间接访问用户层不 ...
非常感谢,测试确实可行,已经解决问题了.
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
蒋明通
非常感谢,测试确实可行,已经解决问题了.
您好,请问如果是METHOD_BUFFERED方式的也能实现修改吗. 大致就是这样. PBYTE outbuffer=(PBYTE)pIrp->AssociatedIrp.SystemBuffer; *outbuffer=1; IoCompleteRequest(pIrp, IO_NO_INCREMENT); *outbuffer=2;//这里虽然修改成功,但返回用户层的数据并未发生改变. return 0;
最后于 2020-4-24 20:14
被蒋明通编辑
,原因:
|
|
|