mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-29 19:26:33 +00:00
Implement FsRtlAllocateResource, FsRtlIsPagingFile, FsRtlBalanceReads. Fix some incorrect function prototypes, rename mdl.c to fastio.c and add some more functions to it. Implement FsRtlGetfileSize to use fastio, combine dbcsname.c and name.c and pretty-fy the array, clean up some ugly formatting. Create context.c and move stream/file context routines there.
svn path=/trunk/; revision=15084
This commit is contained in:
@@ -84,7 +84,7 @@ FsRtlAllocatePoolWithTag (
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG Tag
|
||||
);
|
||||
DWORD
|
||||
PERESOURCE
|
||||
STDCALL
|
||||
FsRtlAllocateResource (
|
||||
VOID
|
||||
@@ -351,7 +351,7 @@ FsRtlIsNameInExpression (
|
||||
BOOLEAN STDCALL
|
||||
FsRtlIsNtstatusExpected(IN NTSTATUS NtStatus);
|
||||
|
||||
ULONG
|
||||
BOOLEAN STDCALL
|
||||
FsRtlIsPagingFile (
|
||||
IN PFILE_OBJECT FileObject
|
||||
);
|
||||
|
||||
@@ -239,10 +239,10 @@ OBJECTS_EX = \
|
||||
|
||||
# Installable File System Run-Time Library (FsRtl)
|
||||
OBJECTS_FS = \
|
||||
fs/dbcsname.o \
|
||||
fs/context.o \
|
||||
fs/fastio.o \
|
||||
fs/filelock.o \
|
||||
fs/mcb.o \
|
||||
fs/mdl.o \
|
||||
fs/name.o \
|
||||
fs/notify.o \
|
||||
fs/oplock.o \
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/fs/context.c
|
||||
* PURPOSE: File and Stream Context Functions
|
||||
*
|
||||
* PROGRAMMERS: Alex Ionescu ([email protected])
|
||||
*/
|
||||
|
||||
/* INCLUDES *****************************************************************/
|
||||
|
||||
#include <ntoskrnl.h>
|
||||
#include <internal/debug.h>
|
||||
|
||||
/* GLOBALS *******************************************************************/
|
||||
|
||||
/* PRIVATE FUNCTIONS**********************************************************/
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
FsRtlInsertPerStreamContext(IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
|
||||
IN PFSRTL_PER_STREAM_CONTEXT Ptr)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
PFSRTL_PER_STREAM_CONTEXT
|
||||
STDCALL
|
||||
FsRtlRemovePerStreamContext(IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
|
||||
IN PVOID OwnerId OPTIONAL,
|
||||
IN PVOID InstanceId OPTIONAL)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
FsRtlInsertPerFileObjectContext(IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext,
|
||||
IN PVOID /* PFSRTL_PER_FILE_OBJECT_CONTEXT*/ Ptr)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
PVOID /* PFSRTL_PER_FILE_OBJECT_CONTEXT*/
|
||||
STDCALL
|
||||
FsRtlRemovePerFileObjectContext(IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext,
|
||||
IN PVOID OwnerId OPTIONAL,
|
||||
IN PVOID InstanceId OPTIONAL)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
VOID
|
||||
STDCALL
|
||||
FsRtlTeardownPerStreamContexts(IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
@@ -1,322 +0,0 @@
|
||||
/* $Id$
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/fs/dbcsname.c
|
||||
* PURPOSE: No purpose listed.
|
||||
*
|
||||
* PROGRAMMERS: No programmer listed.
|
||||
*/
|
||||
|
||||
#include <ntoskrnl.h>
|
||||
|
||||
/* DATA ********************************************************************/
|
||||
|
||||
static UCHAR LegalAnsiCharacterArray[] =
|
||||
{
|
||||
0, /* CTRL+@, 0x00 */
|
||||
0, /* CTRL+A, 0x01 */
|
||||
0, /* CTRL+B, 0x02 */
|
||||
0, /* CTRL+C, 0x03 */
|
||||
0, /* CTRL+D, 0x04 */
|
||||
0, /* CTRL+E, 0x05 */
|
||||
0, /* CTRL+F, 0x06 */
|
||||
0, /* CTRL+G, 0x07 */
|
||||
0, /* CTRL+H, 0x08 */
|
||||
0, /* CTRL+I, 0x09 */
|
||||
0, /* CTRL+J, 0x0a */
|
||||
0, /* CTRL+K, 0x0b */
|
||||
0, /* CTRL+L, 0x0c */
|
||||
0, /* CTRL+M, 0x0d */
|
||||
0, /* CTRL+N, 0x0e */
|
||||
0, /* CTRL+O, 0x0f */
|
||||
0, /* CTRL+P, 0x10 */
|
||||
0, /* CTRL+Q, 0x11 */
|
||||
0, /* CTRL+R, 0x12 */
|
||||
0, /* CTRL+S, 0x13 */
|
||||
0, /* CTRL+T, 0x14 */
|
||||
0, /* CTRL+U, 0x15 */
|
||||
0, /* CTRL+V, 0x16 */
|
||||
0, /* CTRL+W, 0x17 */
|
||||
0, /* CTRL+X, 0x18 */
|
||||
0, /* CTRL+Y, 0x19 */
|
||||
0, /* CTRL+Z, 0x1a */
|
||||
0, /* CTRL+[, 0x1b */
|
||||
0, /* CTRL+\, 0x1c */
|
||||
0, /* CTRL+], 0x1d */
|
||||
0, /* CTRL+^, 0x1e */
|
||||
0, /* CTRL+_, 0x1f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* ` ', 0x20 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `!', 0x21 */
|
||||
FSRTL_WILD_CHARACTER, /* `"', 0x22 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `#', 0x23 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `$', 0x24 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `%', 0x25 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `&', 0x26 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `'', 0x27 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `(', 0x28 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `)', 0x29 */
|
||||
FSRTL_WILD_CHARACTER, /* `*', 0x2a */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `+', 0x2b */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `,', 0x2c */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `-', 0x2d */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `.', 0x2e */
|
||||
0, /* `/', 0x2f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `0', 0x30 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `1', 0x31 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `2', 0x32 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `3', 0x33 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `4', 0x34 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `5', 0x35 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `6', 0x36 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `7', 0x37 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `8', 0x38 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `9', 0x39 */
|
||||
FSRTL_NTFS_LEGAL, /* `:', 0x3a */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `;', 0x3b */
|
||||
FSRTL_WILD_CHARACTER, /* `<', 0x3c */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `=', 0x3d */
|
||||
FSRTL_WILD_CHARACTER, /* `>', 0x3e */
|
||||
FSRTL_WILD_CHARACTER, /* `?', 0x3f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `@', 0x40 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `A', 0x41 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `B', 0x42 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `C', 0x43 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `D', 0x44 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `E', 0x45 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `F', 0x46 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `G', 0x47 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `H', 0x48 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `I', 0x49 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `J', 0x4a */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `K', 0x4b */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `L', 0x4c */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `M', 0x4d */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `N', 0x4e */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `O', 0x4f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `P', 0x50 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `Q', 0x51 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `R', 0x52 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `S', 0x53 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `T', 0x54 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `U', 0x55 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `V', 0x56 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `W', 0x57 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `X', 0x58 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `Y', 0x59 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `Z', 0x5a */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `[', 0x5b */
|
||||
0, /* `\', 0x5c */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `]', 0x5d */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `^', 0x5e */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `_', 0x5f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* ``', 0x60 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `a', 0x61 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `b', 0x62 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `c', 0x63 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `d', 0x64 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `e', 0x65 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `f', 0x66 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `g', 0x67 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `h', 0x68 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `i', 0x69 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `j', 0x6a */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `k', 0x6b */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `l', 0x6c */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `m', 0x6d */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `n', 0x6e */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `o', 0x6f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `p', 0x70 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `q', 0x71 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `r', 0x72 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `s', 0x73 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `t', 0x74 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `u', 0x75 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `v', 0x76 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `w', 0x77 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `x', 0x78 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `y', 0x79 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `z', 0x7a */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `{', 0x7b */
|
||||
0, /* `|', 0x7c */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `}', 0x7d */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `~', 0x7e */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL /* 0x7f */
|
||||
};
|
||||
|
||||
PUCHAR EXPORTED FsRtlLegalAnsiCharacterArray = LegalAnsiCharacterArray;
|
||||
|
||||
|
||||
/* FUNCTIONS ***************************************************************/
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlDissectDbcs@16
|
||||
*
|
||||
* Dissects a given path name into first and remaining part.
|
||||
*
|
||||
* ARGUMENTS
|
||||
* Name
|
||||
* ANSI string to dissect.
|
||||
*
|
||||
* FirstPart
|
||||
* Pointer to user supplied ANSI_STRING, that will
|
||||
* later point to the first part of the original name.
|
||||
*
|
||||
* RemainingPart
|
||||
* Pointer to user supplied ANSI_STRING, that will
|
||||
* later point to the remaining part of the original name.
|
||||
*
|
||||
* RETURN VALUE
|
||||
* None
|
||||
*
|
||||
* EXAMPLE
|
||||
* Name: \test1\test2\test3
|
||||
* FirstPart: test1
|
||||
* RemainingPart: test2\test3
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
VOID STDCALL
|
||||
FsRtlDissectDbcs(IN ANSI_STRING Name,
|
||||
OUT PANSI_STRING FirstPart,
|
||||
OUT PANSI_STRING RemainingPart)
|
||||
{
|
||||
ULONG i;
|
||||
ULONG FirstLoop;
|
||||
|
||||
/* Initialize the Outputs */
|
||||
RtlZeroMemory(&FirstPart, sizeof(ANSI_STRING));
|
||||
RtlZeroMemory(&RemainingPart, sizeof(ANSI_STRING));
|
||||
|
||||
/* Bail out if empty */
|
||||
if (!Name.Length) return;
|
||||
|
||||
/* Ignore backslash */
|
||||
if (Name.Buffer[0] == '\\') {
|
||||
i = 1;
|
||||
} else {
|
||||
i = 0;
|
||||
}
|
||||
|
||||
/* Loop until we find a backslash */
|
||||
for (FirstLoop = i;i < Name.Length;i++) {
|
||||
if (Name.Buffer[i] != '\\') break;
|
||||
if (FsRtlIsLeadDbcsCharacter(Name.Buffer[i])) i++;
|
||||
}
|
||||
|
||||
/* Now we have the First Part */
|
||||
FirstPart->Length = (i-FirstLoop);
|
||||
FirstPart->MaximumLength = FirstPart->Length; /* +2?? */
|
||||
FirstPart->Buffer = &Name.Buffer[FirstLoop];
|
||||
|
||||
/* Make the second part if something is still left */
|
||||
if (i<Name.Length) {
|
||||
RemainingPart->Length = (Name.Length - (i+1));
|
||||
RemainingPart->MaximumLength = RemainingPart->Length; /* +2?? */
|
||||
RemainingPart->Buffer = &Name.Buffer[i+1];
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlDoesDbcsContainWildCards@4
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
BOOLEAN STDCALL
|
||||
FsRtlDoesDbcsContainWildCards(IN PANSI_STRING Name)
|
||||
{
|
||||
ULONG i;
|
||||
|
||||
/* Check every character */
|
||||
for (i=0;i < Name->Length;i++) {
|
||||
|
||||
/* First make sure it's not the Lead DBCS */
|
||||
if (FsRtlIsLeadDbcsCharacter(Name->Buffer[i])) {
|
||||
i++;
|
||||
} else if (FsRtlIsAnsiCharacterWild(Name->Buffer[i])) {
|
||||
/* Now return if it has a Wilcard */
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/* We didn't return above...so none found */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlIsDbcsInExpression@8
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
BOOLEAN STDCALL
|
||||
FsRtlIsDbcsInExpression(IN PANSI_STRING Expression,
|
||||
IN PANSI_STRING Name)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlIsFatDbcsLegal@20
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlIsFatDbcsLegal(IN ANSI_STRING DbcsName,
|
||||
IN BOOLEAN WildCardsPermissible,
|
||||
IN BOOLEAN PathNamePermissible,
|
||||
IN BOOLEAN LeadingBackslashPermissible)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlIsHpfsDbcsLegal@20
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
BOOLEAN STDCALL
|
||||
FsRtlIsHpfsDbcsLegal(IN ANSI_STRING DbcsName,
|
||||
IN BOOLEAN WildCardsPermissible,
|
||||
IN BOOLEAN PathNamePermissible,
|
||||
IN BOOLEAN LeadingBackslashPermissible)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS Kernel
|
||||
* FILE: ntoskrnl/fs/mdl.c
|
||||
* PURPOSE: Cached MDL Access Helper Routines for File System Drivers
|
||||
* FILE: ntoskrnl/fs/fastio.c
|
||||
* PURPOSE: File System Routines which support Fast I/O or Cc Access.
|
||||
*
|
||||
* PROGRAMMERS: Alex Ionescu (alex@relsoft.net)
|
||||
*/
|
||||
@@ -60,6 +60,125 @@ FsRtlIncrementCcFastReadNoWait( VOID )
|
||||
CcFastReadNoWait++;
|
||||
}
|
||||
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlCopyRead@32
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* NOTE
|
||||
* From Bo Branten's ntifs.h v12.
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlCopyRead(IN PFILE_OBJECT FileObject,
|
||||
IN PLARGE_INTEGER FileOffset,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Wait,
|
||||
IN ULONG LockKey,
|
||||
OUT PVOID Buffer,
|
||||
OUT PIO_STATUS_BLOCK IoStatus,
|
||||
IN PDEVICE_OBJECT DeviceObject)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlCopyWrite@32
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* NOTE
|
||||
* From Bo Branten's ntifs.h v12.
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlCopyWrite(IN PFILE_OBJECT FileObject,
|
||||
IN PLARGE_INTEGER FileOffset,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Wait,
|
||||
IN ULONG LockKey,
|
||||
OUT PVOID Buffer,
|
||||
OUT PIO_STATUS_BLOCK IoStatus,
|
||||
IN PDEVICE_OBJECT DeviceObject)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlGetFileSize@8
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
FsRtlGetFileSize(IN PFILE_OBJECT FileObject,
|
||||
IN OUT PLARGE_INTEGER FileSize)
|
||||
{
|
||||
FILE_STANDARD_INFORMATION Info;
|
||||
NTSTATUS Status;
|
||||
IO_STATUS_BLOCK IoStatusBlock;
|
||||
ULONG Length;
|
||||
PDEVICE_OBJECT DeviceObject;
|
||||
PFAST_IO_DISPATCH FastDispatch;
|
||||
|
||||
/* Get Device Object and Fast Calls */
|
||||
DeviceObject = IoGetRelatedDeviceObject(FileObject);
|
||||
FastDispatch = DeviceObject->DriverObject->FastIoDispatch;
|
||||
|
||||
/* Check if we support Fast Calls, and check this one */
|
||||
if (FastDispatch && FastDispatch->FastIoQueryStandardInfo)
|
||||
{
|
||||
/* Fast Path */
|
||||
FastDispatch->FastIoQueryStandardInfo(FileObject,
|
||||
TRUE,
|
||||
&Info,
|
||||
&IoStatusBlock,
|
||||
DeviceObject);
|
||||
Status = IoStatusBlock.Status;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Slow Path */
|
||||
Status = IoQueryFileInformation(FileObject,
|
||||
FileStandardInformation,
|
||||
sizeof(Info),
|
||||
&Info,
|
||||
&Length);
|
||||
}
|
||||
|
||||
/* Check success */
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
*FileSize = Info.EndOfFile;
|
||||
}
|
||||
|
||||
/* Return status */
|
||||
return Status;
|
||||
}
|
||||
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlMdlRead@24
|
||||
@@ -391,5 +510,4 @@ FsRtlPrepareMdlWriteDev(IN PFILE_OBJECT FileObject,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* EOF */
|
||||
+364
-53
@@ -1,39 +1,180 @@
|
||||
/* $Id$
|
||||
*
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/fs/name.c
|
||||
* PURPOSE: No purpose listed.
|
||||
* PURPOSE: Name and DBCS Name Validation and Dissection Functions.
|
||||
*
|
||||
* PROGRAMMERS: No programmer listed.
|
||||
* PROGRAMMERS: Alex Ionescu ([email protected])
|
||||
* Eric Kohl
|
||||
* Filip Navara
|
||||
*/
|
||||
|
||||
/* INCLUDES ****************************************************************/
|
||||
|
||||
#include <ntoskrnl.h>
|
||||
#define NDEBUG
|
||||
#include <internal/debug.h>
|
||||
|
||||
/* FUNCTIONS ***************************************************************/
|
||||
/* GLOBALS *******************************************************************/
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlAreNamesEqual@16
|
||||
static UCHAR LegalAnsiCharacterArray[] =
|
||||
{
|
||||
0, /* CTRL+@, 0x00 */
|
||||
0, /* CTRL+A, 0x01 */
|
||||
0, /* CTRL+B, 0x02 */
|
||||
0, /* CTRL+C, 0x03 */
|
||||
0, /* CTRL+D, 0x04 */
|
||||
0, /* CTRL+E, 0x05 */
|
||||
0, /* CTRL+F, 0x06 */
|
||||
0, /* CTRL+G, 0x07 */
|
||||
0, /* CTRL+H, 0x08 */
|
||||
0, /* CTRL+I, 0x09 */
|
||||
0, /* CTRL+J, 0x0a */
|
||||
0, /* CTRL+K, 0x0b */
|
||||
0, /* CTRL+L, 0x0c */
|
||||
0, /* CTRL+M, 0x0d */
|
||||
0, /* CTRL+N, 0x0e */
|
||||
0, /* CTRL+O, 0x0f */
|
||||
0, /* CTRL+P, 0x10 */
|
||||
0, /* CTRL+Q, 0x11 */
|
||||
0, /* CTRL+R, 0x12 */
|
||||
0, /* CTRL+S, 0x13 */
|
||||
0, /* CTRL+T, 0x14 */
|
||||
0, /* CTRL+U, 0x15 */
|
||||
0, /* CTRL+V, 0x16 */
|
||||
0, /* CTRL+W, 0x17 */
|
||||
0, /* CTRL+X, 0x18 */
|
||||
0, /* CTRL+Y, 0x19 */
|
||||
0, /* CTRL+Z, 0x1a */
|
||||
0, /* CTRL+[, 0x1b */
|
||||
0, /* CTRL+\, 0x1c */
|
||||
0, /* CTRL+], 0x1d */
|
||||
0, /* CTRL+^, 0x1e */
|
||||
0, /* CTRL+_, 0x1f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* ` ', 0x20 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `!', 0x21 */
|
||||
FSRTL_WILD_CHARACTER, /* `"', 0x22 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `#', 0x23 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `$', 0x24 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `%', 0x25 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `&', 0x26 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `'', 0x27 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `(', 0x28 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `)', 0x29 */
|
||||
FSRTL_WILD_CHARACTER, /* `*', 0x2a */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `+', 0x2b */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `,', 0x2c */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `-', 0x2d */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `.', 0x2e */
|
||||
0, /* `/', 0x2f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `0', 0x30 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `1', 0x31 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `2', 0x32 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `3', 0x33 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `4', 0x34 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `5', 0x35 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `6', 0x36 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `7', 0x37 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `8', 0x38 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `9', 0x39 */
|
||||
FSRTL_NTFS_LEGAL, /* `:', 0x3a */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `;', 0x3b */
|
||||
FSRTL_WILD_CHARACTER, /* `<', 0x3c */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `=', 0x3d */
|
||||
FSRTL_WILD_CHARACTER, /* `>', 0x3e */
|
||||
FSRTL_WILD_CHARACTER, /* `?', 0x3f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `@', 0x40 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `A', 0x41 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `B', 0x42 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `C', 0x43 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `D', 0x44 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `E', 0x45 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `F', 0x46 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `G', 0x47 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `H', 0x48 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `I', 0x49 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `J', 0x4a */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `K', 0x4b */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `L', 0x4c */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `M', 0x4d */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `N', 0x4e */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `O', 0x4f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `P', 0x50 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `Q', 0x51 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `R', 0x52 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `S', 0x53 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `T', 0x54 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `U', 0x55 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `V', 0x56 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `W', 0x57 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `X', 0x58 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `Y', 0x59 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `Z', 0x5a */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `[', 0x5b */
|
||||
0, /* `\', 0x5c */
|
||||
FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `]', 0x5d */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `^', 0x5e */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `_', 0x5f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* ``', 0x60 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `a', 0x61 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `b', 0x62 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `c', 0x63 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `d', 0x64 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `e', 0x65 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `f', 0x66 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `g', 0x67 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `h', 0x68 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `i', 0x69 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `j', 0x6a */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `k', 0x6b */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `l', 0x6c */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `m', 0x6d */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `n', 0x6e */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `o', 0x6f */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `p', 0x70 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `q', 0x71 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `r', 0x72 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `s', 0x73 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `t', 0x74 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `u', 0x75 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `v', 0x76 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `w', 0x77 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `x', 0x78 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `y', 0x79 */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `z', 0x7a */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `{', 0x7b */
|
||||
0, /* `|', 0x7c */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `}', 0x7d */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL, /* `~', 0x7e */
|
||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL /* 0x7f */
|
||||
};
|
||||
|
||||
PUCHAR EXPORTED FsRtlLegalAnsiCharacterArray = LegalAnsiCharacterArray;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlAreNamesEqual@16
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* NOTE
|
||||
* From Bo Branten's ntifs.h v25.
|
||||
* From Bo Branten's ntifs.h v25.
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
BOOLEAN STDCALL
|
||||
FsRtlAreNamesEqual (IN PUNICODE_STRING Name1,
|
||||
IN PUNICODE_STRING Name2,
|
||||
IN BOOLEAN IgnoreCase,
|
||||
IN PWCHAR UpcaseTable OPTIONAL)
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlAreNamesEqual(IN PUNICODE_STRING Name1,
|
||||
IN PUNICODE_STRING Name2,
|
||||
IN BOOLEAN IgnoreCase,
|
||||
IN PWCHAR UpcaseTable OPTIONAL)
|
||||
{
|
||||
|
||||
UNICODE_STRING UpcaseName1;
|
||||
UNICODE_STRING UpcaseName2;
|
||||
BOOLEAN StringsAreEqual;
|
||||
@@ -92,40 +233,112 @@ ManualCase:
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlDissectName@16
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlDissectDbcs@16
|
||||
*
|
||||
* DESCRIPTION
|
||||
* Dissects a given path name into first and remaining part.
|
||||
* Dissects a given path name into first and remaining part.
|
||||
*
|
||||
* ARGUMENTS
|
||||
* Name
|
||||
* Unicode string to dissect.
|
||||
* Name
|
||||
* ANSI string to dissect.
|
||||
*
|
||||
* FirstPart
|
||||
* Pointer to user supplied UNICODE_STRING, that will
|
||||
* later point to the first part of the original name.
|
||||
* FirstPart
|
||||
* Pointer to user supplied ANSI_STRING, that will
|
||||
* later point to the first part of the original name.
|
||||
*
|
||||
* RemainingPart
|
||||
* Pointer to user supplied UNICODE_STRING, that will
|
||||
* later point to the remaining part of the original name.
|
||||
* RemainingPart
|
||||
* Pointer to user supplied ANSI_STRING, that will
|
||||
* later point to the remaining part of the original name.
|
||||
*
|
||||
* RETURN VALUE
|
||||
* None
|
||||
* None
|
||||
*
|
||||
* EXAMPLE
|
||||
* Name: \test1\test2\test3
|
||||
* FirstPart: test1
|
||||
* RemainingPart: test2\test3
|
||||
* Name: \test1\test2\test3
|
||||
* FirstPart: test1
|
||||
* RemainingPart: test2\test3
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
VOID STDCALL
|
||||
FsRtlDissectName (IN UNICODE_STRING Name,
|
||||
OUT PUNICODE_STRING FirstPart,
|
||||
OUT PUNICODE_STRING RemainingPart)
|
||||
VOID
|
||||
STDCALL
|
||||
FsRtlDissectDbcs(IN ANSI_STRING Name,
|
||||
OUT PANSI_STRING FirstPart,
|
||||
OUT PANSI_STRING RemainingPart)
|
||||
{
|
||||
ULONG i;
|
||||
ULONG FirstLoop;
|
||||
|
||||
/* Initialize the Outputs */
|
||||
RtlZeroMemory(&FirstPart, sizeof(ANSI_STRING));
|
||||
RtlZeroMemory(&RemainingPart, sizeof(ANSI_STRING));
|
||||
|
||||
/* Bail out if empty */
|
||||
if (!Name.Length) return;
|
||||
|
||||
/* Ignore backslash */
|
||||
if (Name.Buffer[0] == '\\') {
|
||||
i = 1;
|
||||
} else {
|
||||
i = 0;
|
||||
}
|
||||
|
||||
/* Loop until we find a backslash */
|
||||
for (FirstLoop = i;i < Name.Length;i++) {
|
||||
if (Name.Buffer[i] != '\\') break;
|
||||
if (FsRtlIsLeadDbcsCharacter(Name.Buffer[i])) i++;
|
||||
}
|
||||
|
||||
/* Now we have the First Part */
|
||||
FirstPart->Length = (i-FirstLoop);
|
||||
FirstPart->MaximumLength = FirstPart->Length; /* +2?? */
|
||||
FirstPart->Buffer = &Name.Buffer[FirstLoop];
|
||||
|
||||
/* Make the second part if something is still left */
|
||||
if (i<Name.Length) {
|
||||
RemainingPart->Length = (Name.Length - (i+1));
|
||||
RemainingPart->MaximumLength = RemainingPart->Length; /* +2?? */
|
||||
RemainingPart->Buffer = &Name.Buffer[i+1];
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlDissectName@16
|
||||
*
|
||||
* DESCRIPTION
|
||||
* Dissects a given path name into first and remaining part.
|
||||
*
|
||||
* ARGUMENTS
|
||||
* Name
|
||||
* Unicode string to dissect.
|
||||
*
|
||||
* FirstPart
|
||||
* Pointer to user supplied UNICODE_STRING, that will
|
||||
* later point to the first part of the original name.
|
||||
*
|
||||
* RemainingPart
|
||||
* Pointer to user supplied UNICODE_STRING, that will
|
||||
* later point to the remaining part of the original name.
|
||||
*
|
||||
* RETURN VALUE
|
||||
* None
|
||||
*
|
||||
* EXAMPLE
|
||||
* Name: \test1\test2\test3
|
||||
* FirstPart: test1
|
||||
* RemainingPart: test2\test3
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
VOID
|
||||
STDCALL
|
||||
FsRtlDissectName(IN UNICODE_STRING Name,
|
||||
OUT PUNICODE_STRING FirstPart,
|
||||
OUT PUNICODE_STRING RemainingPart)
|
||||
{
|
||||
USHORT NameOffset = 0;
|
||||
USHORT NameLength = 0;
|
||||
@@ -168,10 +381,43 @@ FsRtlDissectName (IN UNICODE_STRING Name,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlDoesDbcsContainWildCards@4
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlDoesDbcsContainWildCards(IN PANSI_STRING Name)
|
||||
{
|
||||
ULONG i;
|
||||
|
||||
/* Check every character */
|
||||
for (i=0;i < Name->Length;i++) {
|
||||
|
||||
/* First make sure it's not the Lead DBCS */
|
||||
if (FsRtlIsLeadDbcsCharacter(Name->Buffer[i])) {
|
||||
i++;
|
||||
} else if (FsRtlIsAnsiCharacterWild(Name->Buffer[i])) {
|
||||
/* Now return if it has a Wilcard */
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/* We didn't return above...so none found */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlDoesNameContainWildCards@4
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlDoesNameContainWildCards@4
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
@@ -180,12 +426,13 @@ FsRtlDissectName (IN UNICODE_STRING Name,
|
||||
* RETURN VALUE
|
||||
*
|
||||
* NOTE
|
||||
* From Bo Branten's ntifs.h v12.
|
||||
* From Bo Branten's ntifs.h v12.
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
BOOLEAN STDCALL
|
||||
FsRtlDoesNameContainWildCards (IN PUNICODE_STRING Name)
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlDoesNameContainWildCards(IN PUNICODE_STRING Name)
|
||||
{
|
||||
PWCHAR Ptr;
|
||||
|
||||
@@ -205,10 +452,73 @@ FsRtlDoesNameContainWildCards (IN PUNICODE_STRING Name)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlIsDbcsInExpression@8
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlIsDbcsInExpression(IN PANSI_STRING Expression,
|
||||
IN PANSI_STRING Name)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlIsNameInExpression@16
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlIsFatDbcsLegal@20
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlIsFatDbcsLegal(IN ANSI_STRING DbcsName,
|
||||
IN BOOLEAN WildCardsPermissible,
|
||||
IN BOOLEAN PathNamePermissible,
|
||||
IN BOOLEAN LeadingBackslashPermissible)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlIsHpfsDbcsLegal@20
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlIsHpfsDbcsLegal(IN ANSI_STRING DbcsName,
|
||||
IN BOOLEAN WildCardsPermissible,
|
||||
IN BOOLEAN PathNamePermissible,
|
||||
IN BOOLEAN LeadingBackslashPermissible)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* NAME EXPORTED
|
||||
* FsRtlIsNameInExpression@16
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
@@ -217,17 +527,18 @@ FsRtlDoesNameContainWildCards (IN PUNICODE_STRING Name)
|
||||
* RETURN VALUE
|
||||
*
|
||||
* NOTE
|
||||
* From Bo Branten's ntifs.h v12. This function should be rewritten
|
||||
* From Bo Branten's ntifs.h v12. This function should be rewritten
|
||||
* to avoid recursion and better wildcard handling should be
|
||||
* implemented (see FsRtlDoesNameContainWildCards).
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
BOOLEAN STDCALL
|
||||
FsRtlIsNameInExpression (IN PUNICODE_STRING Expression,
|
||||
IN PUNICODE_STRING Name,
|
||||
IN BOOLEAN IgnoreCase,
|
||||
IN PWCHAR UpcaseTable OPTIONAL)
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlIsNameInExpression(IN PUNICODE_STRING Expression,
|
||||
IN PUNICODE_STRING Name,
|
||||
IN BOOLEAN IgnoreCase,
|
||||
IN PWCHAR UpcaseTable OPTIONAL)
|
||||
{
|
||||
USHORT ExpressionPosition, NamePosition;
|
||||
UNICODE_STRING TempExpression, TempName;
|
||||
|
||||
+211
-349
@@ -1,350 +1,242 @@
|
||||
/* $Id$
|
||||
*
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/fs/util.c
|
||||
* PURPOSE: No purpose listed.
|
||||
* PURPOSE: Misc Utility Functions for File System Drivers
|
||||
*
|
||||
* PROGRAMMERS: No programmer listed.
|
||||
* PROGRAMMERS: Alex Ionescu ([email protected])
|
||||
*/
|
||||
|
||||
/* INCLUDES *****************************************************************/
|
||||
|
||||
#include <ntoskrnl.h>
|
||||
#define NDEBUG
|
||||
#include <internal/debug.h>
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlIsTotalDeviceFailure@4
|
||||
#define FSRTL_MAX_RESOURCES 16
|
||||
|
||||
#define FTTYPE ((ULONG)'f')
|
||||
#define FT_BALANCED_READ_MODE \
|
||||
CTL_CODE(FTTYPE, 6, METHOD_NEITHER, FILE_ANY_ACCESS)
|
||||
|
||||
/* GLOBALS *******************************************************************/
|
||||
|
||||
BOOLEAN STDCALL MmIsFileAPagingFile(PFILE_OBJECT FileObject);
|
||||
static ULONG FsRtlpAllocatedResources = 0;
|
||||
static PERESOURCE FsRtlpResources;
|
||||
|
||||
/* PRIVATE FUNCTIONS**********************************************************/
|
||||
|
||||
VOID
|
||||
STDCALL
|
||||
INIT_FUNCTION
|
||||
RtlpInitializeResources(VOID)
|
||||
{
|
||||
ULONG i;
|
||||
|
||||
/* Allocate the Resource Buffer */
|
||||
FsRtlpResources = FsRtlAllocatePool(NonPagedPool,
|
||||
FSRTL_MAX_RESOURCES*sizeof(ERESOURCE));
|
||||
|
||||
/* Initialize the Resources */
|
||||
for (i = 0; i < FSRTL_MAX_RESOURCES; i++)
|
||||
{
|
||||
ExInitializeResource(&FsRtlpResources[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
/*++
|
||||
* @name FsRtlIsTotalDeviceFailure
|
||||
* @implemented NT 4.0
|
||||
*
|
||||
* DESCRIPTION
|
||||
* Check if an NTSTATUS error code represents a
|
||||
* disk hardware failure.
|
||||
*
|
||||
* ARGUMENTS
|
||||
* NtStatus
|
||||
* NTSTATUS to test.
|
||||
* The FsRtlIsTotalDeviceFailure routine checks if an NTSTATUS error code
|
||||
* represents a disk hardware failure.
|
||||
*
|
||||
* RETURN VALUE
|
||||
* FALSE if either (NtStatus >= STATUS_SUCCESS),
|
||||
* STATUS_CRC_ERROR, STATUS_DEVICE_DATA_ERROR;
|
||||
* TRUE otherwise.
|
||||
* @param NtStatus
|
||||
* The NTSTATUS Code to Test
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
* @return TRUE in case of Hardware Failure, FALSE otherwise.
|
||||
*
|
||||
* @remarks None.
|
||||
*
|
||||
*--*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlIsTotalDeviceFailure (
|
||||
IN NTSTATUS NtStatus
|
||||
)
|
||||
FsRtlIsTotalDeviceFailure(IN NTSTATUS NtStatus)
|
||||
{
|
||||
return (
|
||||
(NT_SUCCESS(NtStatus))
|
||||
|| (STATUS_CRC_ERROR == NtStatus)
|
||||
|| (STATUS_DEVICE_DATA_ERROR == NtStatus)
|
||||
? FALSE
|
||||
: TRUE
|
||||
);
|
||||
return((NT_SUCCESS(NtStatus)) ||
|
||||
(STATUS_CRC_ERROR == NtStatus) ||
|
||||
(STATUS_DEVICE_DATA_ERROR == NtStatus) ? FALSE : TRUE);
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlIsNtstatusExpected/1
|
||||
* stack32 = 4
|
||||
/*++
|
||||
* @name FsRtlIsNtstatusExpected
|
||||
* @implemented NT 4.0
|
||||
*
|
||||
* DESCRIPTION
|
||||
* Check an NTSTATUS value is expected by the FS kernel
|
||||
* subsystem.
|
||||
* The FsRtlIsNtstatusExpected routine checks if an NTSTATUS error code
|
||||
* is expected by the File System Support Library.
|
||||
*
|
||||
* ARGUMENTS
|
||||
* NtStatus
|
||||
* NTSTATUS to test.
|
||||
* @param NtStatus
|
||||
* The NTSTATUS Code to Test
|
||||
*
|
||||
* RETURN VALUE
|
||||
* TRUE if NtStatus is NOT one out of:
|
||||
* - STATUS_ACCESS_VIOLATION
|
||||
* - STATUS_ILLEGAL_INSTRUCTION
|
||||
* - STATUS_DATATYPE_MISALIGNMENT
|
||||
* - STATUS_INSTRUCTION_MISALIGNMENT
|
||||
* which are the forbidden return stati in the FsRtl
|
||||
* subsystem; FALSE otherwise.
|
||||
* @return TRUE if the Value is Expected, FALSE otherwise.
|
||||
*
|
||||
* REVISIONS
|
||||
* 2002-01-17 Fixed a bad bug reported by Bo Brantén.
|
||||
* Up to version 1.8, this function's semantics was
|
||||
* exactly the opposite! Thank you Bo.
|
||||
* @remarks None.
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
*--*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlIsNtstatusExpected (
|
||||
IN NTSTATUS NtStatus
|
||||
)
|
||||
FsRtlIsNtstatusExpected(IN NTSTATUS NtStatus)
|
||||
{
|
||||
return (
|
||||
(STATUS_DATATYPE_MISALIGNMENT == NtStatus)
|
||||
|| (STATUS_ACCESS_VIOLATION == NtStatus)
|
||||
|| (STATUS_ILLEGAL_INSTRUCTION == NtStatus)
|
||||
|| (STATUS_INSTRUCTION_MISALIGNMENT == NtStatus)
|
||||
)
|
||||
? FALSE
|
||||
: TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
ULONG
|
||||
FsRtlIsPagingFile (
|
||||
IN PFILE_OBJECT FileObject
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
return((STATUS_DATATYPE_MISALIGNMENT == NtStatus) ||
|
||||
(STATUS_ACCESS_VIOLATION == NtStatus) ||
|
||||
(STATUS_ILLEGAL_INSTRUCTION == NtStatus) ||
|
||||
(STATUS_INSTRUCTION_MISALIGNMENT == NtStatus)) ? FALSE : TRUE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlNormalizeNtstatus@8
|
||||
/*++
|
||||
* @name FsRtlIsPagingFile
|
||||
* @implemented NT 4.0
|
||||
*
|
||||
* DESCRIPTION
|
||||
* Normalize an NTSTATUS value for using in the FS subsystem.
|
||||
* The FsRtlIsPagingFile routine checks if the FileObject is a Paging File.
|
||||
*
|
||||
* ARGUMENTS
|
||||
* NtStatusToNormalize
|
||||
* NTSTATUS to normalize.
|
||||
* NormalizedNtStatus
|
||||
* NTSTATUS to return if the NtStatusToNormalize
|
||||
* value is unexpected by the FS kernel subsystem.
|
||||
* @param FileObject
|
||||
* A pointer to the File Object to be tested.
|
||||
*
|
||||
* RETURN VALUE
|
||||
* NtStatusToNormalize if it is an expected value,
|
||||
* otherwise NormalizedNtStatus.
|
||||
* @return TRUE if the File is a Paging File, FALSE otherwise.
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
FsRtlNormalizeNtstatus (
|
||||
IN NTSTATUS NtStatusToNormalize,
|
||||
IN NTSTATUS NormalizedNtStatus
|
||||
)
|
||||
{
|
||||
return
|
||||
(TRUE == FsRtlIsNtstatusExpected(NtStatusToNormalize))
|
||||
? NtStatusToNormalize
|
||||
: NormalizedNtStatus;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* Miscellanea (they may fit somewhere else)
|
||||
*********************************************************************/
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlAllocateResource@0
|
||||
* @remarks None.
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
DWORD
|
||||
STDCALL
|
||||
FsRtlAllocateResource (VOID)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlBalanceReads@4
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
FsRtlBalanceReads (PDEVICE_OBJECT TargetDevice)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlCopyRead@32
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* NOTE
|
||||
* From Bo Branten's ntifs.h v12.
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
*--*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlCopyRead (
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN PLARGE_INTEGER FileOffset,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Wait,
|
||||
IN ULONG LockKey,
|
||||
OUT PVOID Buffer,
|
||||
OUT PIO_STATUS_BLOCK IoStatus,
|
||||
IN PDEVICE_OBJECT DeviceObject
|
||||
)
|
||||
FsRtlIsPagingFile(IN PFILE_OBJECT FileObject)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return MmIsFileAPagingFile(FileObject);
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlCopyWrite@32
|
||||
/*++
|
||||
* @name FsRtlNormalizeNtstatus
|
||||
* @implemented NT 4.0
|
||||
*
|
||||
* DESCRIPTION
|
||||
* The FsRtlNormalizeNtstatus routine normalizes an NTSTATUS error code.
|
||||
*
|
||||
* ARGUMENTS
|
||||
* @param NtStatusToNormalize
|
||||
* The NTSTATUS error code to Normalize.
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* NOTE
|
||||
* From Bo Branten's ntifs.h v12.
|
||||
* @param NormalizedNtStatus
|
||||
* The NTSTATUS error code to return if the NtStatusToNormalize is not
|
||||
* a proper expected error code by the File System Library.
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
FsRtlCopyWrite (
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN PLARGE_INTEGER FileOffset,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Wait,
|
||||
IN ULONG LockKey,
|
||||
IN PVOID Buffer,
|
||||
OUT PIO_STATUS_BLOCK IoStatus,
|
||||
IN PDEVICE_OBJECT DeviceObject
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlGetFileSize@8
|
||||
* @return NtStatusToNormalize if it is an expected value, otherwise
|
||||
* NormalizedNtStatus.
|
||||
*
|
||||
* DESCRIPTION
|
||||
* @remarks None.
|
||||
*
|
||||
* ARGUMENTS
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
*--*/
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
FsRtlGetFileSize (
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN OUT PLARGE_INTEGER FileSize
|
||||
)
|
||||
FsRtlNormalizeNtstatus(IN NTSTATUS NtStatusToNormalize,
|
||||
IN NTSTATUS NormalizedNtStatus)
|
||||
{
|
||||
FILE_STANDARD_INFORMATION Info;
|
||||
NTSTATUS Status;
|
||||
ULONG Length;
|
||||
|
||||
Status = IoQueryFileInformation(FileObject,
|
||||
FileStandardInformation,
|
||||
sizeof(Info),
|
||||
&Info,
|
||||
&Length);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
FileSize->QuadPart = Info.EndOfFile.QuadPart;
|
||||
}
|
||||
|
||||
return Status;
|
||||
return(TRUE == FsRtlIsNtstatusExpected(NtStatusToNormalize)) ?
|
||||
NtStatusToNormalize : NormalizedNtStatus;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
/*++
|
||||
* @name FsRtlAllocateResource
|
||||
* @implemented NT 4.0
|
||||
*
|
||||
* The FsRtlAllocateResource routine returns a pre-initialized ERESOURCE
|
||||
* for use by a File System Driver.
|
||||
*
|
||||
* @return A Pointer to a pre-initialized ERESOURCE.
|
||||
*
|
||||
* @remarks The File System Library only provides up to 16 Resources.
|
||||
*
|
||||
*--*/
|
||||
PERESOURCE
|
||||
STDCALL
|
||||
FsRtlAllocateResource(VOID)
|
||||
{
|
||||
/* Return a pre-allocated ERESOURCE */
|
||||
return &FsRtlpResources[FsRtlpAllocatedResources++ & FSRTL_MAX_RESOURCES];
|
||||
}
|
||||
|
||||
/*++
|
||||
* @name FsRtlBalanceReads
|
||||
* @implemented NT 4.0
|
||||
*
|
||||
* The FsRtlBalanceReads routine sends an IRP to an FTDISK Driver
|
||||
* requesting the driver to balance read requests across a mirror set.
|
||||
*
|
||||
* @param TargetDevice
|
||||
* A pointer to an FTDISK Device Object.
|
||||
*
|
||||
* @return The NTSTATUS error code returned by the FTDISK Driver.
|
||||
*
|
||||
* @remarks FTDISK is a Software RAID Implementation.
|
||||
*
|
||||
*--*/
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
FsRtlInsertPerStreamContext (
|
||||
IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
|
||||
IN PFSRTL_PER_STREAM_CONTEXT Ptr
|
||||
)
|
||||
FsRtlBalanceReads(PDEVICE_OBJECT TargetDevice)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
PIRP Irp;
|
||||
KEVENT Event;
|
||||
IO_STATUS_BLOCK IoStatusBlock;
|
||||
NTSTATUS Status;
|
||||
|
||||
/* Initialize the Local Event */
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
|
||||
/* Build the special IOCTL */
|
||||
Irp = IoBuildDeviceIoControlRequest(FT_BALANCED_READ_MODE,
|
||||
TargetDevice,
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
FALSE,
|
||||
&Event,
|
||||
&IoStatusBlock);
|
||||
|
||||
/* Send it */
|
||||
Status = IoCallDriver(TargetDevice, Irp);
|
||||
|
||||
/* Wait if needed */
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
Status = KeWaitForSingleObject(&Event,
|
||||
Executive,
|
||||
KernelMode,
|
||||
FALSE,
|
||||
NULL);
|
||||
/* Return Status */
|
||||
Status = IoStatusBlock.Status;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
PFSRTL_PER_STREAM_CONTEXT
|
||||
STDCALL
|
||||
FsRtlRemovePerStreamContext (
|
||||
IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
|
||||
IN PVOID OwnerId OPTIONAL,
|
||||
IN PVOID InstanceId OPTIONAL
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
FsRtlInsertPerFileObjectContext (
|
||||
IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext,
|
||||
IN PVOID /* PFSRTL_PER_FILE_OBJECT_CONTEXT*/ Ptr
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlPostPagingFileStackOverflow@12
|
||||
/*++
|
||||
* @name FsRtlPostPagingFileStackOverflow
|
||||
* @unimplemented NT 4.0
|
||||
*
|
||||
* DESCRIPTION
|
||||
* The FsRtlPostPagingFileStackOverflow routine
|
||||
*
|
||||
* ARGUMENTS
|
||||
* @param Context
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
* @param Event
|
||||
*
|
||||
* @param StackOverflowRoutine
|
||||
*
|
||||
* @return
|
||||
*
|
||||
* @remarks None.
|
||||
*
|
||||
*--*/
|
||||
VOID
|
||||
STDCALL
|
||||
FsRtlPostPagingFileStackOverflow(IN PVOID Context,
|
||||
@@ -354,80 +246,50 @@ FsRtlPostPagingFileStackOverflow(IN PVOID Context,
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlPostStackOverflow@12
|
||||
/*++
|
||||
* @name FsRtlPostStackOverflow
|
||||
* @unimplemented NT 4.0
|
||||
*
|
||||
* DESCRIPTION
|
||||
* The FsRtlPostStackOverflow routine
|
||||
*
|
||||
* ARGUMENTS
|
||||
* @param Context
|
||||
*
|
||||
* RETURN VALUE
|
||||
*
|
||||
* @unimplemented
|
||||
*/
|
||||
* @param Event
|
||||
*
|
||||
* @param StackOverflowRoutine
|
||||
*
|
||||
* @return
|
||||
*
|
||||
* @remarks None.
|
||||
*
|
||||
*--*/
|
||||
VOID
|
||||
STDCALL
|
||||
FsRtlPostStackOverflow (IN PVOID Context,
|
||||
IN PKEVENT Event,
|
||||
IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine)
|
||||
FsRtlPostStackOverflow(IN PVOID Context,
|
||||
IN PKEVENT Event,
|
||||
IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
PVOID /* PFSRTL_PER_FILE_OBJECT_CONTEXT*/
|
||||
STDCALL
|
||||
FsRtlRemovePerFileObjectContext (
|
||||
IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext,
|
||||
IN PVOID OwnerId OPTIONAL,
|
||||
IN PVOID InstanceId OPTIONAL
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* FsRtlSyncVolumes@12
|
||||
/*++
|
||||
* @name FsRtlSyncVolumes
|
||||
* @implemented NT 4.0
|
||||
*
|
||||
* DESCRIPTION
|
||||
* Obsolete function.
|
||||
* The FsRtlSyncVolumes routine is deprecated.
|
||||
*
|
||||
* ARGUMENTS
|
||||
* @return Always returns STATUS_SUCCESS.
|
||||
*
|
||||
* RETURN VALUE
|
||||
* It always returns STATUS_SUCCESS.
|
||||
* @remarks Deprecated.
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
*--*/
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
FsRtlSyncVolumes (
|
||||
DWORD Unknown0,
|
||||
DWORD Unknown1,
|
||||
DWORD Unknown2
|
||||
)
|
||||
FsRtlSyncVolumes(DWORD Unknown0,
|
||||
DWORD Unknown1,
|
||||
DWORD Unknown2)
|
||||
{
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
VOID
|
||||
STDCALL
|
||||
FsRtlTeardownPerStreamContexts (
|
||||
IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -117,6 +117,23 @@ static BOOLEAN MmSwapSpaceMessage = FALSE;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
MmIsFileAPagingFile(PFILE_OBJECT FileObject)
|
||||
{
|
||||
ULONG i;
|
||||
|
||||
/* Loop through all the paging files */
|
||||
for (i = 0; i < MiPagingFileCount; i++)
|
||||
{
|
||||
/* Check if this is one of them */
|
||||
if (PagingFileList[i]->FileObject == FileObject) return TRUE;
|
||||
}
|
||||
|
||||
/* Nothing found */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
VOID
|
||||
MmShowOutOfSpaceMessagePagingFile(VOID)
|
||||
{
|
||||
|
||||
@@ -220,7 +220,7 @@ FsRtlIsFatDbcsLegal@20
|
||||
FsRtlIsHpfsDbcsLegal@20
|
||||
FsRtlIsNameInExpression@16
|
||||
FsRtlIsNtstatusExpected@4
|
||||
FsRtlIsPagingFile
|
||||
FsRtlIsPagingFile@4
|
||||
FsRtlIsTotalDeviceFailure@4
|
||||
FsRtlLegalAnsiCharacterArray DATA
|
||||
FsRtlLookupLargeMcbEntry@32
|
||||
|
||||
Reference in New Issue
Block a user