youthgift
驱动牛犊
驱动牛犊
  • 注册日期2002-11-11
  • 最后登录2010-09-01
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望14点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1442回复:3

Coolice,Vcmfc帮忙看看啊

楼主#
更多 发布于:2003-03-20 19:54
请帮帮忙啦,呵呵。
我是在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 );
}
youthgift
驱动牛犊
驱动牛犊
  • 注册日期2002-11-11
  • 最后登录2010-09-01
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望14点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-20 19:56
我是刚刚开始啦,一边学习一边实践,可是刚开始就很XX啦,都死N次了。
MacWin
驱动中牛
驱动中牛
  • 注册日期2002-12-16
  • 最后登录2009-05-27
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望44点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-25 13:23
UP!
Chen
dikiili
驱动牛犊
驱动牛犊
  • 注册日期2003-06-09
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-10 12:22
请教,为什么我的ifs kit 2600中的filespy编译总是出错呀???
要么就是ntifs.h找不到,要么就是ntifs中的一堆错误,要么就是说filespy.c中的一堆错误,这是为什么呀???
我并不属于这个世界! [img]http://mini.sq.sh.cn/images/tu.gif[/img]
游客

返回顶部