驱动老牛
![]() |
阅读:1124回复:7
怎样修改堆栈单元的内容
我想在IRP_MJ_CREATE的时候修改创建文件的文件名,让他打开别的文件,可以我修改了名称后用IoSkipCurrentIrpStackLocation和IoCallDriver后好像没有什么作用。
|
|
沙发#
发布于:2004-12-02 10:36
修改desiredaccess有效吗,好像文件系统不对此做检查吧,检查是
在上层作的。 |
|
板凳#
发布于:2004-12-02 10:26
如果在同一个volume中,只需要修改fileobject->filenameh和RelatedFileObject
如果在不同volume中,则除了修改文件名和RelatedFileObject,还需要以下面方式立即完成该irp, Irp->IoStatus.Information = IO_REPARSE; Irp->IoStatus.Status = STATUS_REPARSE; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_REPARSE; |
|
地板#
发布于:2004-12-02 09:54
当然可以这样改. 我就改过DesiredAccess, 没问题.
如果要改文件名, 你需要加一个completion routine, 在里面把你改过的文件名再改回来. toad |
|
驱动老牛
![]() |
地下室#
发布于:2004-12-02 09:39
原来的代码我删掉了,我也忘了怎么改的了,或者是用RtlInitUnicodeString改的,但是无效。我只想知道这样改到底行不行,比如更改DesiredAccess,到底会不会有效,我都试过了,好像没用???
|
|
5楼#
发布于:2004-12-02 03:57
FilbObject->FileName是unicode_string, 不是unicode. 你不能对unicode_string使用wcs系列的函数.
toad |
|
驱动老牛
![]() |
6楼#
发布于:2004-12-01 10:31
主要就是以下几步:
irpSp = IoGetCurrentIrpStackLocation( Irp ); wcscpy(irpSp->FileObject->FileName," "); IoSkipCurrentIrpStackLocation( Irp ); IoCallDriver |
|
7楼#
发布于:2004-11-30 19:25
你是如何做的,把代码贴上来看看
|
|
|