-/*\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);
+}
+