Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / reactos / ntoskrnl / tests / fsrtl.c
diff --git a/reactos/ntoskrnl/tests/fsrtl.c b/reactos/ntoskrnl/tests/fsrtl.c
deleted file mode 100644 (file)
index 51b8064..0000000
+++ /dev/null
@@ -1,848 +0,0 @@
-#include <ntifs.h>
-#include "ntndk.h"
-#include "fsrtl_glue.h"
-
-#include "fastio.h"
-#include "fsrtl.h"
-
-/*
-    This is the main test function. It is called from DriverEntry.
-
-    There is a DbgBreakPoint() call at the beginning of DriverEntry.
-    In order to run the test again, simply type
-        net stop fsrtl
-        net start fsrtl
-
-    Author: Dom Cote
-*/
-
-BOOLEAN FsRtlTest_StartTest() {
-    HANDLE Fh = NULL;
-    PFILE_OBJECT Pfo = NULL;
-
-    HANDLE DirFh = NULL;
-    PFILE_OBJECT DirPfo = NULL;
-
-
-    IO_STATUS_BLOCK IoStatus;
-    BOOLEAN Return;
-    NTSTATUS  Status = STATUS_SUCCESS;
-    LONGLONG i = 0;
-
-    PCHAR Buffer;
-    PMDL MdlChain = 0;
-
-    LARGE_INTEGER Offset;
-    ULONG Length = 0;
-    LARGE_INTEGER OldSize;
-
-    /* Parameters we are going to use in the test from the FCB */
-    PFSRTL_COMMON_FCB_HEADER FcbHeader;
-    PLARGE_INTEGER AllocationSize;
-    PLARGE_INTEGER ValidDataLength;
-    PLARGE_INTEGER   FileSize;
-
-    PDEVICE_OBJECT pRelatedDo = NULL;
-
-    /* Allocate a 100KB buffer to do IOs */
-    Buffer = ExAllocatePool(PagedPool,100*_1KB);
-
-    /*  ------------------------------------------------------------------------
-            TESTING:
-                BOOLEAN
-                NTAPI
-                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)
-
-               with Wait = TRUE
-
-        ------------------------------------------------------------------------  */
-    FsRtlTest_OpenTestFile(&Fh, &Pfo);
-    FSRTL_TEST("Opening Test File.",((Pfo != NULL) && (Fh != NULL)));
-
-    /* Extract the test variable from the FCB struct */
-    FcbHeader = (PFSRTL_COMMON_FCB_HEADER)Pfo->FsContext;
-    AllocationSize = &FcbHeader->AllocationSize;
-    ValidDataLength = &FcbHeader->ValidDataLength;
-    FileSize = &FcbHeader->FileSize;
-
-    /* Try to cache without caching having been initialized. This should fail.*/
-    Length = 10*_1KB;
-    FSRTL_TEST("FsRtlCopyWrite() - No cache map test.",!FsRtlCopyWrite(Pfo,AllocationSize,Length,TRUE,0,Buffer,&IoStatus,NULL));
-
-    /* We are going to build a 100k file */
-    /* This will inititate caching and build some size */
-    Offset.QuadPart = 0;
-    Length = 100*_1KB;
-    Return = FsRltTest_WritefileZw(Fh,&Offset,Length, Buffer, &IoStatus);
-    FSRTL_TEST("FsRtlCopyWrite() - Building 100k filesize.",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-    /* Extending the file by 1/2 sector, 256 bytes. */
-    Offset.QuadPart = 0x7fffffffffff;
-    Length = 0x100;
-    Return = FsRltTest_WritefileZw(Fh,NULL,Length, Buffer, &IoStatus);
-    FSRTL_TEST("FsRtlCopyWrite() - Extending by 1/2 sector.",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-    /* Append to the file past the allocation size*/
-    Offset.LowPart = 0xFFFFFFFF;
-    Offset.HighPart = 0xFFFFFFFF;
-    OldSize.QuadPart = FileSize->QuadPart;
-    Length = (ULONG) (AllocationSize->QuadPart -ValidDataLength->QuadPart);
-    FSRTL_TEST("FsRtlCopyWrite() - Testing extending past allocation size",!FsRtlCopyWrite(Pfo,&Offset,Length+1,TRUE,0,Buffer,&IoStatus,NULL));
-    FSRTL_TEST("FsRtlCopyWrite() - Testing extending not past allocation size",FsRtlCopyWrite(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL));
-    FSRTL_TEST("FsRtlCopyWrite() - Check filesize",(FileSize->QuadPart = (OldSize.QuadPart+Length)));
-
-    /* Try do write a 65kb IO and check that if fails. Maximum IO size for thus function is 64KB */
-    Offset.QuadPart = 0;
-    Length = 65*_1KB;
-    FSRTL_TEST("FsRtlCopyWrite() - 65KB IO Test",!FsRtlCopyWrite(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL));
-
-    /* Try do write a 64kb IO. Maximum IO size for thus function is 64KB */
-    Length = 64*_1KB;
-    FSRTL_TEST("FsRtlCopyWrite() - 64KB IO Test",FsRtlCopyWrite(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL))
-
-    /* Test the fast Io questionable flag
-         This test fails and should succeed. I am not sure why. When FsRtlCopyWrite() queries the FastIoTable of the related
-         device object, it comes back with no.
-    FcbHeader->IsFastIoPossible = FastIoIsQuestionable;
-    FSRTL_TEST("FastIo is questionable flag",FsRtlCopyWrite(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL))
-    */
-
-    /* Test the fast Io not possible flag */
-    FcbHeader->IsFastIoPossible = FastIoIsNotPossible;
-    FSRTL_TEST("FsRtlCopyWrite() - FastIo is not possible flag",!FsRtlCopyWrite(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL))
-    /* Set the flag back to what it was */
-    FcbHeader->IsFastIoPossible = FastIoIsPossible;
-    FSRTL_TEST("FsRtlCopyWrite() - FastIo is possbile flag",FsRtlCopyWrite(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL))
-
-    if (Pfo)
-    {
-        ObDereferenceObject(Pfo);
-        Pfo = NULL;
-    }
-
-    if (Fh)
-    {
-        ZwClose(Fh);
-        Fh = NULL;
-     }
-
-    /*  ------------------------------------------------------------------------
-            TESTING:
-                BOOLEAN
-                NTAPI
-                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)
-
-               with Wait = FALSE
-
-        ------------------------------------------------------------------------  */
-
-    /* We are going to repeat the same bunch of tests but with Wait = FALSE. So we exercise the second part of the function. */
-    FsRtlTest_OpenTestFile(&Fh, &Pfo);
-
-    /* Extract the test variable from the FCB struct */
-    FcbHeader = (PFSRTL_COMMON_FCB_HEADER)Pfo->FsContext;
-    AllocationSize = &FcbHeader->AllocationSize;
-    ValidDataLength = &FcbHeader->ValidDataLength;
-    FileSize = &FcbHeader->FileSize;
-
-    /* Try to cache without caching having been initialized. This should fail.*/
-    Length = 10*_1KB;
-    FSRTL_TEST("FsRtlCopyWrite() - No cache map test. Wait = FALSE",!FsRtlCopyWrite(Pfo,AllocationSize,Length,FALSE,0,Buffer,&IoStatus,NULL));
-
-    /* We are going to build a 100k file */
-    /* This will inititate caching and build some size */
-    Offset.QuadPart = 0;
-    Length = 100*_1KB;
-    Return = FsRltTest_WritefileZw(Fh,&Offset,Length, Buffer, &IoStatus);
-    FSRTL_TEST("FsRtlCopyWrite() - Building 100k filesize. Wait = FALSE",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-    /* Extending the file by 1/2 sector, 256 bytes. */
-    Offset.QuadPart = 0x7fffffffffff;
-    Length = 0x100;
-    Return = FsRltTest_WritefileZw(Fh,NULL,Length, Buffer, &IoStatus);
-    FSRTL_TEST("FsRtlCopyWrite() - Extending by 1/2 sector. Wait = FALSE",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-    /* Append to the file past the allocation size*/
-    Offset.LowPart = 0xFFFFFFFF;
-    Offset.HighPart = 0xFFFFFFFF;
-    OldSize.QuadPart = FileSize->QuadPart;
-    Length = (ULONG) (AllocationSize->QuadPart -ValidDataLength->QuadPart);
-    FSRTL_TEST("FsRtlCopyWrite() - Testing extending past allocation size Wait = FALSE",!FsRtlCopyWrite(Pfo,&Offset,Length+1,FALSE,0,Buffer,&IoStatus,NULL));
-    FSRTL_TEST("FsRtlCopyWrite() - Testing extending not past allocation size. Wait = FALSE",FsRtlCopyWrite(Pfo,&Offset,Length,FALSE,0,Buffer,&IoStatus,NULL));
-    FSRTL_TEST("FsRtlCopyWrite() - Check filesize",(FileSize->QuadPart = (OldSize.QuadPart+Length)));
-
-    /* Try do write a 65kb IO and check that if fails. Maximum IO size for thus function is 64KB */
-    Offset.QuadPart = 0;
-    Length = 65*_1KB;
-    FSRTL_TEST("FsRtlCopyWrite() - 65KB IO Test. Wait = FALSE",!FsRtlCopyWrite(Pfo,&Offset,Length,FALSE,0,Buffer,&IoStatus,NULL));
-
-    /* Try do write a 64kb IO. Maximum IO size for thus function is 64KB */
-    Length = 64*_1KB;
-    FSRTL_TEST("FsRtlCopyWrite() - 64KB IO Test. Wait = FALSE",FsRtlCopyWrite(Pfo,&Offset,Length,FALSE,0,Buffer,&IoStatus,NULL))
-
-    /* Test the fast Io questionable flag
-         This test fails and should succeed. I am not sure why. When FsRtlCopyWrite() queries the FastIoTable of the related
-         device object, it comes back with no.
-    FcbHeader->IsFastIoPossible = FastIoIsQuestionable;
-    FSRTL_TEST("FastIo is questionable flag",FsRtlCopyWrite(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL))
-    */
-
-    /* Test the fast Io not possible flag */
-    FcbHeader->IsFastIoPossible = FastIoIsNotPossible;
-    FSRTL_TEST("FsRtlCopyWrite() - FastIo is not possible flag. Wait = FALSE",!FsRtlCopyWrite(Pfo,&Offset,Length,FALSE,0,Buffer,&IoStatus,NULL))
-    /* Set the flag back to what it was */
-    FcbHeader->IsFastIoPossible = FastIoIsPossible;
-    FSRTL_TEST("FsRtlCopyWrite() - FastIo is possbile flag. Wait = FALSE",FsRtlCopyWrite(Pfo,&Offset,Length,FALSE,0,Buffer,&IoStatus,NULL))
-
-
-    /*  ------------------------------------------------------------------------------------------
-            TESTING:
-
-                BOOLEAN
-                NTAPI
-                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)
-
-        ------------------------------------------------------------------------------------------  */
-
-    Offset.LowPart = 0x0;
-    Offset.HighPart = 0x0;
-    Length  = 0x10000;
-
-    /* Testing a 64KB read with Wait = TRUE */
-    Return = FsRtlCopyRead(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL);
-    FSRTL_TEST("FsRtlCopyRead() - Testing 64k IO Wait=TRUE",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-    /* Testing a 64KB read with Wait = FALSE */
-    Return = FsRtlCopyRead(Pfo,&Offset,Length,FALSE,0,Buffer,&IoStatus,NULL);
-    FSRTL_TEST("FsRtlCopyRead() - Testing 64k IO Wait=FALSE",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-    /* Testing read past the end of the file */
-    Offset.QuadPart = FileSize->QuadPart - (5 * _1KB);
-    Length = 10 * _1KB;
-    Return = FsRtlCopyRead(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL);
-    FSRTL_TEST("FsRtlCopyRead() - Testing reading past end of file but starting before EOF",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status) && IoStatus.Information == (FileSize->QuadPart-Offset.QuadPart)));
-
-    Offset.QuadPart = FileSize->QuadPart + 1;
-    Length = 10 * _1KB;
-    Return = FsRtlCopyRead(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL);
-    FSRTL_TEST("FsRtlCopyRead() - Testing reading past end of file but starting after EOF",(NT_SUCCESS(Return) && (IoStatus.Status == STATUS_END_OF_FILE) && IoStatus.Information == 0));
-
-
-    /* Testing a 64KB read with Wait = TRUE */
-    Offset.LowPart = 0x0;
-    Offset.HighPart = 0x0;
-    Length  = 0x10000;
-    FcbHeader->IsFastIoPossible = FastIoIsNotPossible;
-    FSRTL_TEST("FsRtlCopyRead() - FastIo is not possible flag. Wait = FALSE",!FsRtlCopyRead(Pfo,&Offset,Length,FALSE,0,Buffer,&IoStatus,NULL));
-    FSRTL_TEST("FsRtlCopyRead() - FastIo is not possible flag. Wait = TRUE",!FsRtlCopyRead(Pfo,&Offset,Length,TRUE,0,Buffer,&IoStatus,NULL));
-    FcbHeader->IsFastIoPossible = FastIoIsPossible;
-    Return = TRUE;
-
-    if (Pfo)
-    {
-        ObDereferenceObject(Pfo);
-        Pfo = NULL;
-    }
-
-    if (Fh)
-    {
-        ZwClose(Fh);
-        Fh = NULL;
-     }
-
-    /*  ------------------------------------------------------------------------
-            TESTING:
-                BOOLEAN
-                NTAPI
-                FsRtlPrepareMdlWriteDev(IN PFILE_OBJECT FileObject,
-                                        IN PLARGE_INTEGER FileOffset,
-                                        IN ULONG Length,
-                                        IN ULONG LockKey,
-                                        OUT PMDL *MdlChain,
-                                        OUT PIO_STATUS_BLOCK IoStatus,
-                                        IN PDEVICE_OBJECT DeviceObject)
-
-        ------------------------------------------------------------------------  */
-
-    /* We are going to repeat the same bunch of tests but with Wait = FALSE. So we exercise the second part of the function. */
-    FsRtlTest_OpenTestFile(&Fh, &Pfo);
-
-    /* Extract the test variable from the FCB struct */
-    FcbHeader = (PFSRTL_COMMON_FCB_HEADER)Pfo->FsContext;
-    AllocationSize = &FcbHeader->AllocationSize;
-    ValidDataLength = &FcbHeader->ValidDataLength;
-    FileSize = &FcbHeader->FileSize;
-
-    /* Try to cache without caching having been initialized. This should fail.*/
-    Length = 10*_1KB;
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - No cache map test. Wait = FALSE",
-        !FsRtlPrepareMdlWriteDev(Pfo,AllocationSize,Length,0,MdlChain,&IoStatus,NULL));
-
-    /* We are going to build a 100k file */
-    /* This will inititate caching and build some size */
-    Offset.QuadPart = 0;
-    Length = 100*_1KB;
-    Return = FsRltTest_WritefileZw(Fh,&Offset,Length, Buffer, &IoStatus);
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Building 100k filesize. Wait = FALSE",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-    /* Extending the file by 1/2 sector, 256 bytes. */
-    Offset.QuadPart = 0x7fffffffffff;
-    Length = 0x100;
-    Return = FsRltTest_WritefileZw(Fh,NULL,Length, Buffer, &IoStatus);
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Extending by 1/2 sector. Wait = FALSE",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-
-    pRelatedDo = IoGetRelatedDeviceObject(Pfo);
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Did we get related DO ?",pRelatedDo);
-
-
-    /* Append to the file past the allocation size*/
-    Offset.QuadPart = FileSize->QuadPart;
-    OldSize.QuadPart = FileSize->QuadPart;
-    Length = (ULONG) (AllocationSize->QuadPart -ValidDataLength->QuadPart);
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Testing extending past allocation size.",
-        !FsRtlPrepareMdlWriteDev(Pfo,&Offset,Length+1,0,&MdlChain,&IoStatus,pRelatedDo));
-
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Testing extending not past allocation size.",
-          FsRtlPrepareMdlWriteDev(Pfo,&Offset,Length,0,&MdlChain,&IoStatus,pRelatedDo));
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Check filesize",(FileSize->QuadPart = (OldSize.QuadPart+Length)));
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Release the MDL.",FsRtlMdlWriteCompleteDev(Pfo,&Offset,MdlChain,pRelatedDo));
-
-
-    /* Try do write a 65kb IO and check that if fails. Maximum IO size for thus function is 64KB */
-    Offset.QuadPart = 0;
-    MdlChain = NULL;
-    Length = 65*_1KB;
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - 65KB IO Test.",
-        FsRtlPrepareMdlWriteDev(Pfo,&Offset,Length,0,&MdlChain,&IoStatus,pRelatedDo));
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Release the MDL.",FsRtlMdlWriteCompleteDev(Pfo,&Offset,MdlChain,pRelatedDo));
-
-     /* Try do write a 64kb IO. Maximum IO size for thus function is 64KB */
-    Length = 64*_1KB;
-    MdlChain = NULL;
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - 64KB IO Test.",
-        FsRtlPrepareMdlWriteDev(Pfo,&Offset,Length,0,&MdlChain,&IoStatus,NULL))
-    FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Release the MDL.",FsRtlMdlWriteCompleteDev(Pfo,&Offset,MdlChain,NULL));
-
-     /* Test the fast Io not possible flag */
-   FcbHeader->IsFastIoPossible = FastIoIsNotPossible;
-   FSRTL_TEST("FsRtlPrepareMdlWriteDev() - FastIo is not possible flag.",
-       !FsRtlPrepareMdlWriteDev(Pfo,&Offset,Length,0,&MdlChain,&IoStatus,NULL))
-
-    if (Pfo)
-    {
-        ObDereferenceObject(Pfo);
-        Pfo = NULL;
-    }
-
-    if (Fh)
-    {
-        ZwClose(Fh);
-        Fh = NULL;
-     }
-
-    /*  ------------------------------------------------------------------------
-            TESTING:
-                BOOLEAN
-                NTAPI
-                FsRtlPrepareMdlWrite(   IN PFILE_OBJECT FileObject,
-                                        IN PLARGE_INTEGER FileOffset,
-                                        IN ULONG Length,
-                                        IN ULONG LockKey,
-                                        OUT PMDL *MdlChain,
-                                        OUT PIO_STATUS_BLOCK IoStatus,
-                                        IN PDEVICE_OBJECT DeviceObject)
-
-        ------------------------------------------------------------------------  */
-
-    /* We are going to repeat the same bunch of tests but with Wait = FALSE. So we exercise the second part of the function. */
-    FsRtlTest_OpenTestFile(&Fh, &Pfo);
-
-    /* Extract the test variable from the FCB struct */
-    FcbHeader = (PFSRTL_COMMON_FCB_HEADER)Pfo->FsContext;
-    AllocationSize = &FcbHeader->AllocationSize;
-    ValidDataLength = &FcbHeader->ValidDataLength;
-    FileSize = &FcbHeader->FileSize;
-
-    /* Try to cache without caching having been initialized. This should fail.*/
-    Length = 10*_1KB;
-    FSRTL_TEST("FsRtlPrepareMdlWrite() - No cache map test. Wait = FALSE",
-        !FsRtlPrepareMdlWrite(Pfo,AllocationSize,Length,0,MdlChain,&IoStatus));
-
-    /* We are going to build a 100k file */
-    /* This will inititate caching and build some size */
-    Offset.QuadPart = 0;
-    Length = 100*_1KB;
-    Return = FsRltTest_WritefileZw(Fh,&Offset,Length, Buffer, &IoStatus);
-    FSRTL_TEST("FsRtlPrepareMdlWrite() - Building 100k filesize. Wait = FALSE",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-    /* Extending the file by 1/2 sector, 256 bytes. */
-    Offset.QuadPart = 0x7fffffffffff;
-    Length = 0x100;
-    Return = FsRltTest_WritefileZw(Fh,NULL,Length, Buffer, &IoStatus);
-    FSRTL_TEST("FsRtlPrepareMdlWrite() - Extending by 1/2 sector. Wait = FALSE",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-
-    /* Append to the file past the allocation size*/
-    MdlChain = NULL;
-    Offset.QuadPart = FileSize->QuadPart;
-    OldSize.QuadPart = FileSize->QuadPart;
-    Length = (ULONG) (AllocationSize->QuadPart -ValidDataLength->QuadPart);
-    FSRTL_TEST("FsRtlPrepareMdlWrite() - Testing extending past allocation size.",
-        !FsRtlPrepareMdlWrite(Pfo,&Offset,Length+1,0,&MdlChain,&IoStatus));
-
-    FSRTL_TEST("FsRtlPrepareMdlWrite() - Testing extending not past allocation size.",
-          FsRtlPrepareMdlWrite(Pfo,&Offset,Length,0,&MdlChain,&IoStatus));
-    FSRTL_TEST("FsRtlPrepareMdlWrite() - Check filesize",(FileSize->QuadPart = (OldSize.QuadPart+Length)));
-    FSRTL_TEST("FsRtlPrepareMdlWrite() - Release the MDL.",FsRtlMdlWriteComplete(Pfo,&Offset,MdlChain));
-
-
-    /* Try do write a 65kb IO and check that if fails. Maximum IO size for thus function is 64KB */
-    Offset.QuadPart = 0;
-    MdlChain = NULL;
-    Length = 65*_1KB;
-    FSRTL_TEST("FsRtlPrepareMdlWrite() - 65KB IO Test.",
-        !FsRtlPrepareMdlWrite(Pfo,&Offset,Length,0,&MdlChain,&IoStatus));
-    //FSRTL_TEST("FsRtlPrepareMdlWrite() - Release the MDL.",FsRtlMdlWriteComplete(Pfo,&Offset,MdlChain));
-
-     /* Try do write a 64kb IO. Maximum IO size for thus function is 64KB */
-    Length = 64*_1KB;
-    MdlChain = NULL;
-    FSRTL_TEST("FsRtlPrepareMdlWrite() - 64KB IO Test.",
-        FsRtlPrepareMdlWrite(Pfo,&Offset,Length,0,&MdlChain,&IoStatus))
-    FSRTL_TEST("FsRtlPrepareMdlWrite() - Release the MDL.",FsRtlMdlWriteComplete(Pfo,&Offset,MdlChain));
-
-     /* Test the fast Io not possible flag */
-   FcbHeader->IsFastIoPossible = FastIoIsNotPossible;
-   FSRTL_TEST("FsRtlPrepareMdlWrite() - FastIo is not possible flag.",
-       !FsRtlPrepareMdlWrite(Pfo,&Offset,Length,0,&MdlChain,&IoStatus))
-
-    if (Pfo)
-    {
-        ObDereferenceObject(Pfo);
-        Pfo = NULL;
-    }
-
-    if (Fh)
-    {
-        ZwClose(Fh);
-        Fh = NULL;
-     }
-
-    /*  ------------------------------------------------------------------------------------------
-        TESTING:
-
-            FsRtlMdlReadDev(IN PFILE_OBJECT FileObject,
-                        IN PLARGE_INTEGER FileOffset,
-                        IN ULONG Length,
-                        IN ULONG LockKey,
-                        OUT PMDL *MdlChain,
-                        OUT PIO_STATUS_BLOCK IoStatus,
-                        IN PDEVICE_OBJECT DeviceObject)
-
-            FsRtlMdlReadCompleteDev(IN PFILE_OBJECT FileObject,
-                                    IN PMDL MemoryDescriptorList,
-                                    IN PDEVICE_OBJECT DeviceObject)
-
-        ------------------------------------------------------------------------------------------
-    */
-
-    FsRtlTest_OpenTestFile(&Fh, &Pfo);
-
-    /* Extract the test variable from the FCB struct */
-    FcbHeader = (PFSRTL_COMMON_FCB_HEADER)Pfo->FsContext;
-    AllocationSize = &FcbHeader->AllocationSize;
-    ValidDataLength = &FcbHeader->ValidDataLength;
-    FileSize = &FcbHeader->FileSize;
-
-
-    /* We are going to build a 100k file */
-    /* This will inititate caching and build some size */
-    Offset.QuadPart = 0;
-    Length = 100*_1KB;
-    Return = FsRltTest_WritefileZw(Fh,&Offset,Length, Buffer, &IoStatus);
-    FSRTL_TEST("FsRtlMdlReadDev() - Building 100k filesize.",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-
-    Offset.LowPart = 0x0;
-    Offset.HighPart = 0x0;
-    Length  = 0x10000;
-
-    /* Testing a 64KB read */
-    MdlChain = NULL;
-    Return = FsRtlMdlReadDev(Pfo,&Offset,Length,0,&MdlChain,&IoStatus,NULL);
-    FSRTL_TEST("FsRtlMdlReadDev() - Testing 64k IO",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    FSRTL_TEST("FsRtlMdlReadDev() - Releasing the MDL",FsRtlMdlReadCompleteDev(Pfo,MdlChain,NULL));
-
-
-    /* Testing read past the end of the file */
-    Offset.QuadPart = FileSize->QuadPart - (5 * _1KB);
-    Length = 10 * _1KB;
-    MdlChain = NULL;
-    Return = FsRtlMdlReadDev(Pfo,&Offset,Length,0,&MdlChain,&IoStatus,NULL);
-    FSRTL_TEST("FsRtlMdlReadDev() - Testing reading past end of file but starting before EOF",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status) && IoStatus.Information == (FileSize->QuadPart-Offset.QuadPart)));
-    FSRTL_TEST("FsRtlMdlReadDev() - Releasing the MDL",FsRtlMdlReadCompleteDev(Pfo,MdlChain,NULL));
-
-    Offset.QuadPart = FileSize->QuadPart + 1;
-    Length = 10 * _1KB;
-    MdlChain = NULL;
-    Return = FsRtlMdlReadDev(Pfo,&Offset,Length,0,&MdlChain,&IoStatus,NULL);
-    FSRTL_TEST("FsRtlMdlReadDev() - Testing reading past end of file but starting after EOF",(NT_SUCCESS(Return) && (IoStatus.Status == STATUS_END_OF_FILE) && IoStatus.Information == 0));
-
-    /* Testing FastIoIsNotPossible */
-    Offset.LowPart = 0x0;
-    Offset.HighPart = 0x0;
-    MdlChain = NULL;
-    Length  = 0x10000;
-    FcbHeader->IsFastIoPossible = FastIoIsNotPossible;
-    FSRTL_TEST("FsRtlMdlReadDev() - FastIo is not possible flag. Wait = TRUE",!FsRtlMdlReadDev(Pfo,&Offset,Length,0,&MdlChain,&IoStatus,NULL));
-
-    Return = TRUE;
-
-    if (Pfo)
-    {
-        ObDereferenceObject(Pfo);
-        Pfo = NULL;
-    }
-
-    if (Fh)
-    {
-        ZwClose(Fh);
-        Fh = NULL;
-    }
-
-    /*  ------------------------------------------------------------------------------------------
-        TESTING:
-
-            FsRtlMdlRead(IN PFILE_OBJECT FileObject,
-                        IN PLARGE_INTEGER FileOffset,
-                        IN ULONG Length,
-                        IN ULONG LockKey,
-                        OUT PMDL *MdlChain,
-                        OUT PIO_STATUS_BLOCK IoStatus)
-
-            FsRtlMdlReadComplete(IN PFILE_OBJECT FileObject,
-                                    IN PMDL MemoryDescriptorList)
-
-        ------------------------------------------------------------------------------------------
-    */
-
-    FsRtlTest_OpenTestFile(&Fh, &Pfo);
-
-    /* Extract the test variable from the FCB struct */
-    FcbHeader = (PFSRTL_COMMON_FCB_HEADER)Pfo->FsContext;
-    AllocationSize = &FcbHeader->AllocationSize;
-    ValidDataLength = &FcbHeader->ValidDataLength;
-    FileSize = &FcbHeader->FileSize;
-
-
-    /* We are going to build a 100k file */
-    /* This will inititate caching and build some size */
-    Offset.QuadPart = 0;
-    Length = 100*_1KB;
-    Return = FsRltTest_WritefileZw(Fh,&Offset,Length, Buffer, &IoStatus);
-    FSRTL_TEST("FsRtlMdlRead() - Building 100k filesize.",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    Return = TRUE;
-
-
-    Offset.LowPart = 0x0;
-    Offset.HighPart = 0x0;
-    Length  = 0x10000;
-
-    /* Testing a 64KB read */
-    MdlChain = NULL;
-    Return = FsRtlMdlRead(Pfo,&Offset,Length,0,&MdlChain,&IoStatus);
-    FSRTL_TEST("FsRtlMdlRead() - Testing 64k IO",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status ) && IoStatus.Information == Length));
-    FSRTL_TEST("FsRtlMdlRead() - Releasing the MDL",FsRtlMdlReadComplete(Pfo,MdlChain));
-
-
-    /* Testing read past the end of the file */
-    Offset.QuadPart = FileSize->QuadPart - (5 * _1KB);
-    Length = 10 * _1KB;
-    MdlChain = NULL;
-    Return = FsRtlMdlRead(Pfo,&Offset,Length,0,&MdlChain,&IoStatus);
-    FSRTL_TEST("FsRtlMdlRead() - Testing reading past end of file but starting before EOF",(NT_SUCCESS(Return) && NT_SUCCESS(IoStatus.Status) && IoStatus.Information == (FileSize->QuadPart-Offset.QuadPart)));
-    FSRTL_TEST("FsRtlMdlRead() - Releasing the MDL",FsRtlMdlReadComplete(Pfo,MdlChain));
-
-    Offset.QuadPart = FileSize->QuadPart + 1;
-    Length = 10 * _1KB;
-    MdlChain = NULL;
-    Return = FsRtlMdlRead(Pfo,&Offset,Length,0,&MdlChain,&IoStatus);
-    FSRTL_TEST("FsRtlMdlRead() - Testing reading past end of file but starting after EOF",(NT_SUCCESS(Return) && (IoStatus.Status == STATUS_END_OF_FILE) && IoStatus.Information == 0));
-
-    /* Testing FastIoIsNotPossible */
-    Offset.LowPart = 0x0;
-    Offset.HighPart = 0x0;
-    MdlChain = NULL;
-    Length  = 0x10000;
-    FcbHeader->IsFastIoPossible = FastIoIsNotPossible;
-    FSRTL_TEST("FsRtlMdlRead() - FastIo is not possible flag. Wait = TRUE",!FsRtlMdlRead(Pfo,&Offset,Length,0,&MdlChain,&IoStatus));
-
-    Return = TRUE;
-
-    if (Pfo)
-    {
-        ObDereferenceObject(Pfo);
-        Pfo = NULL;
-    }
-
-    if (Fh)
-    {
-        ZwClose(Fh);
-        Fh = NULL;
-    }
-
-
-
-    /*  ------------------------------------------------------------------------------------------
-        TESTING:
-
-                    FsRtlGetFileSize(IN PFILE_OBJECT  FileObject,
-                                     IN OUT PLARGE_INTEGER FileSize)
-
-        ------------------------------------------------------------------------------------------
-    */
-    FsRtlTest_OpenTestFile(&Fh, &Pfo);
-    FSRTL_TEST("FsRtlGetFileSize() - Opening Test File.",((Pfo != NULL) && (Fh != NULL)));
-
-    FsRtlTest_OpenTestDirectory(&DirFh, &DirPfo);
-    FSRTL_TEST("FsRtlGetFileSize() - Opening Test Directory.",((DirPfo != NULL) && (DirFh != NULL)));
-
-    Status = FsRtlGetFileSize(Pfo,&OldSize);
-    FSRTL_TEST("FsRtlGetFileSize() - Get the size of a real file",NT_SUCCESS(Status));
-
-    Status = FsRtlGetFileSize(DirPfo,&OldSize);
-    FSRTL_TEST("FsRtlGetFileSize() - Get the size of a directory file",(Status == STATUS_FILE_IS_A_DIRECTORY));
-
-
-    /* The test if over. Do clean up */
-
-Cleanup:
-
-    if (DirPfo)
-    {
-        ObDereferenceObject(DirPfo);
-        DirPfo = NULL;
-    }
-
-    if (DirFh)
-    {
-        ZwClose(DirFh);
-        DirFh = NULL;
-     }
-    if (Pfo)
-    {
-        ObDereferenceObject(Pfo);
-        Pfo = NULL;
-    }
-
-    if (Fh)
-    {
-        ZwClose(Fh);
-        Fh = NULL;
-     }
-
-    if (Buffer != NULL) {
-        ExFreePool(Buffer);
-        Buffer = NULL;
-    }
-
-    return Return;
-
-}
-
-/*  This function is just a wrapper around ZwWriteFile */
-NTSTATUS FsRltTest_WritefileZw(HANDLE fh, PLARGE_INTEGER Offset, ULONG Length, PVOID Buffer, PIO_STATUS_BLOCK pIoStatus){
-    NTSTATUS Return;
-
-    Return = ZwWriteFile(
-        fh,
-        NULL,
-        NULL,
-        NULL,
-        pIoStatus,
-        Buffer,
-        Length,
-        Offset,
-        NULL
-        );
-
-    return Return;
-}
-
-/* This function fills the buffer with a test pattern */
-void FsRtlTest_FillBuffer(LARGE_INTEGER Start, ULONG Length, PVOID Buffer) {
-    ULONG i = 0;
-    PULONGLONG Index = (PULONGLONG) Buffer;
-
-    for (i=0; i<Length/sizeof(ULONGLONG); i++) {
-        Index[i] = Start.QuadPart + i;
-    }
-
-    return;
- }
-
-/*  This function opens a test file with the FILE_DELETE_ON_CLOSE flag
-    and reference the file object
-*/
- NTSTATUS FsRtlTest_OpenTestFile(PHANDLE Pfh, PFILE_OBJECT *Ppfo) {
-    UNICODE_STRING FileName;
-    OBJECT_ATTRIBUTES oa;
-    IO_STATUS_BLOCK IoStatus;
-    NTSTATUS  Return;
-
-    RtlInitUnicodeString(&FileName,L"\\??\\C:\\fsrtl.bin");
-
-    InitializeObjectAttributes(
-    &oa,
-    &FileName,
-    OBJ_KERNEL_HANDLE,
-    NULL,
-    NULL;
-    );
-
-    Return = IoCreateFile(Pfh,
-                        GENERIC_WRITE,
-                        &oa,
-                        &IoStatus,
-                        0,
-                        FILE_ATTRIBUTE_NORMAL,
-                        0,
-                        FILE_OVERWRITE_IF      ,
-                        FILE_SYNCHRONOUS_IO_ALERT | FILE_DELETE_ON_CLOSE,
-                        NULL,
-                        0,
-                        CreateFileTypeNone,
-                        NULL,
-                        0);
-
-      Return = ObReferenceObjectByHandle(
-        *Pfh,
-        GENERIC_WRITE,
-        NULL,
-        KernelMode,
-        Ppfo,
-        NULL
-        );
-}
-
- NTSTATUS FsRtlTest_OpenTestDirectory(PHANDLE Pfh, PFILE_OBJECT *Ppfo) {
-    UNICODE_STRING FileName;
-    OBJECT_ATTRIBUTES oa;
-    IO_STATUS_BLOCK IoStatus;
-    NTSTATUS  Return;
-
-    RtlInitUnicodeString(&FileName,L"\\??\\C:\\testdir01");
-
-    InitializeObjectAttributes(
-    &oa,
-    &FileName,
-    OBJ_KERNEL_HANDLE,
-    NULL,
-    NULL;
-    );
-
-    Return = IoCreateFile(Pfh,
-                        GENERIC_WRITE,
-                        &oa,
-                        &IoStatus,
-                        0,
-                        FILE_ATTRIBUTE_NORMAL,
-                        0,
-                        FILE_OPEN_IF,
-                        FILE_DIRECTORY_FILE,FILE_SYNCHRONOUS_IO_ALERT | FILE_DELETE_ON_CLOSE,
-                        NULL,
-                        0,
-                        CreateFileTypeNone,
-                        NULL,
-                        0);
-
-      Return = ObReferenceObjectByHandle(
-        *Pfh,
-        GENERIC_WRITE,
-        NULL,
-        KernelMode,
-        Ppfo,
-        NULL
-        );
-}
-
-/* All the testing is done from driver entry */
-NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath )
-{
-    PDEVICE_OBJECT DeviceObject;
-    NTSTATUS mStatus;
-    UNICODE_STRING uniName, uniDOSName;
-    PDEVOBJ_EXTENSION  x;
-
-    DbgPrint("Loading the FSRTL test driver.\n");
-    DbgBreakPoint();
-
-    /* register device functions */
-    DriverObject->MajorFunction[IRP_MJ_CREATE] = FsRtlTest_DispatchCreateClose;
-    DriverObject->MajorFunction[IRP_MJ_CLOSE] = FsRtlTest_DispatchCreateClose;
-    DriverObject->DriverUnload = FsRtlTest_Unload;
-
-    if (!FsRtlTest_StartTest()) {
-        DbgPrint("FsRtl test failed.\n");
-    } else {
-        DbgPrint("FsRtl test OK.\n");
-    }
-
-    return STATUS_SUCCESS;
-}
-
-
-
-
-
-
-NTSTATUS FsRtlTest_DispatchCreateClose( IN PDEVICE_OBJECT devObj, IN PIRP Irp )
-{
-  DbgPrint(("FsRtl: Open / Close\n"));
-
-  Irp->IoStatus.Information = 0;
-  Irp->IoStatus.Status = STATUS_SUCCESS;
-  IoCompleteRequest( Irp, IO_NO_INCREMENT );
-
-  return STATUS_SUCCESS;
-}
-
-VOID FsRtlTest_Unload( IN PDRIVER_OBJECT DriverObject )
-{
-      DbgPrint(("FsRtl: Unloading.\n"));
-}
-
-