阅读:1442回复:3
Coolice,Vcmfc帮忙看看啊
请帮帮忙啦,呵呵。
我是在filespy里面加了一点点代码,试着玩一玩。添加了IRP_MJ_READ、IRP_MJ_WRITE处理例程,分别为SpyRead、SpyWrite。 我在SpyRead里面只想对需要处理的包添加回调例程,然后在回掉例程里面将读到的字符由小写变成大写(看的帖子里面试的,呵呵) 在SpyWrite里面将写入的字符由大写变成小写。代码在下面啦,很短的,帮帮忙啊。 问题是,我安装完,用U盘测试,发现写入时可以做到大写变小写,但是读出的时候完全没有反映,而且立马死机。好像是SpyRead例程里面有问题,但是我又不知道问题在哪里,唉,死了N次了。我知道看代码很难受啦,但是还请大侠搭救啊。 NTSTATUS SpyRead( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { PDEVICE_EXTENSION DeviceExtention = DeviceObject ->DeviceExtension; PIO_STACK_LOCATION IrpCurStack = IoGetCurrentIrpStackLocation(Irp); PIO_STACK_LOCATION IrpNextStack = IoGetNextIrpStackLocation(Irp); RtlMoveMemory( IrpNextStack , IrpCurStack , sizeof( IO_STACK_LOCATION ) ); if( (Irp->Flags & IRP_NOCACHE) || (Irp->Flags & IRP_PAGING_IO) || (Irp->Flags & IRP_SYNCHRONOUS_PAGING_IO) ) { IoSetCompletionRoutine( Irp , SpyReadCompleteRoutine , NULL ,TRUE ,TRUE ,TRUE ) } return IoCallDriver( DeviceExtention->NextDriverDeviceObject , Irp ); } SpyReadCompleteRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ) { NTSTATUS status = STATUS_SUCCESS; char * pInData = NULL; BOOLEAN getData = FALSE; DbgPrint( \"Here Is Complete Routing\" ); switch( Irp->RequestorMode ) { case KernelMode: if( Irp ->MdlAddress ) pInData = (char *) MmGetSystemAddressForMdl( Irp->MdlAddress ); else pInData = (char *) Irp ->AssociatedIrp.SystemBuffer; getData = TRUE; break; case UserMode: if( Irp ->MdlAddress ) pInData = (char *) MmGetSystemAddressForMdl( Irp->MdlAddress ); else pInData = (char *) Irp ->UserBuffer; getData = TRUE; break; default: break; } if( pInData && getData ) { ULONG BufferLength , i; BufferLength = strlen( pInData ); for( i = 0 ; i < BufferLength ; i++ ) { if( pInData >= \'a\' && pInData <= \'z\' ) pInData = pInData + \'A\' - \'a\'; } } IoCompleteRequest( Irp , IO_NO_INCREMENT ); return status; } NTSTATUS SpyWrite( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { if( Irp ->Flags & ( IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO ) ) { char * pInData = NULL; if( Irp ->MdlAddress ) pInData = (char *) MmGetSystemAddressForMdl( Irp->MdlAddress ); else pInData = (char *) Irp->UserBuffer; if( pInData ) { ULONG BufferLength , i ; BufferLength = strlen( pInData ); for( i = 0 ; i < BufferLength ; i++ ) { if( pInData >= \'A\' && pInData <= \'Z\' ) pInData = pInData - \'A\' + \'a\'; } } } return SpyPassThrough( DeviceObject , Irp ); } |
|
沙发#
发布于:2003-03-20 19:56
我是刚刚开始啦,一边学习一边实践,可是刚开始就很XX啦,都死N次了。
|
|
板凳#
发布于:2003-04-25 13:23
UP!
|
|
|
地板#
发布于:2003-07-10 12:22
请教,为什么我的ifs kit 2600中的filespy编译总是出错呀???
要么就是ntifs.h找不到,要么就是ntifs中的一堆错误,要么就是说filespy.c中的一堆错误,这是为什么呀??? |
|
|