Fix FsRtl function prototypes

svn path=/trunk/; revision=13166
This commit is contained in:
Alex Ionescu 2005-01-20 13:31:49 +00:00
parent 1afa98bcff
commit 0b7bbeea36
5 changed files with 60 additions and 96 deletions

View file

@ -5,50 +5,13 @@
#include <ntos/fstypes.h> #include <ntos/fstypes.h>
/* Some comments on the Prototypes that aren't in the GNU IFS: /* Some comments on the Prototypes that aren't in the IFS:
The following come from alternate sources, or guessed from documentation:
FsRtlNotifyFullChangeDirectory GOOGLE GROUPS
FsRtlIsPagingFile OSR DOCUMENTATION
FsRtlAcquireFileExclusive (GUESS: The function takes a single parameter. The function name is "AcquireFile". Logical assumption says this is a File Object. NTFSD ML Post confirms.)
FsRtlReleaseFile (GUESS: The function takes a single parameter. The function name is "AcquireFile". Logical assumption says this is a File Object. NTFSD ML Post confirms.)
FsRtlMdlReadCompleteDev (FsRtlMdlReadComplete is on GNU IFS. The Dev Suffix simply means an extra PDEVICE_OBJECT param) FsRtlMdlReadCompleteDev (FsRtlMdlReadComplete is on GNU IFS. The Dev Suffix simply means an extra PDEVICE_OBJECT param)
FsRtlMdlReadDev (FsRtlMdlReadDev is on GNU IFS. The Dev Suffix simply means an extra PDEVICE_OBJECT param) FsRtlMdlReadDev (FsRtlMdlReadDev is on GNU IFS. The Dev Suffix simply means an extra PDEVICE_OBJECT param)
FsRtlMdlWriteCompleteDev FsRtlMdlWriteCompleteDev is on GNU IFS. The Dev Suffix simply means an extra PDEVICE_OBJECT param) FsRtlMdlWriteCompleteDev FsRtlMdlWriteCompleteDev is on GNU IFS. The Dev Suffix simply means an extra PDEVICE_OBJECT param)
FsRtlPrepareMdlWrite (Compared with CcMdlWrite, which is already documented) FsRtlPrepareMdlWrite (Compared with CcMdlWrite, which is already documented)
FsRtlPrepareMdlWriteDev (Same as above, and add a pointer to device object (Dev suffix) FsRtlPrepareMdlWriteDev (Same as above, and add a pointer to device object (Dev suffix)
FsRtlGetNextMcbEntry(FsRtlGetNextLargeMcbEntry is documented and uses LONGLONGs. Logical assumption that this one only uses LONGS and non-large MCB (Documented))
Stream Context. Going along with public OSR documenttion:
FsRtlInsertPerStreamContext:
"This call is used by the file system filter driver to associate a given context block
(allocated by the filter and initialized using FsRtlInitPerStreamContext) with the stream associated with the given file object."
Notice we are told "given context block...initialized using FsRtlInitPerStreamContext". This function description tells us:
" provide space for the FSRTL_PER_STREAM_CONTEXT block in the filter drivers context structure"
Therefore, one of the parameters is PFSRTL_PER_STREAM_CONTEXT.
"with the stream associated with the given file object." The OSR Documentations then mentions:
"Tracking per-file (or “per stream”) context information in FSRTL_ADVANCED_FCB_HEADER"
So we are associating a FSRTL_PER_STREAM_CONTEXT block with the FSRTL_ADVANCED_FCB_HEADER associated with the file object.
FSRTL_ADVANCED_FCB_HEADER is documented by a search through Google.
FSRTL_PER_STREAM_CONTEXT is *NOT* documented anywhere else then in the IFS, so it has been removed.
FsRtlLookupPerStreamContextInternal
"FsRtlLookupPerStreamContext this call is used by the file system filter driver to locate a given context
block that is associated with the file object. Typically, a file system filter driver will identify its
own context block using unique OwnerId and InstanceId parameters when creating the context block and subsequently
when locating the associated information."
OSR tells us here that the last two parameters are OwnerId and InstanceId. It also says it will find a given context block,
so there's our Return Value. (Although, not being documented, we must put PVOID). It looks into a file object's stream, so we
probably need that FCB header again.
FsRtlRemovePerStreamContext
OSR is vague, so all we know for sure is that we are sending an FCB Header. The return value isn't NTSTATUS, but seems to be a
pointer. We don't know what the two other parameters are, so they have been marked as unknown.
FsRtlTeardownPerStreamContexts
OSR doens't tell a lot, but we only have one parameter. It must be the FCB Header. Furthermore, the CVS of Captive implements
this function as a stub, and confirms the theory.
*/ */
@ -144,10 +107,10 @@ FsRtlAreNamesEqual (
IN BOOLEAN IgnoreCase, IN BOOLEAN IgnoreCase,
IN PWCHAR UpcaseTable OPTIONAL IN PWCHAR UpcaseTable OPTIONAL
); );
DWORD NTSTATUS
STDCALL STDCALL
FsRtlBalanceReads ( FsRtlBalanceReads (
DWORD Unknown0 PDEVICE_OBJECT TargetDevice
); );
BOOLEAN BOOLEAN
STDCALL STDCALL
@ -372,17 +335,19 @@ BOOLEAN STDCALL
FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, FsRtlIsDbcsInExpression(IN PANSI_STRING Expression,
IN PANSI_STRING Name); IN PANSI_STRING Name);
BOOLEAN STDCALL BOOLEAN
FsRtlIsFatDbcsLegal(IN ANSI_STRING Name, STDCALL
IN BOOLEAN Unknown2, FsRtlIsFatDbcsLegal(IN ANSI_STRING DbcsName,
IN BOOLEAN Unknown3, IN BOOLEAN WildCardsPermissible,
IN BOOLEAN Unknown4); IN BOOLEAN PathNamePermissible,
IN BOOLEAN LeadingBackslashPermissible);
BOOLEAN STDCALL BOOLEAN
FsRtlIsHpfsDbcsLegal(IN ANSI_STRING Name, STDCALL
IN BOOLEAN Unknown2, FsRtlIsHpfsDbcsLegal(IN ANSI_STRING DbcsName,
IN BOOLEAN Unknown3, IN BOOLEAN WildCardsPermissible,
IN BOOLEAN Unknown4); IN BOOLEAN PathNamePermissible,
IN BOOLEAN LeadingBackslashPermissible);
BOOLEAN BOOLEAN
STDCALL STDCALL
@ -701,19 +666,15 @@ FsRtlNumberOfRunsInMcb (IN PMCB Mcb);
VOID VOID
STDCALL STDCALL
FsRtlPostPagingFileStackOverflow ( FsRtlPostPagingFileStackOverflow(IN PVOID Context,
ULONG Unknown0, IN PKEVENT Event,
ULONG Unknown1, IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine) ;
ULONG Unknown2
);
VOID VOID
STDCALL STDCALL
FsRtlPostStackOverflow ( FsRtlPostStackOverflow (IN PVOID Context,
ULONG Unknown0, IN PKEVENT Event,
ULONG Unknown1, IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine) ;
ULONG Unknown2
);
BOOLEAN BOOLEAN
STDCALL STDCALL
@ -742,10 +703,8 @@ FsRtlProcessFileLock (
NTSTATUS NTSTATUS
STDCALL STDCALL
FsRtlRegisterFileSystemFilterCallbacks ( FsRtlRegisterFileSystemFilterCallbacks(IN PDRIVER_OBJECT FilterDriverObject,
IN PVOID Unknown1, IN PFS_FILTER_CALLBACKS Callbacks);
IN PVOID Unknown2
);
NTSTATUS STDCALL NTSTATUS STDCALL
FsRtlRegisterUncProvider(IN OUT PHANDLE Handle, FsRtlRegisterUncProvider(IN OUT PHANDLE Handle,
@ -772,8 +731,8 @@ PFSRTL_PER_STREAM_CONTEXT
STDCALL STDCALL
FsRtlRemovePerStreamContext ( FsRtlRemovePerStreamContext (
IN PFSRTL_ADVANCED_FCB_HEADER StreamContext, IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
IN PVOID Unknown1 OPTIONAL, IN PVOID OwnerId OPTIONAL,
IN PVOID Unknown2 OPTIONAL IN PVOID InstanceId OPTIONAL
); );
PVOID /* PFSRTL_PER_FILE_OBJECT_CONTEXT*/ PVOID /* PFSRTL_PER_FILE_OBJECT_CONTEXT*/

View file

@ -30,6 +30,12 @@ typedef NTSTATUS (*PCOMPLETE_LOCK_IRP_ROUTINE) (
IN PIRP Irp IN PIRP Irp
); );
typedef VOID (*PFSRTL_STACK_OVERFLOW_ROUTINE) (
IN PVOID Context,
IN PKEVENT Event
);
typedef VOID (*PUNLOCK_ROUTINE) ( typedef VOID (*PUNLOCK_ROUTINE) (
IN PVOID Context, IN PVOID Context,
IN PFILE_LOCK_INFO FileLockInfo IN PFILE_LOCK_INFO FileLockInfo

View file

@ -283,11 +283,12 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression,
* *
* @unimplemented * @unimplemented
*/ */
BOOLEAN STDCALL BOOLEAN
FsRtlIsFatDbcsLegal(IN ANSI_STRING Name, STDCALL
IN BOOLEAN Unknown2, FsRtlIsFatDbcsLegal(IN ANSI_STRING DbcsName,
IN BOOLEAN Unknown3, IN BOOLEAN WildCardsPermissible,
IN BOOLEAN Unknown4) IN BOOLEAN PathNamePermissible,
IN BOOLEAN LeadingBackslashPermissible)
{ {
return FALSE; return FALSE;
} }
@ -306,10 +307,10 @@ FsRtlIsFatDbcsLegal(IN ANSI_STRING Name,
* @unimplemented * @unimplemented
*/ */
BOOLEAN STDCALL BOOLEAN STDCALL
FsRtlIsHpfsDbcsLegal(IN ANSI_STRING Name, FsRtlIsHpfsDbcsLegal(IN ANSI_STRING DbcsName,
IN BOOLEAN Unknown2, IN BOOLEAN WildCardsPermissible,
IN BOOLEAN Unknown3, IN BOOLEAN PathNamePermissible,
IN BOOLEAN Unknown4) IN BOOLEAN LeadingBackslashPermissible)
{ {
return FALSE; return FALSE;
} }

View file

@ -313,10 +313,8 @@ FsRtlNotifyVolumeEvent (
*/ */
NTSTATUS NTSTATUS
STDCALL STDCALL
FsRtlRegisterFileSystemFilterCallbacks ( FsRtlRegisterFileSystemFilterCallbacks(IN PDRIVER_OBJECT FilterDriverObject,
IN PVOID Unknown1, IN PFS_FILTER_CALLBACKS Callbacks)
IN PVOID Unknown2
)
{ {
UNIMPLEMENTED; UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;

View file

@ -157,7 +157,8 @@ DWORD
STDCALL STDCALL
FsRtlAllocateResource (VOID) FsRtlAllocateResource (VOID)
{ {
return 0; UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
} }
@ -174,13 +175,12 @@ FsRtlAllocateResource (VOID)
* *
* @unimplemented * @unimplemented
*/ */
DWORD NTSTATUS
STDCALL STDCALL
FsRtlBalanceReads ( FsRtlBalanceReads (PDEVICE_OBJECT TargetDevice)
DWORD Unknown0
)
{ {
return 0; UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
} }
@ -212,6 +212,7 @@ FsRtlCopyRead (
IN PDEVICE_OBJECT DeviceObject IN PDEVICE_OBJECT DeviceObject
) )
{ {
UNIMPLEMENTED;
return FALSE; return FALSE;
} }
@ -244,6 +245,7 @@ FsRtlCopyWrite (
IN PDEVICE_OBJECT DeviceObject IN PDEVICE_OBJECT DeviceObject
) )
{ {
UNIMPLEMENTED;
return FALSE; return FALSE;
} }
@ -341,12 +343,11 @@ FsRtlInsertPerFileObjectContext (
*/ */
VOID VOID
STDCALL STDCALL
FsRtlPostPagingFileStackOverflow ( FsRtlPostPagingFileStackOverflow(IN PVOID Context,
DWORD Unknown0, IN PKEVENT Event,
DWORD Unknown1, IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine)
DWORD Unknown2
)
{ {
UNIMPLEMENTED;
} }
@ -364,12 +365,11 @@ FsRtlPostPagingFileStackOverflow (
*/ */
VOID VOID
STDCALL STDCALL
FsRtlPostStackOverflow ( FsRtlPostStackOverflow (IN PVOID Context,
DWORD Unknown0, IN PKEVENT Event,
DWORD Unknown1, IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine)
DWORD Unknown2
)
{ {
UNIMPLEMENTED;
} }