[NTOSKRNL]
[reactos.git] / reactos / ntoskrnl / fsrtl / largemcb.c
index f0e4c8c..a9edfed 100644 (file)
-/*\r
- * PROJECT:         ReactOS Kernel\r
- * LICENSE:         GPL - See COPYING in the top level directory\r
- * FILE:            ntoskrnl/fsrtl/largemcb.c\r
- * PURPOSE:         Mapping Control Block (MCB) support for File System Drivers\r
- * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)\r
- */\r
-\r
-/* INCLUDES ******************************************************************/\r
-\r
-#include <ntoskrnl.h>\r
-#define NDEBUG\r
-#include <debug.h>\r
-\r
-/* PUBLIC FUNCTIONS **********************************************************/\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-BOOLEAN\r
-NTAPI\r
-FsRtlAddLargeMcbEntry(IN PLARGE_MCB Mcb,\r
-                      IN LONGLONG Vbn,\r
-                      IN LONGLONG Lbn,\r
-                      IN LONGLONG SectorCount)\r
-{\r
-    KEBUGCHECK(0);\r
-    return FALSE;\r
-}\r
-\r
-/*\r
- * @implemented\r
- */\r
-BOOLEAN\r
-NTAPI\r
-FsRtlAddMcbEntry(IN PMCB Mcb,\r
-                 IN VBN Vbn,\r
-                 IN LBN Lbn,\r
-                 IN ULONG SectorCount)\r
-{\r
-    /* Call the newer function */\r
-    return FsRtlAddLargeMcbEntry(&Mcb->\r
-                                 DummyFieldThatSizesThisStructureCorrectly,\r
-                                 (LONGLONG)Vbn,\r
-                                 (LONGLONG)Lbn,\r
-                                 (LONGLONG)SectorCount);\r
-}\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-BOOLEAN\r
-NTAPI\r
-FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb,\r
-                          IN ULONG RunIndex,\r
-                          OUT PLONGLONG Vbn,\r
-                          OUT PLONGLONG Lbn,\r
-                          OUT PLONGLONG SectorCount)\r
-{\r
-    KEBUGCHECK(0);\r
-    return FALSE;\r
-}\r
-\r
-/*\r
- * @implemented\r
- */\r
-BOOLEAN\r
-NTAPI\r
-FsRtlGetNextMcbEntry(IN PMCB Mcb,\r
-                     IN ULONG RunIndex,\r
-                     OUT PVBN Vbn,\r
-                     OUT PLBN Lbn,\r
-                     OUT PULONG SectorCount)\r
-{\r
-    BOOLEAN Return = FALSE;\r
-    LONGLONG llVbn;\r
-    LONGLONG llLbn;\r
-    LONGLONG llSectorCount;\r
-\r
-    /* Call the Large version */\r
-    Return = FsRtlGetNextLargeMcbEntry(\r
-        &Mcb->DummyFieldThatSizesThisStructureCorrectly,\r
-        RunIndex,\r
-        &llVbn,\r
-        &llLbn,\r
-        &llSectorCount);\r
-\r
-    /* Return the lower 32 bits */\r
-    *Vbn = (ULONG)llVbn;\r
-    *Lbn = (ULONG)llLbn;\r
-    *SectorCount = (ULONG)llSectorCount;\r
-\r
-    /* And return the original value */\r
-    return Return;\r
-}\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-VOID\r
-NTAPI\r
-FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb,\r
-                        IN POOL_TYPE PoolType)\r
-{\r
-    KEBUGCHECK(0);\r
-}\r
-\r
-/*\r
- * @implemented\r
- */\r
-VOID\r
-NTAPI\r
-FsRtlInitializeMcb(IN PMCB Mcb,\r
-                   IN POOL_TYPE PoolType)\r
-{\r
-    /* Call the newer function */\r
-    FsRtlInitializeLargeMcb(&Mcb->DummyFieldThatSizesThisStructureCorrectly,\r
-                            PoolType);\r
-}\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-BOOLEAN\r
-NTAPI\r
-FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb,\r
-                         IN LONGLONG Vbn,\r
-                         OUT PLONGLONG Lbn OPTIONAL,\r
-                         OUT PLONGLONG SectorCountFromLbn OPTIONAL,\r
-                         OUT PLONGLONG StartingLbn OPTIONAL,\r
-                         OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,\r
-                         OUT PULONG Index OPTIONAL)\r
-{\r
-    KEBUGCHECK(0);\r
-    return FALSE;\r
-}\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-BOOLEAN\r
-NTAPI\r
-FsRtlLookupLastLargeMcbEntryAndIndex(IN PLARGE_MCB OpaqueMcb,\r
-                                     OUT PLONGLONG LargeVbn,\r
-                                     OUT PLONGLONG LargeLbn,\r
-                                     OUT PULONG Index)\r
-{\r
-    KEBUGCHECK(0);\r
-    return FALSE;\r
-}\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-BOOLEAN\r
-NTAPI\r
-FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb,\r
-                             OUT PLONGLONG Vbn,\r
-                             OUT PLONGLONG Lbn)\r
-{\r
-    KEBUGCHECK(0);\r
-    return(FALSE);\r
-}\r
-\r
-/*\r
- * @implemented\r
- */\r
-BOOLEAN\r
-NTAPI\r
-FsRtlLookupLastMcbEntry(IN PMCB Mcb,\r
-                        OUT PVBN Vbn,\r
-                        OUT PLBN Lbn)\r
-{\r
-    BOOLEAN Return = FALSE;\r
-    LONGLONG llVbn;\r
-    LONGLONG llLbn;\r
-\r
-    /* Call the Large version */\r
-    Return = FsRtlLookupLastLargeMcbEntry(\r
-        &Mcb->DummyFieldThatSizesThisStructureCorrectly,\r
-        &llVbn,\r
-        &llLbn);\r
-\r
-    /* Return the lower 32-bits */\r
-    *Vbn = (ULONG)llVbn;\r
-    *Lbn = (ULONG)llLbn;\r
-\r
-    /* And return the original value */\r
-    return Return;\r
-}\r
-\r
-/*\r
- * @implemented\r
- */\r
-BOOLEAN\r
-NTAPI\r
-FsRtlLookupMcbEntry(IN PMCB Mcb,\r
-                    IN VBN Vbn,\r
-                    OUT PLBN Lbn,\r
-                    OUT PULONG SectorCount OPTIONAL,\r
-                    OUT PULONG Index)\r
-{\r
-    BOOLEAN Return = FALSE;\r
-    LONGLONG llLbn;\r
-    LONGLONG llSectorCount;\r
-\r
-    /* Call the Large version */\r
-    Return = FsRtlLookupLargeMcbEntry(&Mcb->\r
-                                      DummyFieldThatSizesThisStructureCorrectly,\r
-                                      (LONGLONG)Vbn,\r
-                                      &llLbn,\r
-                                      &llSectorCount,\r
-                                      NULL,\r
-                                      NULL,\r
-                                      Index);\r
-\r
-    /* Return the lower 32-bits */\r
-    *Lbn = (ULONG)llLbn;\r
-    if (SectorCount) *SectorCount = (ULONG)llSectorCount;\r
-\r
-    /* And return the original value */\r
-    return Return;\r
-}\r
-\r
-/*\r
- * @implemented\r
- */\r
-ULONG\r
-NTAPI\r
-FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb)\r
-{\r
-    ULONG NumberOfRuns;\r
-\r
-    /* Read the number of runs while holding the MCB lock */\r
-    KeAcquireGuardedMutex(Mcb->GuardedMutex);\r
-    NumberOfRuns = Mcb->BaseMcb.PairCount;\r
-    KeReleaseGuardedMutex(Mcb->GuardedMutex);\r
-\r
-    /* Return the count */\r
-    return NumberOfRuns;\r
-}\r
-\r
-/*\r
- * @implemented\r
- */\r
-ULONG\r
-NTAPI\r
-FsRtlNumberOfRunsInMcb (IN PMCB Mcb)\r
-{\r
-    /* Call the newer function */\r
-    return FsRtlNumberOfRunsInLargeMcb(\r
-        &Mcb->DummyFieldThatSizesThisStructureCorrectly);\r
-}\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-VOID\r
-NTAPI\r
-FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb,\r
-                         IN LONGLONG Vbn,\r
-                         IN LONGLONG SectorCount)\r
-{\r
-    KEBUGCHECK(0);\r
-}\r
-\r
-/*\r
- * @implemented\r
- */\r
-VOID\r
-NTAPI\r
-FsRtlRemoveMcbEntry(IN PMCB Mcb,\r
-                    IN VBN Vbn,\r
-                    IN ULONG SectorCount)\r
-{\r
-    /* Call the large function */\r
-    FsRtlRemoveLargeMcbEntry(&Mcb->DummyFieldThatSizesThisStructureCorrectly,\r
-                             (LONGLONG)Vbn,\r
-                             (LONGLONG)SectorCount);\r
-}\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-VOID\r
-NTAPI\r
-FsRtlResetLargeMcb(IN PLARGE_MCB Mcb,\r
-                   IN BOOLEAN SelfSynchronized)\r
-{\r
-    KEBUGCHECK(0);\r
-}\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-BOOLEAN\r
-NTAPI\r
-FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb,\r
-                   IN LONGLONG Vbn,\r
-                   IN LONGLONG Amount)\r
-{\r
-    KEBUGCHECK(0);\r
-    return FALSE;\r
-}\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-VOID\r
-NTAPI\r
-FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb,\r
-                      IN LONGLONG Vbn)\r
-{\r
-    KEBUGCHECK(0);\r
-}\r
-\r
-/*\r
- * @implemented\r
- */\r
-VOID\r
-NTAPI\r
-FsRtlTruncateMcb (IN PMCB Mcb,\r
-                  IN VBN  Vbn)\r
-{\r
-    /* Call the newer function */\r
-    FsRtlTruncateLargeMcb(&Mcb->DummyFieldThatSizesThisStructureCorrectly,\r
-                          (LONGLONG)Vbn);\r
-}\r
-\r
-/*\r
- * @unimplemented\r
- */\r
-VOID\r
-NTAPI\r
-FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb)\r
-{\r
-    KEBUGCHECK(0);\r
-}\r
-\r
-/*\r
- * @implemented\r
- */\r
-VOID\r
-NTAPI\r
-FsRtlUninitializeMcb(IN PMCB Mcb)\r
-{\r
-    /* Call the newer function */\r
-    FsRtlUninitializeLargeMcb(&Mcb->DummyFieldThatSizesThisStructureCorrectly);\r
-}\r
-\r
+/*
+ * PROJECT:         ReactOS Kernel
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * FILE:            ntoskrnl/fsrtl/largemcb.c
+ * PURPOSE:         Mapping Control Block (MCB) support for File System Drivers
+ * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <ntoskrnl.h>
+#define NDEBUG
+#include <debug.h>
+
+/* PUBLIC FUNCTIONS **********************************************************/
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+NTAPI
+FsRtlAddLargeMcbEntry(IN PLARGE_MCB Mcb,
+                      IN LONGLONG Vbn,
+                      IN LONGLONG Lbn,
+                      IN LONGLONG SectorCount)
+{
+    KeBugCheck(FILE_SYSTEM);
+    return FALSE;
+}
+
+/*
+ * @implemented
+ */
+BOOLEAN
+NTAPI
+FsRtlAddMcbEntry(IN PMCB Mcb,
+                 IN VBN Vbn,
+                 IN LBN Lbn,
+                 IN ULONG SectorCount)
+{
+    /* Call the newer function */
+    return FsRtlAddLargeMcbEntry(&Mcb->
+                                 DummyFieldThatSizesThisStructureCorrectly,
+                                 (LONGLONG)Vbn,
+                                 (LONGLONG)Lbn,
+                                 (LONGLONG)SectorCount);
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+NTAPI
+FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb,
+                          IN ULONG RunIndex,
+                          OUT PLONGLONG Vbn,
+                          OUT PLONGLONG Lbn,
+                          OUT PLONGLONG SectorCount)
+{
+    KeBugCheck(FILE_SYSTEM);
+    *Vbn = 0;
+    *Lbn = 0;
+    *SectorCount= 0;
+    return FALSE;
+}
+
+/*
+ * @implemented
+ */
+BOOLEAN
+NTAPI
+FsRtlGetNextMcbEntry(IN PMCB Mcb,
+                     IN ULONG RunIndex,
+                     OUT PVBN Vbn,
+                     OUT PLBN Lbn,
+                     OUT PULONG SectorCount)
+{
+    BOOLEAN Return = FALSE;
+    LONGLONG llVbn;
+    LONGLONG llLbn;
+    LONGLONG llSectorCount;
+
+    /* Call the Large version */
+    Return = FsRtlGetNextLargeMcbEntry(
+        &Mcb->DummyFieldThatSizesThisStructureCorrectly,
+        RunIndex,
+        &llVbn,
+        &llLbn,
+        &llSectorCount);
+
+    /* Return the lower 32 bits */
+    *Vbn = (ULONG)llVbn;
+    *Lbn = (ULONG)llLbn;
+    *SectorCount = (ULONG)llSectorCount;
+
+    /* And return the original value */
+    return Return;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+NTAPI
+FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb,
+                        IN POOL_TYPE PoolType)
+{
+    KeBugCheck(FILE_SYSTEM);
+}
+
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+FsRtlInitializeMcb(IN PMCB Mcb,
+                   IN POOL_TYPE PoolType)
+{
+    /* Call the newer function */
+    FsRtlInitializeLargeMcb(&Mcb->DummyFieldThatSizesThisStructureCorrectly,
+                            PoolType);
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+NTAPI
+FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb,
+                         IN LONGLONG Vbn,
+                         OUT PLONGLONG Lbn OPTIONAL,
+                         OUT PLONGLONG SectorCountFromLbn OPTIONAL,
+                         OUT PLONGLONG StartingLbn OPTIONAL,
+                         OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
+                         OUT PULONG Index OPTIONAL)
+{
+    KeBugCheck(FILE_SYSTEM);
+    *Lbn = 0;
+    *SectorCountFromLbn = 0;
+    return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+NTAPI
+FsRtlLookupLastLargeMcbEntryAndIndex(IN PLARGE_MCB OpaqueMcb,
+                                     OUT PLONGLONG LargeVbn,
+                                     OUT PLONGLONG LargeLbn,
+                                     OUT PULONG Index)
+{
+    KeBugCheck(FILE_SYSTEM);
+    *LargeVbn = 0;
+    *LargeLbn = 0;
+    *Index = 0;
+    return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+NTAPI
+FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb,
+                             OUT PLONGLONG Vbn,
+                             OUT PLONGLONG Lbn)
+{
+    KeBugCheck(FILE_SYSTEM);
+    return(FALSE);
+}
+
+/*
+ * @implemented
+ */
+BOOLEAN
+NTAPI
+FsRtlLookupLastMcbEntry(IN PMCB Mcb,
+                        OUT PVBN Vbn,
+                        OUT PLBN Lbn)
+{
+    BOOLEAN Return = FALSE;
+    LONGLONG llVbn = 0;
+    LONGLONG llLbn = 0;
+
+    /* Call the Large version */
+    Return = FsRtlLookupLastLargeMcbEntry(
+        &Mcb->DummyFieldThatSizesThisStructureCorrectly,
+        &llVbn,
+        &llLbn);
+
+    /* Return the lower 32-bits */
+    *Vbn = (ULONG)llVbn;
+    *Lbn = (ULONG)llLbn;
+
+    /* And return the original value */
+    return Return;
+}
+
+/*
+ * @implemented
+ */
+BOOLEAN
+NTAPI
+FsRtlLookupMcbEntry(IN PMCB Mcb,
+                    IN VBN Vbn,
+                    OUT PLBN Lbn,
+                    OUT PULONG SectorCount OPTIONAL,
+                    OUT PULONG Index)
+{
+    BOOLEAN Return = FALSE;
+    LONGLONG llLbn;
+    LONGLONG llSectorCount;
+
+    /* Call the Large version */
+    Return = FsRtlLookupLargeMcbEntry(&Mcb->
+                                      DummyFieldThatSizesThisStructureCorrectly,
+                                      (LONGLONG)Vbn,
+                                      &llLbn,
+                                      &llSectorCount,
+                                      NULL,
+                                      NULL,
+                                      Index);
+
+    /* Return the lower 32-bits */
+    *Lbn = (ULONG)llLbn;
+    if (SectorCount) *SectorCount = (ULONG)llSectorCount;
+
+    /* And return the original value */
+    return Return;
+}
+
+/*
+ * @implemented
+ */
+ULONG
+NTAPI
+FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb)
+{
+    ULONG NumberOfRuns;
+
+    /* Read the number of runs while holding the MCB lock */
+    KeAcquireGuardedMutex(Mcb->GuardedMutex);
+    NumberOfRuns = Mcb->BaseMcb.PairCount;
+    KeReleaseGuardedMutex(Mcb->GuardedMutex);
+
+    /* Return the count */
+    return NumberOfRuns;
+}
+
+/*
+ * @implemented
+ */
+ULONG
+NTAPI
+FsRtlNumberOfRunsInMcb (IN PMCB Mcb)
+{
+    /* Call the newer function */
+    return FsRtlNumberOfRunsInLargeMcb(
+        &Mcb->DummyFieldThatSizesThisStructureCorrectly);
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+NTAPI
+FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb,
+                         IN LONGLONG Vbn,
+                         IN LONGLONG SectorCount)
+{
+    KeBugCheck(FILE_SYSTEM);
+}
+
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+FsRtlRemoveMcbEntry(IN PMCB Mcb,
+                    IN VBN Vbn,
+                    IN ULONG SectorCount)
+{
+    /* Call the large function */
+    FsRtlRemoveLargeMcbEntry(&Mcb->DummyFieldThatSizesThisStructureCorrectly,
+                             (LONGLONG)Vbn,
+                             (LONGLONG)SectorCount);
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+NTAPI
+FsRtlResetLargeMcb(IN PLARGE_MCB Mcb,
+                   IN BOOLEAN SelfSynchronized)
+{
+    KeBugCheck(FILE_SYSTEM);
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+NTAPI
+FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb,
+                   IN LONGLONG Vbn,
+                   IN LONGLONG Amount)
+{
+    KeBugCheck(FILE_SYSTEM);
+    return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+NTAPI
+FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb,
+                      IN LONGLONG Vbn)
+{
+    KeBugCheck(FILE_SYSTEM);
+}
+
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+FsRtlTruncateMcb (IN PMCB Mcb,
+                  IN VBN  Vbn)
+{
+    /* Call the newer function */
+    FsRtlTruncateLargeMcb(&Mcb->DummyFieldThatSizesThisStructureCorrectly,
+                          (LONGLONG)Vbn);
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+NTAPI
+FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb)
+{
+    KeBugCheck(FILE_SYSTEM);
+}
+
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+FsRtlUninitializeMcb(IN PMCB Mcb)
+{
+    /* Call the newer function */
+    FsRtlUninitializeLargeMcb(&Mcb->DummyFieldThatSizesThisStructureCorrectly);
+}
+