17 #define MIN(x,y) (((x)<(y))?(x):(y)) 18 #define MAX(x,y) (((x)>(y))?(x):(y)) 82 if (
A->RunStartVbn.QuadPart ==
B->RunStartVbn.QuadPart &&
A->RunEndVbn.QuadPart ==
B->RunEndVbn.QuadPart)
84 else if (
A->RunEndVbn.QuadPart <=
B->RunStartVbn.QuadPart)
86 else if (
A->RunEndVbn.QuadPart >=
B->RunStartVbn.QuadPart)
102 if (
A->RunStartVbn.QuadPart <=
B->RunStartVbn.QuadPart &&
A->RunEndVbn.QuadPart >
B->RunStartVbn.QuadPart)
104 else if (
A->RunStartVbn.QuadPart >=
B->RunStartVbn.QuadPart &&
B->RunEndVbn.QuadPart >
A->RunStartVbn.QuadPart)
106 else if (
A->RunStartVbn.QuadPart <
B->RunStartVbn.QuadPart)
108 else if (
A->RunStartVbn.QuadPart >
B->RunStartVbn.QuadPart)
165 if (IntLbn != -1 && IntLbn !=
Lbn)
171 if ((IntLbn != -1) && (IntSectorCount >=
SectorCount))
186 Node.RunStartVbn.QuadPart =
Vbn;
188 Node.StartingLbn.QuadPart =
Lbn;
341 ULONG CurrentIndex = 0;
351 if (
Run->RunStartVbn.QuadPart > (LastVbn + LastSectorCount))
356 *
Vbn = LastVbn + LastSectorCount;
369 *
Vbn =
Run->RunStartVbn.QuadPart;
370 *
Lbn =
Run->StartingLbn.QuadPart;
378 LastVbn =
Run->RunStartVbn.QuadPart;
379 LastSectorCount =
Run->RunEndVbn.QuadPart -
Run->RunStartVbn.QuadPart;
383 DPRINT(
"FsRtlGetNextBaseMcbEntry(%p, %d, %p, %p, %p) = %d (%I64d, %I64d, %I64d)\n",
Mcb,
RunIndex,
Vbn,
Lbn,
SectorCount,
Result, *
Vbn, *
Lbn, *
SectorCount);
410 DPRINT(
"FsRtlGetNextLargeMcbEntry(%p, %d, %p, %p, %p) = %d (%I64d, %I64d, %I64d)\n",
Mcb,
RunIndex,
Vbn,
Lbn,
SectorCount,
Result, *
Vbn, *
Lbn, *
SectorCount);
517 DPRINT(
"FsRtlLookupBaseMcbEntry(%p, %I64d, %p, %p, %p, %p, %p)\n", OpaqueMcb,
Vbn,
Lbn,
SectorCountFromLbn,
StartingLbn,
SectorCountFromStartingLbn,
Index);
529 *
Lbn = LastLbn + (
Vbn - LastVbn);
547 DPRINT(
"FsRtlLookupBaseMcbEntry(%p, %I64d, %p, %p, %p, %p, %p) = %d (%I64d, %I64d, %I64d, %I64d, %d)\n",
570 DPRINT(
"FsRtlLookupLargeMcbEntry(%p, %I64d, %p, %p, %p, %p, %p)\n",
Mcb,
Vbn,
Lbn,
SectorCountFromLbn,
StartingLbn,
SectorCountFromStartingLbn,
Index);
582 DPRINT(
"FsRtlLookupLargeMcbEntry(%p, %I64d, %p, %p, %p, %p, %p) = %d (%I64d, %I64d, %I64d, %I64d, %d)\n",
606 if (
Run->RunStartVbn.QuadPart > LastVbn)
610 LastVbn =
Run->RunEndVbn.QuadPart;
661 DPRINT(
"FsRtlLookupLastBaseMcbEntryAndIndex(%p, %p, %p, %p) = %d (%I64d, %I64d, %d)\n", OpaqueMcb,
LargeVbn,
LargeLbn,
Index,
Result, *
LargeVbn, *
LargeLbn, *
Index);
687 DPRINT(
"FsRtlLookupLastLargeMcbEntryAndIndex(%p, %p, %p, %p) = %d (%I64d, %I64d, %d)\n", OpaqueMcb,
LargeVbn,
LargeLbn,
Index,
Result, *
LargeVbn, *
LargeLbn, *
Index);
704 DPRINT(
"FsRtlLookupLastBaseMcbEntry(%p, %p, %p)\n", OpaqueMcb,
Vbn,
Lbn);
744 ULONG NumberOfRuns = 0;
748 DPRINT(
"FsRtlNumberOfRunsInBaseMcb(%p)\n", OpaqueMcb);
756 DPRINT(
"FsRtlNumberOfRunsInBaseMcb(%p) = %d\n", OpaqueMcb, NumberOfRuns);
769 DPRINT(
"FsRtlNumberOfRunsInLargeMcb(%p)\n",
Mcb);
776 DPRINT(
"FsRtlNumberOfRunsInLargeMcb(%p) = %d\n",
Mcb, NumberOfRuns);
926 DPRINT(
"FsRtlResetBaseMcb(%p)\n", OpaqueMcb);
935 Mcb->MaximumPairCount = 0;
970 DPRINT(
"FsRtlSplitBaseMcb(%p, %I64d, %I64d)\n", OpaqueMcb,
Vbn,
Amount);
979 if (
Vbn >=
Run->RunEndVbn.QuadPart) {
DPRINT(
"Skipping it\n");
continue; }
985 if (Vbn < Run->RunEndVbn.QuadPart)
988 Run->RunStartVbn.QuadPart =
Vbn;
990 InsertLowerRun =
NULL;
1049 DPRINT(
"FsRtlTruncateBaseMcb(%p, %I64d)\n", OpaqueMcb,
Vbn);
1062 DPRINT(
"FsRtlTruncateLargeMcb(%p, %I64d)\n",
Mcb,
Vbn);
1076 DPRINT(
"FsRtlUninitializeBaseMcb(%p)\n",
Mcb);
1098 DPRINT(
"FsRtlUninitializeLargeMcb(%p)\n",
Mcb);
1100 if (
Mcb->GuardedMutex)
_Must_inspect_result_ _In_ LONGLONG _In_ LONGLONG Amount
VOID NTAPI ExInitializePagedLookasideList(IN PPAGED_LOOKASIDE_LIST Lookaside, IN PALLOCATE_FUNCTION Allocate OPTIONAL, IN PFREE_FUNCTION Free OPTIONAL, IN ULONG Flags, IN SIZE_T Size, IN ULONG Tag, IN USHORT Depth)
struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST NPAGED_LOOKASIDE_LIST
BOOLEAN NTAPI FsRtlLookupLastBaseMcbEntry(IN PBASE_MCB OpaqueMcb, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn)
_In_ BOOLEAN SelfSynchronized
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
NTSYSAPI ULONG NTAPI RtlNumberGenericTableElements(_In_ PRTL_GENERIC_TABLE Table)
PLARGE_MCB_MAPPING Mapping
VOID NTAPI FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb, IN LONGLONG Vbn, IN LONGLONG SectorCount)
void quit(int argc, const char *argv[])
_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTable(_In_ PRTL_GENERIC_TABLE Table, _In_ BOOLEAN Restart)
BOOLEAN NTAPI FsRtlSplitBaseMcb(IN PBASE_MCB OpaqueMcb, IN LONGLONG Vbn, IN LONGLONG Amount)
_In_ LONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG SectorCountFromLbn
_Must_inspect_result_ _In_ LONGLONG _In_ LONGLONG Lbn
VOID NTAPI FsRtlInitializeLargeMcbs(VOID)
PAGED_LOOKASIDE_LIST FsRtlFirstMappingLookasideList
struct _LARGE_MCB_MAPPING_ENTRY LARGE_MCB_MAPPING_ENTRY
ULONG NTAPI FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb)
VOID NTAPI RtlInitializeGenericTable(IN PRTL_GENERIC_TABLE Table, IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine, IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine, IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine, IN PVOID TableContext)
LARGE_INTEGER StartingLbn
VOID NTAPI FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb, IN LONGLONG Vbn)
struct _BASE_MCB_INTERNAL * PBASE_MCB_INTERNAL
_Must_inspect_result_ _In_ ULONG RunIndex
BOOLEAN NTAPI FsRtlLookupBaseMcbEntry(IN PBASE_MCB OpaqueMcb, IN LONGLONG Vbn, OUT PLONGLONG Lbn OPTIONAL, OUT PLONGLONG SectorCountFromLbn OPTIONAL, OUT PLONGLONG StartingLbn OPTIONAL, OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, OUT PULONG Index OPTIONAL)
BOOLEAN NTAPI FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb, IN ULONG RunIndex, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn, OUT PLONGLONG SectorCount)
struct _LARGE_MCB_MAPPING * PLARGE_MCB_MAPPING
__GNU_EXTENSION typedef __int64 * PLONGLONG
VOID NTAPI FsRtlInitializeBaseMcb(IN PBASE_MCB OpaqueMcb, IN POOL_TYPE PoolType)
static RTL_GENERIC_COMPARE_RESULTS NTAPI McbMappingCompare(PRTL_GENERIC_TABLE Table, PVOID PtrA, PVOID PtrB)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
struct _BASE_MCB * PBASE_MCB
static VOID NTAPI McbMappingFree(PRTL_GENERIC_TABLE Table, PVOID Buffer)
VOID NTAPI FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb, IN POOL_TYPE PoolType)
BOOLEAN NTAPI FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
VOID NTAPI FsRtlUninitializeBaseMcb(IN PBASE_MCB Mcb)
_In_ LONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG StartingLbn
_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlLookupElementGenericTable(_In_ PRTL_GENERIC_TABLE Table, _In_ PVOID Buffer)
VOID NTAPI FsRtlResetBaseMcb(IN PBASE_MCB OpaqueMcb)
VOID NTAPI ExInitializeNPagedLookasideList(IN PNPAGED_LOOKASIDE_LIST Lookaside, IN PALLOCATE_FUNCTION Allocate OPTIONAL, IN PFREE_FUNCTION Free OPTIONAL, IN ULONG Flags, IN SIZE_T Size, IN ULONG Tag, IN USHORT Depth)
BOOLEAN NTAPI FsRtlAddBaseMcbEntry(IN PBASE_MCB OpaqueMcb, IN LONGLONG Vbn, IN LONGLONG Lbn, IN LONGLONG SectorCount)
_In_ WDFCOLLECTION _In_ ULONG Index
#define EXCEPTION_EXECUTE_HANDLER
struct _BASE_MCB_INTERNAL BASE_MCB_INTERNAL
LARGE_INTEGER RunStartVbn
_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlGetElementGenericTable(_In_ PRTL_GENERIC_TABLE Table, _In_ ULONG I)
BOOLEAN NTAPI FsRtlGetNextBaseMcbEntry(IN PBASE_MCB OpaqueMcb, IN ULONG RunIndex, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn, OUT PLONGLONG SectorCount)
BOOLEAN NTAPI FsRtlRemoveBaseMcbEntry(IN PBASE_MCB OpaqueMcb, IN LONGLONG Vbn, IN LONGLONG SectorCount)
BOOLEAN NTAPI FsRtlLookupLastBaseMcbEntryAndIndex(IN PBASE_MCB OpaqueMcb, IN OUT PLONGLONG LargeVbn, IN OUT PLONGLONG LargeLbn, IN OUT PULONG Index)
struct _LARGE_MCB_MAPPING LARGE_MCB_MAPPING
NPAGED_LOOKASIDE_LIST FsRtlFastMutexLookasideList
BOOLEAN NTAPI FsRtlAddLargeMcbEntry(IN PLARGE_MCB Mcb, IN LONGLONG Vbn, IN LONGLONG Lbn, IN LONGLONG SectorCount)
#define ExAllocatePoolWithTag(hernya, size, tag)
BOOLEAN NTAPI FsRtlLookupLastLargeMcbEntryAndIndex(IN PLARGE_MCB OpaqueMcb, OUT PLONGLONG LargeVbn, OUT PLONGLONG LargeLbn, OUT PULONG Index)
static BOOLEAN NTAPI FsRtlLookupLastLargeMcbEntryAndIndex_internal(IN PBASE_MCB_INTERNAL Mcb, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn, OUT PULONG Index OPTIONAL)
_In_ LONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG SectorCountFromStartingLbn
static RTL_GENERIC_COMPARE_RESULTS NTAPI McbMappingIntersectCompare(PRTL_GENERIC_TABLE Table, PVOID PtrA, PVOID PtrB)
NTSYSAPI BOOLEAN NTAPI RtlDeleteElementGenericTable(_In_ PRTL_GENERIC_TABLE Table, _In_ PVOID Buffer)
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)
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
VOID NTAPI FsRtlTruncateBaseMcb(IN PBASE_MCB OpaqueMcb, IN LONGLONG Vbn)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST PAGED_LOOKASIDE_LIST
IN PVCB IN ULONG IN OUT PULONG IN BOOLEAN OUT PLARGE_MCB Mcb
VOID NTAPI FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb)
enum _RTL_GENERIC_COMPARE_RESULTS RTL_GENERIC_COMPARE_RESULTS
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
struct _LARGE_MCB_MAPPING_ENTRY * PLARGE_MCB_MAPPING_ENTRY
VOID NTAPI FsRtlResetLargeMcb(IN PLARGE_MCB Mcb, IN BOOLEAN SelfSynchronized)
static PVOID NTAPI McbMappingAllocate(PRTL_GENERIC_TABLE Table, CLONG Bytes)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
_Out_ PLONGLONG _Out_ PLONGLONG LargeLbn
#define _SEH2_EXCEPT(...)
#define POOL_RAISE_IF_ALLOCATION_FAILURE
NTSYSAPI PVOID NTAPI RtlInsertElementGenericTable(_In_ PRTL_GENERIC_TABLE Table, _In_reads_bytes_(BufferSize) PVOID Buffer, _In_ CLONG BufferSize, _Out_opt_ PBOOLEAN NewElement)
#define ExFreePoolWithTag(_P, _T)
ULONG NTAPI FsRtlNumberOfRunsInBaseMcb(IN PBASE_MCB OpaqueMcb)
BOOLEAN NTAPI FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb, IN LONGLONG Vbn, IN LONGLONG Amount)
PULONG MinorVersion OPTIONAL
#define MAXIMUM_PAIR_COUNT