首页
社区
课程
招聘
[求助]Attach 卷设备后出现IRP混乱的问题 求助
发表于: 2011-4-6 20:54 7010

[求助]Attach 卷设备后出现IRP混乱的问题 求助

2011-4-6 20:54
7010
我在看寒江独钓  的文件系统过滤驱动那一章,自己模仿书上写了一个,文件系统的CDO已经Attach

成功了,Volume也Attach成功了,至少从单步调试结果可以确认这点,但是在处理

IRP_MJ_FILE_SYSTEM_CONTROL中IRP_MN_USER_FS_REQUEST这个IRP时蓝了,蓝的天旋

地转,windbg调试结果报 MULTIPLE_IRP_COMPLETE_REQUESTS (44) 说是某个IRP已经完

成了,但是我又去完成了一次. 下面这个是我处理IRP_MJ_FILE_SYSTEM_CONTROL的代码

NTSTATUS FileSystemFilterCtrl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
	NTSTATUS status=STATUS_SUCCESS;
	PIO_STACK_LOCATION irpstack=IoGetCurrentIrpStackLocation(Irp);
	PFileSystemFilterEx devext=(PFileSystemFilterEx)DeviceObject->DeviceExtension;

	if(devext->FSFTYPE==FSFTYPECDO)
		return status;

	switch (irpstack->MinorFunction)
	{
	case IRP_MN_MOUNT_VOLUME:
		return FSFilterVolumeMount(DeviceObject,Irp);
		break;
	case IRP_MN_LOAD_FILE_SYSTEM:
		DbgPrint("IRP_MN_LOAD_FILE_SYSTEM\n");
		break;
	case IRP_MN_USER_FS_REQUEST:
		if(FSCTL_DISMOUNT_VOLUME==irpstack->Parameters.FileSystemControl.FsControlCode) 
		{
			DbgPrint("DISMOUNT VOLUME\n");
        }
		break;
	}

	IoSkipCurrentIrpStackLocation(Irp);
	return IoCallDriver(((PFileSystemFilterEx)DeviceObject->DeviceExtension)->nextDeviceObject,Irp);
}


下面这段是我把IRPTRACE设置成BOOT模式后在系统启动时捕获到的处理

IRP_MJ_FILE_SYSTEM_CONTROL的日志,搜索 8163f488 可以看到这个IRP,NTFS驱动确

实完成了两次,不懂为什么,附件里面FSF.TXT就是下面这个IRPTRACE的日志,

FileSystemFilter.rar是我的驱动代码,解压后里面有个BIN目录,只要把编译出来的驱动放到这

个目录下,然后执行一下里面的sfilterInstall.cmd,就可以安装驱动了,默认安装到

c:\windows\system32\drivers目录下面,请在虚拟机里面试。我现在没别的招了,好在还有个

sfilter示例,我只能一步修改一下sfilter看看把哪个步骤改掉会出现跟我的驱动一样的错误了。

希望高手不吝赐教,在此先谢过了。

