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)
void quit(int argc, const char *argv[])
#define ExAllocatePoolWithTag(hernya, size, tag)
IN PVCB IN ULONG IN OUT PULONG IN BOOLEAN OUT PLARGE_MCB Mcb
#define MAXIMUM_PAIR_COUNT
_Must_inspect_result_ _In_ LONGLONG _In_ LONGLONG Amount
_In_ BOOLEAN SelfSynchronized
_Must_inspect_result_ _In_ ULONG RunIndex
_In_ LONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG SectorCountFromLbn
_In_ LONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG StartingLbn
_Must_inspect_result_ _In_ LONGLONG _In_ LONGLONG Lbn
_In_ LONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG _Out_opt_ PLONGLONG SectorCountFromStartingLbn
_Out_ PLONGLONG _Out_ PLONGLONG LargeLbn
struct _BASE_MCB * PBASE_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)
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
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
#define EXCEPTION_EXECUTE_HANDLER
struct _LARGE_MCB_MAPPING * PLARGE_MCB_MAPPING
VOID NTAPI FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb, IN LONGLONG Vbn, IN LONGLONG SectorCount)
static RTL_GENERIC_COMPARE_RESULTS NTAPI McbMappingCompare(PRTL_GENERIC_TABLE Table, PVOID PtrA, PVOID PtrB)
static PVOID NTAPI McbMappingAllocate(PRTL_GENERIC_TABLE Table, CLONG Bytes)
BOOLEAN NTAPI FsRtlSplitBaseMcb(IN PBASE_MCB OpaqueMcb, IN LONGLONG Vbn, IN LONGLONG Amount)
VOID NTAPI FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb, IN LONGLONG Vbn)
BOOLEAN NTAPI FsRtlRemoveBaseMcbEntry(IN PBASE_MCB OpaqueMcb, IN LONGLONG Vbn, IN LONGLONG SectorCount)
static VOID NTAPI McbMappingFree(PRTL_GENERIC_TABLE Table, PVOID Buffer)
NPAGED_LOOKASIDE_LIST FsRtlFastMutexLookasideList
struct _LARGE_MCB_MAPPING_ENTRY LARGE_MCB_MAPPING_ENTRY
VOID NTAPI FsRtlInitializeBaseMcb(IN PBASE_MCB OpaqueMcb, IN POOL_TYPE PoolType)
BOOLEAN NTAPI FsRtlAddLargeMcbEntry(IN PLARGE_MCB Mcb, IN LONGLONG Vbn, IN LONGLONG Lbn, IN LONGLONG SectorCount)
BOOLEAN NTAPI FsRtlLookupLastLargeMcbEntryAndIndex(IN PLARGE_MCB OpaqueMcb, OUT PLONGLONG LargeVbn, OUT PLONGLONG LargeLbn, OUT PULONG Index)
BOOLEAN NTAPI FsRtlLookupLastBaseMcbEntryAndIndex(IN PBASE_MCB OpaqueMcb, IN OUT PLONGLONG LargeVbn, IN OUT PLONGLONG LargeLbn, IN OUT PULONG Index)
BOOLEAN NTAPI FsRtlGetNextBaseMcbEntry(IN PBASE_MCB OpaqueMcb, IN ULONG RunIndex, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn, OUT PLONGLONG SectorCount)
VOID NTAPI FsRtlResetBaseMcb(IN PBASE_MCB OpaqueMcb)
VOID NTAPI FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb)
VOID NTAPI FsRtlUninitializeBaseMcb(IN PBASE_MCB Mcb)
struct _LARGE_MCB_MAPPING_ENTRY * PLARGE_MCB_MAPPING_ENTRY
VOID NTAPI FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb, IN POOL_TYPE PoolType)
BOOLEAN NTAPI FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn)
struct _BASE_MCB_INTERNAL * PBASE_MCB_INTERNAL
VOID NTAPI FsRtlResetLargeMcb(IN PLARGE_MCB Mcb, IN BOOLEAN SelfSynchronized)
struct _BASE_MCB_INTERNAL BASE_MCB_INTERNAL
struct _LARGE_MCB_MAPPING LARGE_MCB_MAPPING
BOOLEAN NTAPI FsRtlAddBaseMcbEntry(IN PBASE_MCB OpaqueMcb, IN LONGLONG Vbn, IN LONGLONG Lbn, IN LONGLONG SectorCount)
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 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)
ULONG NTAPI FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb)
BOOLEAN NTAPI FsRtlLookupLastBaseMcbEntry(IN PBASE_MCB OpaqueMcb, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn)
VOID NTAPI FsRtlTruncateBaseMcb(IN PBASE_MCB OpaqueMcb, IN LONGLONG Vbn)
PAGED_LOOKASIDE_LIST FsRtlFirstMappingLookasideList
static RTL_GENERIC_COMPARE_RESULTS NTAPI McbMappingIntersectCompare(PRTL_GENERIC_TABLE Table, PVOID PtrA, PVOID PtrB)
ULONG NTAPI FsRtlNumberOfRunsInBaseMcb(IN PBASE_MCB OpaqueMcb)
VOID NTAPI FsRtlInitializeLargeMcbs(VOID)
BOOLEAN NTAPI FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb, IN ULONG RunIndex, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn, OUT PLONGLONG SectorCount)
BOOLEAN NTAPI FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb, IN LONGLONG Vbn, IN LONGLONG Amount)
static BOOLEAN NTAPI FsRtlLookupLastLargeMcbEntryAndIndex_internal(IN PBASE_MCB_INTERNAL Mcb, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn, OUT PULONG Index OPTIONAL)
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)
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)
#define ExFreePoolWithTag(_P, _T)
__GNU_EXTENSION typedef __int64 * PLONGLONG
#define _SEH2_EXCEPT(...)
PULONG MinorVersion OPTIONAL
PLARGE_MCB_MAPPING Mapping
LARGE_INTEGER RunStartVbn
LARGE_INTEGER StartingLbn
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
_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
struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST PAGED_LOOKASIDE_LIST
struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST NPAGED_LOOKASIDE_LIST
#define POOL_RAISE_IF_ALLOCATION_FAILURE
NTSYSAPI BOOLEAN NTAPI RtlDeleteElementGenericTable(_In_ PRTL_GENERIC_TABLE Table, _In_ PVOID Buffer)
NTSYSAPI PVOID NTAPI RtlInsertElementGenericTable(_In_ PRTL_GENERIC_TABLE Table, _In_reads_bytes_(BufferSize) PVOID Buffer, _In_ CLONG BufferSize, _Out_opt_ PBOOLEAN NewElement)
_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTable(_In_ PRTL_GENERIC_TABLE Table, _In_ BOOLEAN Restart)
_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlGetElementGenericTable(_In_ PRTL_GENERIC_TABLE Table, _In_ ULONG I)
NTSYSAPI ULONG NTAPI RtlNumberGenericTableElements(_In_ PRTL_GENERIC_TABLE Table)
_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlLookupElementGenericTable(_In_ PRTL_GENERIC_TABLE Table, _In_ PVOID Buffer)
enum _RTL_GENERIC_COMPARE_RESULTS RTL_GENERIC_COMPARE_RESULTS