Hi, all
I have tried to install my filter driver (a layered file system actually)
under Windows Vista, and it crashed. When I analyzed the crash,
I have found this stack trace:
ChildEBP RetAddr Args to Child
82e07554 814386f2 82e075a0 00000000 82715020
Ntfs!NtfsFilterCallbackAcquireForCreateSection+0x21
82e0757c 81581fe9 00e075a0 00000001 00000001
nt!FsFilterPerformCallbacks+0xa2
82e076d4 81588814 8282e648 00000001 00000010
nt!FsRtlAcquireFileExclusiveCommon+0x181
82e076ec 8158722f 8282e648 00000010 00000001
nt!FsRtlAcquireToCreateMappedSection+0x15
82e077cc 81572b4b 82e07818 00000008 82e07928 nt!MmCreateSection+0x246
82e07834 8142ba71 82e0795c 00000008 82e07928 nt!NtCreateSection+0x13a
82e07834 81429701 82e0795c 00000008 82e07928 nt!KiFastCallEntry+0x11e
82e078c8 81531a16 82e0795c 00000008 82e07928 nt!ZwCreateSection+0x11
82e07980 81531c00 800000ec 00000000 814e1850 nt!MmCheckSystemImage+0x52
82e079c8 8153199f 82e07aac 00000002 82e079e8
nt!MiCreateSectionForDriver+0x9c
82e079ec 81531698 82e07a1c 82e07aac 00000002
nt!MiObtainSectionForDriver+0x8c
82e07a7c 814079f6 82e07aac 00000000 82141b00 nt!MmLoadSystemImage+0x18b
82e07abc 81407ab4 82e07c2b 82e07ae4 81511ede nt!IopLoadCrashdumpDriver+0x36
82e07ac8 81511ede 000000f0 0080007e 81511f04
nt!IoInitializeCrashDumpNew+0x21
82e07ae4 816c75b7 000000f0 852366e8 85236688 nt!IoInitializeCrashDump+0x89
82e07b20 815189cb 852366f0 00000001 000000f0
nt!IopInitCrashDumpRegCallback+0x8a
82e07b6c 81557ccb 82e07bf0 852366c0 82e07bcc
nt!RtlpCallQueryRegistryRoutine+0x222
82e07bd0 816c765d 00000000 00000092 00000002 nt!RtlQueryRegistryValues+0x2d2
82e07c2c 816c8f79 80823df0 00033000 00000000
nt!IopInitCrashDumpDuringSysInit+0x4a
82e07c94 816cc609 80823df0 00000000 82141b00 nt!IoInitSystem+0x68c
During a bit deeper digging, I looked at the code of
FsRtlAcquireFileExclusiveCommon,
I found something as:
FsRtlAcquireFileExclusiveCommon(PFILE_OBJECT FileObject, BOOLEAN Something)
{
PFAST_IO_DISPATCH FastIoDispatch;
PFS_FILTER_CALLBACKS FsFilterCallbacks;
PDRIVER_EXTENSION DriverExt;
PDEVICE_OBJECT RelDeviceObject;
PDEVICE_OBJECT FsDeviceObject;
PDRIVER_OBJECT FsDriverObject;
RelDeviceObject = IoGetRelatedDeviceObject(FileObject);
FsDeviceObject = IoGetBaseFileSystemDeviceObject(FileObject);
FsDriverObject = FsDeviceObject->DriverObject;
FastIoDispatch = FsDriverObject->FastIoDispatch;
DriverExt = FsDriverObject->DriverExtension;
FsFilterCallbacks = DriverExt->FsFilterCallbacks;
if(DriverExt != NULL && DriverExt->SizeOfFsFilterCallbacks < 0x0C)
// Jump somewhere
This was enough for me to know that the problem is caused by
missing implementation of FS_FILTER_CALLBACKS in my filter.
Unfortunately, I don’t have the latest IFS kit, so I know nothing
about these callbacks (except for what I’ve found in the type
information).
Before I’ll start dissassembling the kernel (again) for finding more info,
I would like to ask:
Is this feature Vista-specific ? Is some information available ?
Is this feature documented in the IFS kit for W2K3 SP1 ?
Regards,
L.