===============================================================================
======================== Begin Trace IRPDRV Operations ========================
===============================================================================
>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815F41A0, IRP:81430CA8, Proc:System, Thr:8
  * IRP_MN_MOUNT_VOLUME
    >                 Vpb: 8142E1D8
             DeviceObject: 815F5D80 (#815F5D80)
      >> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:Ntfs, IRP:81430CA8, Proc:System, Thr:8
                   Control: E0 (SL_INVOKE_ON_CANCEL | SL_INVOKE_ON_SUCCESS | SL_INVOKE_ON_ERROR)
         CompletionRoutine: F9F52930 (FileSystemFilter.sys+930h)
                   Context: F9E6D1D8
        * IRP_MN_MOUNT_VOLUME
          >                 Vpb: 8142E1D8
                   DeviceObject: 815F5D80 (#815F5D80)
      << IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:Ntfs, IRP:81430CA8- STATUS_SUCCESS (Proc:System, Thr:20)
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815F41A0, IRP:81430CA8- STATUS_SUCCESS (Proc:System, Thr:8)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:81430CA8, Proc:System, Thr:7C
          FileObject: 8131A6A0
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:81430CA8- *Skipped* (Proc:System, Thr:7C)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:81430CA8, Proc:System, Thr:7C
          FileObject: 8131A6A0
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:81430CA8- STATUS_SUCCESS (Proc:System, Thr:7C)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:81430CA8, Proc:System, Thr:7C
          FileObject: 8131A6A0
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:81430CA8- *Skipped* (Proc:System, Thr:7C)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:81430CA8, Proc:System, Thr:7C
          FileObject: 8131A6A0
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:81430CA8- STATUS_SUCCESS (Proc:System, Thr:7C)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:813881C8, Proc:smss.exe, Thr:180
          FileObject: 816F8A18
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:813881C8- *Skipped* (Proc:smss.exe, Thr:180)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:813881C8, Proc:smss.exe, Thr:180
          FileObject: 816F8A18
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:813881C8- STATUS_SUCCESS (Proc:smss.exe, Thr:180)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:813881C8, Proc:autochk.exe, Thr:198
          FileObject: 816F8600
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:813881C8- *Skipped* (Proc:autochk.exe, Thr:198)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:813881C8, Proc:autochk.exe, Thr:198
          FileObject: 816F8600
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:813881C8- STATUS_SUCCESS (Proc:autochk.exe, Thr:198)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:813881C8, Proc:System, Thr:1A8
               Flags: 05 (0x5)
          FileObject: 812E46F8
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:813881C8- *Skipped* (Proc:System, Thr:1A8)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:81696BB0, Proc:System, Thr:1AC
               Flags: 05 (0x5)
          FileObject: 8142A5D8
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:81696BB0- *Skipped* (Proc:System, Thr:1AC)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:816D5CD8, Proc:System, Thr:1B0
               Flags: 05 (0x5)
          FileObject: 814D8898
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:816D5CD8- *Skipped* (Proc:System, Thr:1B0)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:816D1620, Proc:System, Thr:1B4
               Flags: 05 (0x5)
          FileObject: 8142A408
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:816D1620- *Skipped* (Proc:System, Thr:1B4)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:8163F488, Proc:System, Thr:1B8
               Flags: 05 (0x5)
          FileObject: 8142A238
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:8163F488- *Skipped* (Proc:System, Thr:1B8)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:813881C8, Proc:System, Thr:1A8
               Flags: 05 (0x5)
          FileObject: 812E46F8
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:813881C8- STATUS_SUCCESS (Proc:System, Thr:14)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:813881C8, Proc:System, Thr:1A8
               Flags: 05 (0x5)
          FileObject: 812E4E30
  * IRP_MN_USER_FS_REQUEST
>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:81696BB0, Proc:System, Thr:1AC
               Flags: 05 (0x5)
          FileObject: 8142A5D8
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:81696BB0- STATUS_SUCCESS (Proc:System, Thr:14)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:81696BB0, Proc:System, Thr:1AC
               Flags: 05 (0x5)
          FileObject: 812E4930
  * IRP_MN_USER_FS_REQUEST
>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:816D5CD8, Proc:System, Thr:1B0
               Flags: 05 (0x5)
          FileObject: 814D8898
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:816D5CD8- STATUS_SUCCESS (Proc:System, Thr:1B0)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:816D1620, Proc:System, Thr:1B4
               Flags: 05 (0x5)
          FileObject: 8142A408
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:816D1620- STATUS_SUCCESS (Proc:System, Thr:14)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:8163F488, Proc:System, Thr:1B8
               Flags: 05 (0x5)
          FileObject: 8142A238
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:8163F488- STATUS_SUCCESS (Proc:System, Thr:14)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:8163F488, Proc:System, Thr:1B8
               Flags: 05 (0x5)
          FileObject: 8168AF28
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:813881C8- *Skipped* (Proc:System, Thr:1A8)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:813881C8, Proc:System, Thr:1A8
               Flags: 05 (0x5)
          FileObject: 812E4E30
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:81696BB0- *Skipped* (Proc:System, Thr:1AC)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:81696BB0, Proc:System, Thr:1AC
               Flags: 05 (0x5)
          FileObject: 812E4930
  * IRP_MN_USER_FS_REQUEST
>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:816D5CD8, Proc:System, Thr:1B0
               Flags: 05 (0x5)
          FileObject: 814D8898
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:816D5CD8- *Skipped* (Proc:System, Thr:1B0)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:816D1620, Proc:System, Thr:1B4
               Flags: 05 (0x5)
          FileObject: 812E43F8
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:816D1620- *Skipped* (Proc:System, Thr:1B4)

<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:8163F488- *Skipped* (Proc:System, Thr:1B8)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:8163F488, Proc:System, Thr:1B8
               Flags: 05 (0x5)
          FileObject: 8168AF28
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:813881C8- STATUS_SUCCESS (Proc:System, Thr:14)

<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:81696BB0- STATUS_SUCCESS (Proc:System, Thr:14)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:816D5CD8, Proc:System, Thr:1B0
               Flags: 05 (0x5)
          FileObject: 814D8898
  * IRP_MN_USER_FS_REQUEST
>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:816D1620, Proc:System, Thr:1B4
               Flags: 05 (0x5)
          FileObject: 812E43F8
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:816D1620- STATUS_SUCCESS (Proc:System, Thr:14)

<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:8163F488- STATUS_SUCCESS (Proc:System, Thr:14)

*** Fatal System Error: 0x00000044
                       (0x81696BB0,0x00001BC0,0x00000000,0x00000000)

*** Fatal System Error: 0x00000044
                       (0x813881C8,0x00001BC0,0x00000000,0x00000000)

<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:Ntfs, Dev:#81474020, IRP:816D5CD8- STATUS_SUCCESS (Proc:System, Thr:14)

>> IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:816D5CD8, Proc:System, Thr:1B0
               Flags: 05 (0x5)
          FileObject: 8168A6B0
  * IRP_MN_USER_FS_REQUEST
<< IRP_MJ_FILE_SYSTEM_CONTROL Drv:FileSystemFilter, Dev:#815FC720, IRP:816D5CD8- *Skipped* (Proc:System, Thr:1B0)

*** Fatal System Error: 0x00000044
                       (0x8163F488,0x00001BC0,0x00000000,0x00000000)

Break instruction exception - code 80000003 (first chance)

A fatal system error has occurred.
Debugger entered on first try; Bugcheck callbacks have not been invoked.

A fatal system error has occurred.

Connected to Windows XP 2600 x86 compatible target at (Wed Apr  6 16:58:31.368 2011 (GMT+8)), ptr64 FALSE
Loading Kernel Symbols
...............................................................
.................................
Loading User Symbols

Loading unloaded module list
...
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

BugCheck 44, {8163f488, 1bc0, 0, 0}

Probably caused by : FileSystemFilter.sys

Followup: MachineOwner
---------

nt!RtlpBreakWithStatusInstruction:
804e4592 cc              int     3
kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

MULTIPLE_IRP_COMPLETE_REQUESTS (44)
A driver has requested that an IRP be completed (IoCompleteRequest()), but
the packet has already been completed.  This is a tough bug to find because
the easiest case, a driver actually attempted to complete its own packet
twice, is generally not what happened.  Rather, two separate drivers each
believe that they own the packet, and each attempts to complete it.  The
first actually works, and the second fails.  Tracking down which drivers
in the system actually did this is difficult, generally because the trails
of the first driver have been covered by the second.  However, the driver
stack for the current request can be found by examining the DeviceObject
fields in each of the stack locations.
Arguments:
Arg1: 8163f488, Address of the IRP
Arg2: 00001bc0
Arg3: 00000000
Arg4: 00000000

Debugging Details:
------------------

IRP_ADDRESS:  8163f488

DEFAULT_BUCKET_ID:  DRIVER_FAULT

BUGCHECK_STR:  0x44

PROCESS_NAME:  System

DEVICE_OBJECT: 815fc720

DRIVER_OBJECT: 815f4f38

IMAGE_NAME:  FileSystemFilter.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  4d9c29e1

MODULE_NAME: FileSystemFilter

FAULTING_MODULE: f9f52000 FileSystemFilter

LAST_CONTROL_TRANSFER:  from 80533747 to 804e4592

STACK_TEXT:  
f96d145c 80533747 00000003 f96d17b8 00000000 nt!RtlpBreakWithStatusInstruction
f96d14a8 8053421e 00000003 8142a238 8163f488 nt!KiBugCheckDebugBreak+0x19
f96d1888 8053480e 00000044 8163f488 00001bc0 nt!KeBugCheck2+0x574
f96d18a8 8051ce0f 00000044 8163f488 00001bc0 nt!KeBugCheckEx+0x1b
f96d18d0 804ed9cb 8163f488 00000103 806f12d0 nt!IopFreeIrp+0xe9
f96d1920 80568ed5 8163f4c8 f96d1964 f96d1950 nt!IopCompleteRequest+0x316
f96d1948 805753a9 815fc720 00000000 8142a238 nt!IopSynchronousServiceTail+0xb8
f96d19f0 804df7ec 800005b4 800005b8 00000000 nt!NtReadFile+0x580
f96d19f0 804de519 800005b4 800005b8 00000000 nt!KiFastCallEntry+0xf8
f96d1a8c 805aef36 800005b4 800005b8 00000000 nt!ZwReadFile+0x11
f96d1adc 805af039 e1464b60 800005b4 f96d1b0c nt!CmpFileRead+0x86
f96d1b04 805af5d5 00000000 f96d1b3c f96d1b24 nt!HvpGetHiveHeader+0x71
f96d1b58 805ae411 e1464b60 00000000 00000001 nt!HvMapHive+0x22
f96d1b70 805ae1dc e1464c01 00000005 00000002 nt!HvInitializeHive+0x3da
f96d1bdc 805af44d f96d1c18 00000005 00000002 nt!CmpInitializeHive+0x26d
f96d1c34 805bbc97 f96d1c94 00000002 f96d1c78 nt!CmpInitHiveFromFile+0xa3
f96d1dac 8057beff 00000005 00000000 00000000 nt!CmpLoadHiveThread+0x19f
f96d1ddc 804f98ea 805bbb07 00000005 00000000 nt!PspSystemThreadStartup+0x34
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16

STACK_COMMAND:  kb

FOLLOWUP_NAME:  MachineOwner

FAILURE_BUCKET_ID:  0x44_IMAGE_FileSystemFilter.sys_RECENT

BUCKET_ID:  0x44_IMAGE_FileSystemFilter.sys_RECENT

Followup: MachineOwner
---------

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 100
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
貌似是说2个单独的驱动都试图对同一个IRP完成!第一个驱动完成了,所以第二个驱动完成此IRP失败!

不过话说回来
IRP_MN_LOAD_FILE_SYSTEM这个你怎么没处理?貌似要重新绑定控制设备吧!
2011-4-6 21:42
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
IRP_MN_LOAD_FILE_SYSTEM这个需要你自己来处理吗。。。。
2011-4-6 21:46
0
雪    币: 392
活跃值: (89)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
代码好乱~

搞清楚文件系统的几种设备应该接收哪些类型的IRP,设备类型:控制设备,卷设备;
在你的代码里,CDO和FDO类型处理有问题,在初始化CDO的时候,用这样的代码:
        pcdoex->FSFTYPE=FSFTYPECDOFILTER;
在Dispath函数里,用这样的代码去判断:
        if(devext->FSFTYPE==FSFTYPECDO)
                return status;

你这样的判断,就会使你的CDO和FDO都接收到重复的IRP请求。
仔细看Sfliter,把它的无用代码全部屏蔽了,只留下框架来,慢慢调试;学习,领会了,然后再自己去写;

给点建议:
1,注意编码规范;
2,注意开发环境的搭建,太多的依赖于IDE的内部变量,将会使移植编译变的困难;
你的工程,在我这里就没法编译;
BIN目录里,有sys,但没有PDB,一样不能调试;

所幸出错位置比较明显~
2011-4-6 21:51
0
雪    币: 88
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习了,学习了~
2011-4-7 10:12
0
雪    币: 34
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
IRP_MN_LOAD_FILE_SYSTEM这个需要你自己来处理吗。。。。


感谢2楼跟3楼兄弟的回复,IRP_MN_LOAD_FILE_SYSTEM这个是表示我前面绑定的CDO是一个文件系统识别器,收到这个IRP我必须重新绑定文件系统,但是我在绑定CDO的函数中已经判断了标准文件系统识别器,具体代码见FsRegisterRoutine 这个函数,并且我单步调试以及IRPTRACE的日志看出来,设备并没有收到IRP_MN_LOAD_FILE_SYSTEM这个MinorFunction的IRP,而是一直给我发IRP_MN_USER_FS_REQUEST这个IRP。

代码好乱~

搞清楚文件系统的几种设备应该接收哪些类型的IRP,设备类型:控制设备,卷设备;
在你的代码里,CDO和FDO类型处理有问题,在初始化CDO的时候,用这样的代码:
pcdoex->FSFTYPE=FSFTYPECDOFILTER;
在Dispath函数里,用这样的代码去判断:
if(devext->FSFTYPE==FSFTYPECDO)
return status;

你这样的判断,就会使你的CDO和FDO都接收到重复的IRP请求。
仔细看Sfliter,把它的无用代码全部屏蔽了,只留下框架来,慢慢调试;学习,领会了,然后再自己去写;

给点建议:
1,注意编码规范;
2,注意开发环境的搭建,太多的依赖于IDE的内部变量,将会使移植编译变的困难;
你的工程,在我这里就没法编译;
BIN目录里,有sys,但没有PDB,一样不能调试;

所幸出错位置比较明显~


感谢microdebug的回复,你的建议让我受益颇深,我按照你的建议改了一下代码以及环境,现在改成了用DDK自带的编译环境来编译了,只要输入一个make就可以了,还有你认为的出错的地方,我查了一下,解释如下:我的驱动里面建立了三种类型的设备,FSFTYPECDO类型的设备是在DriverEntry中创建的,用来跟以后我的RING3程序通讯的,FSFTYPECDOFILTER设备是创建出来用于attach文件系统控制设备的,成功以后我就可以收到MinorFunction为IRP_MN_MOUNT_VOLUME的IRP,就可以知道系统即将加载一个卷,而FSFTYPEVOLUMEFILTER这个类型的设备是创建出来attach文件系统卷设备的,因此在对IRP_MJ_FILE_SYSTEM_CONTROL的派遣函数中我用下面这个代码,我是认为只有文件系统控制设备跟文件系统卷设备才会收到IRP_MJ_FILE_SYSTEM_CONTROL,当然实际调试中我也确认了这点。我把改后的代码重新传了一遍在附件,希望各位高手帮忙看看,我这边也认真研究一下sfilter,谢谢了。
if(devext->FSFTYPE==FSFTYPECDO)
     return status;
上传的附件:
2011-4-7 11:28
0
雪    币: 34
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
对了  这个工程编译需要 IFSDDK  我用的是 IFS DDK 3790版本 下载链接如下:

ftp://210.42.106.194/开发工具/DDK/WinDDK2003/MICROSOFT.WINDOWS.SERVER.V2003.IFS.DDK-ISO.LeDreactor.bin
2011-4-7 11:32
0
雪    币: 392
活跃值: (89)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
8
大概调试了一下,我这里没有出现蓝屏;
控制设备绑定成功,但是没有收到IRP_MJ_FILE_SYSTEM_CONTROL 下的IRP_MN_MOUNT_VOLUME请求,也就是说卷设备没有绑定成功;

自己好好调试吧;这种问题,别人一般帮不了你太多~
2011-4-7 15:16
0
雪    币: 34
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
我这边倒是收到了IRP_MN_MOUNT_VOLUME,我慢慢调试一下吧,感谢你的热心指导与建议,我今天才发现用MAKE其实不会复杂,被以前做UNIX下开发写MAKEFILE的经历骗了。。。  
2011-4-7 16:02
0
雪    币: 34
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
刚才想了一下 知道为什么你那边收不到挂载卷设备的IRP了,我这个驱动里面为了简单,在挂载了控制设备后,我并没有去枚举系统中的卷设备并ATTACH,必须让系统重新启动后控制设备才会收到一个IRP_MN_MOUNT_VOLUME,在对其的处理中去attach卷设备,因此我的INF里面把这个驱动做成BOOT类型,因此如果还有其他兄弟在调试这个代码时千万记住用虚拟机,并且请下载一个WINPE系统的ISO,以便在重启后蓝屏了进不去 就切换至WINPE里面把我的这个驱动删除了 默认路径在c:\windows\system32\drivers 下  希望还来得及
2011-4-7 16:16
0
雪    币: 392
活跃值: (89)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
11
你完成IRP的时候出现问题。

在你的FileSystemPassThrough例程里,原来的代码,不管怎样,你都返回STATUS_SUCCESS,这样IO管理器就帮你把这个IRP释放掉了;而事实上,一些IRP,调用IoCallDdriver后,返回的是pending或其他状态,你一味的返回STATUS_SUCCESS只会使IO管理器提前释放掉该IRP;最后,NT完成该IRP时,再次释放时,就蓝屏了。
虽然是个小问题,但是也反映了你对IRP的生命周期不熟悉。
修改后的代码如下:

NTSTATUS FileSystemPassThrough(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
        NTSTATUS Status=STATUS_SUCCESS;

        IoSkipCurrentIrpStackLocation(Irp);
        Status = IoCallDriver(((PFileSystemFilterEx)DeviceObject->DeviceExtension)->nextDeviceObject,Irp);
       
        return Status;
}

至于为什么会定位到这个函数,而不是FileSystemFilterCtrl下的IRP_MN_USER_FS_REQUEST请求,主要看蓝屏时的提示,简要贴个分析过程:
从出错IRP->定位到CurrentStackLocation->MajorFunction ,发现在IRP_MJ_READ时出现问题;
又从 IRP->定位到CurrentStackLocation->DeviceObject->DriverObject,发现在NTFS驱动向下发的IRP是无效的。
而你处理IRP_MJ_READ请求的函数是:FileSystemPassThrough,再分析一下就知道问题了。

呵呵~
驱动编程很简单,简单的前提是,你要能明白其中的各个流程运行的基本原理。只有这样,在实际编写以及出错解决问题的时候,才能事半功倍。像刚才的问题,本来不应该出现的~
2011-4-7 19:03
0
雪    币: 392
活跃值: (89)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
12
修改以后,就不会出现蓝屏了
2011-4-7 19:05
0
雪    币: 34
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
microdebug,对您的感激之情我难以用文字表达,原来是这样,哎,今天一直在删sfilter的代码,没想到居然是passthrough出问题了

对了  再请教一下 我用WINDBG调试 出错后点了那个 !analyze -v 会出现错误提示,但是如何像你

文中说的 可以定位到出错时候的IRP以及看到NTFS驱动向下发的IRP是无效的? 这个是怎么看到的?

在此再次谢谢你。
2011-4-7 19:24
0
游客
登录 | 注册 方可回帖
返回
//