Well, the system thread you are reffering is a system thread , the so called
modified page write thread, which asynchronously writes out modified pages
out to disk. the prototype of FsRtlAcquireFileForModWrite is (best to my
knowledge)
BOOLEAN __stdcall _FsRtlAcquireFileForModWrite@12(PFILE_OBJECT
FileObject,PLARGE_INTEGER EndingOffset,PERESOURCE AcquiringResource);
At the time the modified page writter is calls this function, a IRP has
not yet been sent down to the file system stack. The routine which actualy
buids a pagin IO IRP and sends it down to FSD is IoAsynchronousPageWrite.
The file object should be the file object of one of the system pagefiles.
Now , what your routine basically does is
- Get the BaseFileSystemDeviceObject (this kind of FASTIO call is always
sent down to the base file system, circumventing all filter driver
installed.)
- Get it’s driver object , and from the driver object a pointer to the
driver’s FASTIO dispatch table,
- Verify the size of the FASTIO table is big enough to hold a pointer to
this particular fast io call whithin it , and ensures the retrieved entry
point is non null.
- Call the AcquireModWrite FASTIO point , passing to it
(FileObject,EndingOffset,AcquiringResource,BaseFileSystemDeviceObject)
Tracing the 2k kernel live , we see that at offset 0x18 in this call we
have:
0xD call _IoGetBaseFileSystemDeviceObject
;in EAX , base file system device
0x12 mov ecx, [DEVICE_OBJECT.DriverObject] ;
fetch it’s DRIVER_OBJECT
0x15 mov ecx, [DRIVER_OBJECT.FastIoDispatch]
;fetch a pointer to the FASTIO table
0x18 cmp dword ptr [FASTIO_DISPATCH.Size], 3Ch //
FASTIO table big enough ?
Depending what exact kernel you run , the fault can be elsewhere , but I
really think your FSD does not properly support this fastio , moreover ,
your FASTIO table is not initialized corectly(if at all) the only real
faults of this type can be in somewhere this short range only.
Regards , Dan
----- Original Message -----
From: “Greg Pearce”
To: “File Systems Developers”
Sent: Wednesday, December 26, 2001 9:24 AM
Subject: [ntfsd] Help Please! FSD failure in FsRtlAcquireFileForModWrite
> Hello All -
>
> I have an FSD that blows up (Access Violation C0000005) in a system thread
> when trying to do a FsRtlAcquireFileForModWrite. I can’t find doc on this
> function and I need to know what IRP is causing the failure. The Call
> Stack looks like this:
>
> f2473d74 8043ce2e nt!FsRtlAcquireFileForModWrite+0x18
> f2473da8 80454fde nt!MiMappedPageWriter+0xaa
> f2473ddc 8046a302 nt!PspSystemThreadStartup+0x54
> 00000000 00000000 nt!KiThreadStartup+0x16
>
> It does appear that this is for paging I/O, or OpLocks, neither of which
my
> FSD supports.
>
> Can anyone PLEASE help me here? I’m at a loss for what to do next, and
I’m
> running out of time…!
>
> Thanks, ahead of time.
>
> Greg
>
> —
> You are currently subscribed to ntfsd as: xxxxx@rdsor.ro
> To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com
>
—
You are currently subscribed to ntfsd as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com