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>
/* 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)
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)
FsRtlPrepareMdlWrite (Compared with CcMdlWrite, which is already documented)
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 PWCHAR UpcaseTable OPTIONAL
);
DWORD
NTSTATUS
STDCALL
FsRtlBalanceReads (
DWORD Unknown0
PDEVICE_OBJECT TargetDevice
);
BOOLEAN
STDCALL
@ -371,18 +334,20 @@ FsRtlInsertPerStreamContext (
BOOLEAN STDCALL
FsRtlIsDbcsInExpression(IN PANSI_STRING Expression,
IN PANSI_STRING Name);
BOOLEAN
STDCALL
FsRtlIsFatDbcsLegal(IN ANSI_STRING DbcsName,
IN BOOLEAN WildCardsPermissible,
IN BOOLEAN PathNamePermissible,
IN BOOLEAN LeadingBackslashPermissible);
BOOLEAN STDCALL
FsRtlIsFatDbcsLegal(IN ANSI_STRING Name,
IN BOOLEAN Unknown2,
IN BOOLEAN Unknown3,
IN BOOLEAN Unknown4);
BOOLEAN STDCALL
FsRtlIsHpfsDbcsLegal(IN ANSI_STRING Name,
IN BOOLEAN Unknown2,
IN BOOLEAN Unknown3,
IN BOOLEAN Unknown4);
BOOLEAN
STDCALL
FsRtlIsHpfsDbcsLegal(IN ANSI_STRING DbcsName,
IN BOOLEAN WildCardsPermissible,
IN BOOLEAN PathNamePermissible,
IN BOOLEAN LeadingBackslashPermissible);
BOOLEAN
STDCALL
@ -701,19 +666,15 @@ FsRtlNumberOfRunsInMcb (IN PMCB Mcb);
VOID
STDCALL
FsRtlPostPagingFileStackOverflow (
ULONG Unknown0,
ULONG Unknown1,
ULONG Unknown2
);
FsRtlPostPagingFileStackOverflow(IN PVOID Context,
IN PKEVENT Event,
IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine) ;
VOID
STDCALL
FsRtlPostStackOverflow (
ULONG Unknown0,
ULONG Unknown1,
ULONG Unknown2
);
FsRtlPostStackOverflow (IN PVOID Context,
IN PKEVENT Event,
IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine) ;
BOOLEAN
STDCALL
@ -742,10 +703,8 @@ FsRtlProcessFileLock (
NTSTATUS
STDCALL
FsRtlRegisterFileSystemFilterCallbacks (
IN PVOID Unknown1,
IN PVOID Unknown2
);
FsRtlRegisterFileSystemFilterCallbacks(IN PDRIVER_OBJECT FilterDriverObject,
IN PFS_FILTER_CALLBACKS Callbacks);
NTSTATUS STDCALL
FsRtlRegisterUncProvider(IN OUT PHANDLE Handle,
@ -772,8 +731,8 @@ PFSRTL_PER_STREAM_CONTEXT
STDCALL
FsRtlRemovePerStreamContext (
IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
IN PVOID Unknown1 OPTIONAL,
IN PVOID Unknown2 OPTIONAL
IN PVOID OwnerId OPTIONAL,
IN PVOID InstanceId OPTIONAL
);
PVOID /* PFSRTL_PER_FILE_OBJECT_CONTEXT*/

View file

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

View file

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

View file

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

View file

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