16#define MODULE_INVOLVED_IN_ARM3
41#define DEFAULT_SECURITY_COOKIE 0x00002B992DDFA232ll
43#define DEFAULT_SECURITY_COOKIE 0xBB40E64E
72 return DebugDirectory;
92 PMMPTE PointerPte, LastPte;
148 DPRINT1(
"MmMapViewOfSection failed with status 0x%x\n",
Status);
158 DPRINT1(
"MiReserveSystemPtes failed\n");
164 LastPte = PointerPte + PteCount;
168 *ImageBase = DriverBase;
169 DPRINT1(
"Loading: %wZ at %p with %lx pages\n",
FileName, DriverBase, PteCount);
176 while (PointerPte < LastPte)
217#define RVA(m, b) ((PVOID)((ULONG_PTR)(b) + (ULONG_PTR)(m)))
237 High = NumberOfNames - 1;
267 return OrdinalTable[Mid];
330 if (!ExportDirectory)
346 return NotFoundStatus;
350 return NotFoundStatus;
354 FunctionAddress = (
ULONG_PTR)
RVA(ImageBase, ExportTable[Ordinal]);
359 *IsForwarder =
FALSE;
360 if ((FunctionAddress > (
ULONG_PTR)ExportDirectory) &&
361 (FunctionAddress < (
ULONG_PTR)ExportDirectory + ExportSize))
422 DPRINT1(
"RtlFindExportedRoutineByName does not support forwarders!\n",
FALSE);
437 L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\");
452 ImportName.
Length = LdrEntry->BaseDllName.Length;
453 ImportName.
MaximumLength = LdrEntry->BaseDllName.MaximumLength;
454 ImportName.
Buffer = LdrEntry->BaseDllName.Buffer;
482 DPRINT(
"Calling DllInit(%wZ)\n", &RegPath);
483 Status = DllInit(&RegPath);
516 ASSERT(LdrEntry->LoadCount == 0);
517 LdrEntry->LoadCount = 1;
531 PVOID CurrentImports;
537 (ImportList->Count == 0))
547 SingleEntry.
Count = 1;
551 ImportList = &SingleEntry;
555 for (
i = 0; (
i < ImportList->Count) && (ImportList->Entry[
i]);
i++)
558 LdrEntry = ImportList->Entry[
i];
667#ifdef _WORKING_LINKER_
678 for (NextEntry = LoaderBlock->LoadOrderListHead.
Flink;
679 NextEntry != &LoaderBlock->LoadOrderListHead;
680 NextEntry = NextEntry->
Flink)
686#ifdef _WORKING_LINKER_
692 if (!ImageThunk)
continue;
696 for (
i = 0;
i < ImportSize;
i++, ImageThunk++)
699 if ((*ImageThunk >= (
ULONG_PTR)OldBase) && (*ImageThunk <= OldBaseTop))
702 DPRINT(
"[Mm0]: Updating IAT at: %p. Old Entry: %p. New Entry: %p.\n",
703 ImageThunk, *ImageThunk, *ImageThunk +
Delta);
704 *ImageThunk +=
Delta;
713 if (!ImportDescriptor)
continue;
717 while ((ImportDescriptor->
Name) &&
726 if ((*ImageThunk >= (
ULONG_PTR)OldBase) && (*ImageThunk <= OldBaseTop))
729 DPRINT(
"[Mm0]: Updating IAT at: %p. Old Entry: %p. New Entry: %p.\n",
730 ImageThunk, *ImageThunk, *ImageThunk +
Delta);
731 *ImageThunk +=
Delta;
763 PCHAR MissingForwarder;
770 ULONG ForwardExportSize;
780 if ((IsOrdinal) && !(SnapForwarder))
784 ExportDirectory->Base);
790 if (!SnapForwarder)
Name->u1.AddressOfData += (
ULONG_PTR)ImageBase;
799 DPRINT(
"Import name: %s\n", NameImport->
Name);
801 ExportDirectory->AddressOfNames);
803 ExportDirectory->AddressOfNameOrdinals);
806 Hint = NameImport->
Hint;
807 if ((Hint < ExportDirectory->NumberOfNames) &&
811 Ordinal = OrdinalTable[Hint];
818 ExportDirectory->NumberOfNames,
825 DPRINT1(
"Warning: Driver failed to load, %s not found\n", NameImport->
Name);
832 if (Ordinal >= ExportDirectory->NumberOfFunctions)
840 MissingForwarder = NameBuffer;
844 ExportDirectory->AddressOfFunctions);
888 ForwardExportDirectory =
893 if (!ForwardExportDirectory)
break;
899 sizeof(*ForwardName) +
902 if (!ForwardName)
break;
908 ForwardName->
Hint = 0;
918 ForwardExportDirectory,
930 NextEntry = NextEntry->
Flink;
1041 PCHAR MissingApiBuffer = *MissingApi, ImportName;
1043 ULONG ImportSize, ImportCount = 0, LoadedImportsSize, ExportSize;
1051 PVOID ImportBase, DllBase;
1059 DPRINT(
"%s - ImageBase: %p. ImageFileDirectory: %wZ\n",
1076 for (CurrentImport = ImportDescriptor;
1088 LoadedImportsSize = ImportCount *
sizeof(
PVOID) +
sizeof(
SIZE_T);
1096 LoadedImports->
Count = ImportCount;
1102 LoadedImports =
NULL;
1106 GdiLink = NormalLink =
FALSE;
1114 GdiLink = GdiLink ||
1115 !(
_strnicmp(ImportName,
"win32k",
sizeof(
"win32k") - 1));
1118 NormalLink = NormalLink ||
1119 ((
_strnicmp(ImportName,
"win32k",
sizeof(
"win32k") - 1)) &&
1120 (
_strnicmp(ImportName,
"dxapi",
sizeof(
"dxapi") - 1)) &&
1121 (
_strnicmp(ImportName,
"coverage",
sizeof(
"coverage") - 1)) &&
1122 (
_strnicmp(ImportName,
"irt",
sizeof(
"irt") - 1)));
1125 if (GdiLink && NormalLink)
1133 if (!(
_strnicmp(ImportName,
"ntdll",
sizeof(
"ntdll") - 1)) ||
1134 !(
_strnicmp(ImportName,
"winsrv",
sizeof(
"winsrv") - 1)) ||
1135 !(
_strnicmp(ImportName,
"advapi32",
sizeof(
"advapi32") - 1)) ||
1136 !(
_strnicmp(ImportName,
"kernel32",
sizeof(
"kernel32") - 1)) ||
1137 !(
_strnicmp(ImportName,
"user32",
sizeof(
"user32") - 1)) ||
1138 !(
_strnicmp(ImportName,
"gdi32",
sizeof(
"gdi32") - 1)))
1146 if (!(
_strnicmp(ImportName,
"ntoskrnl",
sizeof(
"ntoskrnl") - 1)) ||
1147 !(
_strnicmp(ImportName,
"win32k",
sizeof(
"win32k") - 1)) ||
1148 !(
_strnicmp(ImportName,
"hal",
sizeof(
"hal") - 1)))
1151 ReferenceNeeded =
FALSE;
1156 ReferenceNeeded =
TRUE;
1169 if (NamePrefix)
DPRINT1(
"Name Prefix not yet supported!\n");
1189 ImportBase = LdrEntry->
DllBase;
1192 if (!(
Loaded) && (ReferenceNeeded))
1207 NextEntry = NextEntry->
Flink;
1215 ImageFileDirectory->Length +
1280 *MissingDriver = DllName.
Buffer;
1281 *(
PULONG)MissingDriver |= 1;
1284 DPRINT1(
"Failed to load dependency: %wZ\n", &DllName);
1301 ASSERT(DllBase == DllEntry->DllBase);
1318 if ((ReferenceNeeded) && (LoadedImports))
1324 LoadedImports->
Entry[ImportCount] = LdrEntry;
1338 if (!ExportDirectory)
1341 DPRINT1(
"Warning: Driver failed to load, %S not found\n", *MissingDriver);
1374 *MissingApi = MissingApiBuffer;
1387 for (
i = 0;
i < LoadedImports->
Count;
i++)
1389 if (LoadedImports->
Entry[
i])
1405 else if (ImportCount == 1)
1411 else if (ImportCount != LoadedImports->
Count)
1414 LoadedImportsSize = ImportCount *
sizeof(
PVOID) +
sizeof(
SIZE_T);
1421 NewImports->
Count = 0;
1424 for (
i = 0;
i < LoadedImports->
Count;
i++)
1427 if (LoadedImports->
Entry[
i])
1431 NewImports->
Count++;
1437 LoadedImports = NewImports;
1442 *LoadImports = LoadedImports;
1492 ULONG_PTR DllBase, InitStart, InitEnd, ImageEnd, InitCode;
1527 NextEntry = NextEntry->
Flink;
1536 NextEntry = NextEntry->
Flink;
1544 while (SectionCount > 0)
1555 InitSection = Section;
1575 if (SectionCount == 1)
1578 LastSection = Section;
1592 LastSection = Section;
1600 while (SectionCount > 1);
1613 if (SectionCount != 1)
1626 if (InitStart < InitEnd)
1629 if ((InitCode >= InitStart) && (InitCode < InitEnd))
1633 *StartVa = (
PVOID)InitStart;
1634 *EndVa = (
PVOID)InitEnd;
1640 DPRINT(
"Freeing init code: %p-%p ('%wZ' @%p : '%s')\n",
1657 NextEntry = NextEntry->
Flink;
1682 DllBase = LdrEntry->DllBase;
1683 PageCount = LdrEntry->SizeOfImage >>
PAGE_SHIFT;
1690 if (!NtHeader)
return;
1694 DiscardSection =
NULL;
1702 DiscardSection = Section;
1712 if (!DiscardSection)
return;
1721 if (!PageCount)
return;
1739 PVOID DllBase, NewImageAddress;
1741 PMMPTE PointerPte, StartPte, LastPte;
1747 for (NextEntry = LoaderBlock->LoadOrderListHead.
Flink;
1748 NextEntry != &LoaderBlock->LoadOrderListHead;
1749 NextEntry = NextEntry->
Flink)
1758 DPRINT(
"[Mm0]: Driver at: %p ending at: %p for module: %wZ\n",
1766 LastPte = StartPte + PteCount;
1770 while (PointerPte < LastPte)
1783 if (
i <= 4)
continue;
1786 if (!NtHeader)
continue;
1800 ValidRelocs =
FALSE;
1820 PointerPte = StartPte;
1821 while (PointerPte < LastPte)
1838 ERROR_FATAL(
"[Mm0]: Couldn't allocate driver section!\n");
1843 LastPte = PointerPte + PteCount;
1847 DPRINT(
"[Mm0]: Copying from: %p to: %p\n", DllBase, NewImageAddress);
1852 while (PointerPte < LastPte)
1870 PointerPte -= PteCount;
1897 LdrEntry->
DllBase = NewImageAddress;
1927 ULONG LoadedImportsSize, ImportSize;
1934 KernelEntry = HalEntry = LastEntry =
NULL;
1949 KernelEntry = LdrEntry;
1954 HalEntry = LdrEntry;
1961 if ((LdrEntry == HalEntry) || (LdrEntry == KernelEntry))
1982 NextEntry = NextEntry->
Flink;
2001#ifdef _WORKING_LOADER_
2014 if (!ImportDescriptor)
2019 NextEntry = NextEntry->
Flink;
2025#ifdef _WORKING_LOADER_
2029 for (
i = 0, DllBase = 0, DllEnd = 0;
i < ImportSize;
i++, ImageThunk++)
2031 DllBase = DllEnd =
i = 0;
2032 while ((ImportDescriptor->
Name) &&
2045 if ((*ImageThunk >= DllBase) && (*ImageThunk < DllEnd))
2069 if ((*ImageThunk >= DllBase) && (*ImageThunk < DllEnd))
2073 EntryArray[
j] = LdrEntry2;
2078 NextEntry2 = NextEntry2->
Flink;
2083 if ((*ImageThunk < DllBase) || (*ImageThunk >= DllEnd))
2089 ERROR_FATAL(
"Broken IAT entry for %p at %p (%lx)\n",
2090 LdrEntry, ImageThunk, *ImageThunk);
2096#ifndef _WORKING_LOADER_
2106 for (
i = 0, ImportSize = 0;
i < Modules;
i++)
2109 if ((EntryArray[
i]) &&
2110 (EntryArray[
i] != HalEntry) &&
2111 (EntryArray[
i] != KernelEntry))
2114 LastEntry = EntryArray[
i];
2125 else if (ImportSize == 1)
2134 LoadedImportsSize = ImportSize *
sizeof(
PVOID) +
sizeof(
SIZE_T);
2141 LoadedImports->
Count = ImportSize;
2144 for (
i = 0,
j = 0;
i < Modules;
i++)
2147 if ((EntryArray[
i]) &&
2148 (EntryArray[
i] != HalEntry) &&
2149 (EntryArray[
i] != KernelEntry))
2153 LoadedImports->
Entry[
j] = EntryArray[
i];
2165 NextEntry = NextEntry->
Flink;
2198 Sections > 0; --Sections, ++SectionHeader)
2212 else if (*(
PULONG)SectionHeader->
Name ==
'LOOP')
2215 if (*(
PULONG)&SectionHeader->
Name[4] ==
'EDOC')
2221 else if (*(
PUSHORT)&SectionHeader->
Name[4] ==
'MI')
2228 else if ((*(
PULONG)SectionHeader->
Name ==
'YSIM') &&
2229 (*(
PULONG)&SectionHeader->
Name[4] ==
'ETPS'))
2253 ListHead = &LoaderBlock->LoadOrderListHead;
2254 NextEntry = ListHead->
Flink;
2264 while (NextEntry != ListHead)
2275 NextEntry = NextEntry->
Flink;
2284 if (!NewEntry)
return FALSE;
2287 *NewEntry = *LdrEntry;
2318 NextEntry = NextEntry->
Flink;
2427 NextEntry = NextEntry->
Flink;
2435 DPRINT1(
"Large pages not supported!\n");
2450 for (PointerPte = FirstPte; PointerPte <= LastPte; PointerPte++)
2458 DPRINT1(
"CORE-16449: FirstPte=%p, LastPte=%p, Protection=%lx\n", FirstPte, LastPte, Protection);
2459 DPRINT1(
"CORE-16449: PointerPte=%p, TempPte=%lx\n", PointerPte,
TempPte.u.Long);
2460 DPRINT1(
"CORE-16449: Please issue the 'mod' and 'bt' (KDBG) or 'lm' and 'kp' (WinDbg) commands. Then report this in Jira.\n");
2467#if _MI_HAS_NO_EXECUTE
2486 PVOID SectionBase, SectionEnd;
2489 PMMPTE FirstPte, LastPte;
2506 if (NtHeaders ==
NULL)
2508 DPRINT1(
"Failed to get NT headers for image @ %p\n", ImageBase);
2516 DPRINT1(
"Skipping NT 4 driver @ %p\n", ImageBase);
2530 if (LastPte >= FirstPte)
2539 Section = &SectionHeaders[
i];
2547 if (FirstPte == LastPte)
2563 SectionEnd =
Add2Ptr(SectionBase, SectionSize - 1);
2568 if (LastPte < FirstPte)
2585 DPRINT1(
"ImageBase 0x%p ImageSize 0x%lx Section %u VA 0x%lx Raw 0x%lx virt 0x%lx\n",
2600#ifdef ENABLE_MISETPAGINGOFDRIVER
2610#ifndef ENABLE_MISETPAGINGOFDRIVER
2612 DPRINT1(
"WARNING: MiSetPagingOfDriver() called, but paging is broken! ignoring!\n");
2625 while (PointerPte <= LastPte)
2628 if (PointerPte->u.Hard.Valid == 1)
2666 ImageBase = (
ULONG_PTR)LdrEntry->DllBase;
2668 if (!NtHeaders)
return;
2766 Status = ZwCreateSection(&SectionHandle,
2775 DPRINT1(
"ZwCreateSection failed with status 0x%x\n",
Status);
2783 Status = ZwMapViewOfSection(SectionHandle,
2796 DPRINT1(
"ZwMapViewOfSection failed with status 0x%x\n",
Status);
2803 Status = ZwQueryInformationFile(ImageHandle,
2806 sizeof(FileStandardInfo),
2876 (ConfigDir->
Size != DirSize))
2920 if ((NewCookie == 0) || (NewCookie == *
Cookie))
2953 PWCHAR MissingDriverName, PrefixedBuffer =
NULL;
2992 BaseLength *=
sizeof(
WCHAR);
3043 if (!PrefixedBuffer)
3050 PrefixName.
Buffer = PrefixedBuffer;
3060 BaseName.
Length += NamePrefix->Length;
3065 if (LoadedName) BaseName = *LoadedName;
3071 DPRINT1(
"MM:SYSLDR Loading %wZ (%wZ) %s\n",
3072 &PrefixName, &BaseName,
Flags ?
"in session space" :
"");
3101 NextEntry = NextEntry->
Flink;
3119 *ModuleObject = LdrEntry;
3120 *ImageBaseAddress = LdrEntry->
DllBase;
3165 DPRINT1(
"ZwOpenFile failed for '%wZ' with status 0x%x\n",
3200 Status = ZwCreateSection(&SectionHandle,
3209 DPRINT1(
"ZwCreateSection failed with status 0x%x\n",
Status);
3272 DPRINT1(
"MiLoadImageSection failed with status 0x%x\n",
Status);
3285 DPRINT1(
"LdrRelocateImageWithBias failed with status 0x%x\n",
Status);
3321 LdrEntry->
DllBase = ModuleLoadBase;
3368 MissingDriverName =
NULL;
3380 if (*(
ULONG_PTR*)&MissingDriverName & 1)
3382 NeedToFreeString =
TRUE;
3386 DPRINT1(
"MiResolveImageReferences failed with status 0x%x\n",
Status);
3387 DPRINT1(
" Missing driver '%ls', missing API '%s'\n",
3388 MissingDriverName, MissingApiName);
3390 if (NeedToFreeString)
3415 LdrEntry->
Flags &= ~LDRP_LOAD_IN_PROGRESS;
3441#ifdef __ROS_ROSSYM__
3457 UnicodeTemp = PrefixName;
3458 UnicodeTemp.
Buffer += 11;
3488 *ModuleObject = LdrEntry;
3489 *ImageBaseAddress = LdrEntry->
DllBase;
3535 FoundEntry = LdrEntry;
3540 NextEntry = NextEntry->
Flink;
3562 if (!LdrEntry)
return NULL;
3654 if (ProcAddress)
break;
3655 if (Modules == 2)
break;
3659 NextEntry = NextEntry->
Flink;
NTSTATUS NTAPI MmUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress)
#define ALIGN_DOWN_BY(size, align)
#define ALIGN_UP_BY(size, align)
int strcmp(const char *String1, const char *String2)
ACPI_SIZE strlen(const char *String)
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
char * strchr(const char *String, int ch)
HARDWARE_PTE_ARMV6 TempPte
#define OBJ_NAME_PATH_SEPARATOR
struct _LDR_DATA_TABLE_ENTRY LDR_DATA_TABLE_ENTRY
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define NT_SUCCESS(StatCode)
#define IMAGE_DIRECTORY_ENTRY_EXPORT
#define IMAGE_DIRECTORY_ENTRY_DEBUG
#define RtlImageDirectoryEntryToData
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
#define _strnicmp(_String1, _String2, _MaxCount)
VOID NTAPI KeFlushQueuedDpcs(VOID)
#define UNIMPLEMENTED_DBGBREAK(...)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define PsGetCurrentThread()
#define MAXIMUM_FILENAME_LENGTH
NTSTATUS ExInitializeResourceLite(PULONG res)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeReleaseSpinLock(sl, irql)
#define KeGetCurrentIrql()
#define ExAcquireResourceExclusiveLite(res, wait)
#define InitializeListHead(ListHead)
#define ExAcquireResourceSharedLite(res, wait)
#define KeInitializeSpinLock(sl)
#define BooleanFlagOn(F, SF)
struct _FileName FileName
_Inout_opt_ PUNICODE_STRING Extension
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
union Alignment_ Alignment
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
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 GLint GLint j
KIRQL FASTCALL KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock)
LARGE_INTEGER NTAPI KeQueryPerformanceCounter(IN PLARGE_INTEGER PerformanceFreq)
#define EXCEPTION_EXECUTE_HANDLER
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define FLG_SHOW_LDR_SNAPS
#define FLG_ENABLE_KDEBUG_SYMBOL_LOAD
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
#define IMAGE_ADDRESSING_MODE_32BIT
#define InterlockedExchangeAdd
__INTRIN_INLINE unsigned long __readcr4(void)
#define Add2Ptr(PTR, INC)
static BOOLEAN LoadSymbols
BOOLEAN KdDebuggerNotPresent
BOOLEAN KdDebuggerEnabled
LIST_ENTRY * ModuleListHead
#define KeLeaveCriticalRegion()
#define KeEnterCriticalRegion()
BOOLEAN MiLargePageAllDrivers
LIST_ENTRY MiLargePageDriverList
BOOLEAN NTAPI LdrVerifyMappedImageMatchesChecksum(_In_ PVOID BaseAddress, _In_ SIZE_T NumberOfBytes, _In_ ULONG FileLength)
#define LDRP_DRIVER_DEPENDENT_DLL
#define LDRP_DEBUG_SYMBOLS_LOADED
#define LDRP_ENTRY_PROCESSED
#define LDRP_ENTRY_NATIVE
#define LDRP_SYSTEM_MAPPED
#define LDRP_LOAD_IN_PROGRESS
struct _LOAD_IMPORTS * PLOAD_IMPORTS
FORCEINLINE BOOLEAN MI_IS_PHYSICAL_ADDRESS(IN PVOID Address)
#define IMAGE_SCN_PROTECTION_MASK
FORCEINLINE VOID MiLockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
#define MI_IS_SESSION_IMAGE_ADDRESS(Address)
#define MI_IS_SESSION_ADDRESS(Address)
#define MI_GET_NEXT_COLOR()
PFN_NUMBER NTAPI MiRemoveAnyPage(IN ULONG Color)
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE_KERNEL(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
ULONG MmTotalFreeSystemPtes[MaximumPtePoolTypes]
#define MM_SYSLDR_NO_IMPORTS
FORCEINLINE VOID MiUnlockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
PMMPTE NTAPI MiReserveSystemPtes(IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
FORCEINLINE VOID MI_UPDATE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
FORCEINLINE VOID MI_WRITE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
VOID NTAPI MiInitializePfn(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN BOOLEAN Modified)
PFN_COUNT NTAPI MiDeleteSystemPageableVm(IN PMMPTE PointerPte, IN PFN_NUMBER PageCount, IN ULONG Flags, OUT PPFN_NUMBER ValidPages)
#define MM_SYSLDR_BOOT_LOADED
#define MM_SYSLDR_SINGLE_ENTRY
#define MiAddressToPte(x)
#define ExFreePoolWithTag(_P, _T)
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define InitializeObjectAttributes(p, n, a, r, s)
NTSYSAPI NTSTATUS NTAPI ZwOpenFile(_Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_ ULONG ShareAccess, _In_ ULONG OpenOptions)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSYSAPI ULONG NTAPI LdrRelocateImageWithBias(_In_ PVOID NewAddress, _In_ LONGLONG AdditionalBias, _In_ PCCH LoaderName, _In_ ULONG Success, _In_ ULONG Conflict, _In_ ULONG Invalid)
VOID NTAPI DbgUnLoadImageSymbols(_In_ PSTRING Name, _In_ PVOID Base, _In_ ULONG_PTR ProcessId)
VOID NTAPI DbgLoadImageSymbols(_In_ PSTRING Name, _In_ PVOID Base, _In_ ULONG_PTR ProcessId)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
#define SECTION_MAP_EXECUTE
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlFreeAnsiString(PANSI_STRING AnsiString)
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
NTSYSAPI VOID NTAPI RtlInitString(PSTRING DestinationString, PCSZ SourceString)
#define SECTION_ALL_ACCESS
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
#define NtCurrentProcess()
#define FILE_SHARE_DELETE
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSYSAPI BOOLEAN NTAPI RtlPrefixUnicodeString(IN PUNICODE_STRING String1, IN PUNICODE_STRING String2, IN BOOLEAN CaseInSensitive)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
#define UNREFERENCED_PARAMETER(P)
#define IMAGE_SCN_MEM_WRITE
#define IMAGE_SNAP_BY_ORDINAL(Ordinal)
#define IMAGE_SCN_MEM_EXECUTE
#define IMAGE_FIRST_SECTION(NtHeader)
#define IMAGE_SCN_MEM_DISCARDABLE
#define IMAGE_SCN_MEM_READ
#define IMAGE_NT_OPTIONAL_HDR_MAGIC
ULONG ExpInitializationPhase
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
#define MmSystemRangeStart
#define MiPteToAddress(_Pte)
VOID NTAPI KeFlushCurrentTb(VOID)
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
struct _MM_IMAGE_SECTION_OBJECT * PMM_IMAGE_SECTION_OBJECT
UCHAR MmDisablePagingExecutive
_Out_ PKAPC_STATE ApcState
static const WCHAR ServicesKeyName[]
VOID NTAPI KeFlushEntireTb(IN BOOLEAN Invalid, IN BOOLEAN AllProcessors)
LONG NTAPI KeReleaseMutant(IN PKMUTANT Mutant, IN KPRIORITY Increment, IN BOOLEAN Abandon, IN BOOLEAN Wait)
MMSUPPORT MmSystemCacheWs
HANDLE NTAPI PsGetCurrentProcessId(VOID)
#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND
#define STATUS_IMAGE_CHECKSUM_MISMATCH
#define STATUS_IMAGE_MP_UP_MISMATCH
#define STATUS_INVALID_IMAGE_FORMAT
#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH
#define STATUS_IMAGE_ALREADY_LOADED
#define STATUS_ALREADY_COMMITTED
#define STATUS_INVALID_IMAGE_PROTECT
#define STATUS_ENTRYPOINT_NOT_FOUND
#define STATUS_PROCEDURE_NOT_FOUND
#define STATUS_DRIVER_ORDINAL_NOT_FOUND
#define STATUS_NOT_IMPLEMENTED
#define STATUS_CONFLICTING_ADDRESSES
NTSTRSAFEVAPI RtlStringCbPrintfA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,...)
NTSTRSAFEAPI RtlStringCbCopyA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
#define IMAGE_DIRECTORY_ENTRY_IMPORT
#define IMAGE_DIRECTORY_ENTRY_IAT
#define IMAGE_DIRECTORY_ENTRY_BASERELOC
struct _IMAGE_IMPORT_BY_NAME * PIMAGE_IMPORT_BY_NAME
#define IMAGE_FILE_RELOCS_STRIPPED
#define IMAGE_FILE_UP_SYSTEM_ONLY
#define IMAGE_ORDINAL(Ordinal)
VOID NTAPI KeStackAttachProcess(IN PKPROCESS Process, OUT PRKAPC_STATE ApcState)
VOID NTAPI KeUnstackDetachProcess(IN PRKAPC_STATE ApcState)
#define FileStandardInformation
BOOLEAN PsImageNotifyEnabled
FORCEINLINE VOID PspRunLoadImageNotifyRoutines(PUNICODE_STRING FullImageName, HANDLE ProcessId, PIMAGE_INFO ImageInfo)
#define _SEH2_EXCEPT(...)
PEPROCESS PsInitialSystemProcess
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
#define ERROR_DBGBREAK(...)
NTSTATUS NTAPI MmMapViewOfSection(IN PVOID SectionObject, IN PEPROCESS Process, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
POBJECT_TYPE MmSectionObjectType
PULONG MinorVersion OPTIONAL
DWORD AddressOfNameOrdinals
ULONG ImageAddressingMode
union _IMAGE_THUNK_DATA32::@2113 u1
UNICODE_STRING FullDllName
LIST_ENTRY InLoadOrderLinks
UNICODE_STRING BaseDllName
struct _LIST_ENTRY * Flink
PLDR_DATA_TABLE_ENTRY Entry[1]
static LARGE_INTEGER Counter
ULONG_PTR ExPoolCodeStart
NTSTATUS NTAPI MiBuildImportsForBootDrivers(VOID)
NTSTATUS NTAPI MiSnapThunk(IN PVOID DllBase, IN PVOID ImageBase, IN PIMAGE_THUNK_DATA Name, IN PIMAGE_THUNK_DATA Address, IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, IN ULONG ExportSize, IN BOOLEAN SnapForwarder, OUT PCHAR *MissingApi)
VOID NTAPI MiLocateKernelSections(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
NTSTATUS NTAPI MiDereferenceImports(IN PLOAD_IMPORTS ImportList)
BOOLEAN NTAPI MiInitializeLoadedModuleList(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
VOID NTAPI MmMakeKernelResourceSectionWritable(VOID)
NTSTATUS NTAPI MmLoadSystemImage(IN PUNICODE_STRING FileName, IN PUNICODE_STRING NamePrefix OPTIONAL, IN PUNICODE_STRING LoadedName OPTIONAL, IN ULONG Flags, OUT PVOID *ModuleObject, OUT PVOID *ImageBaseAddress)
KSPIN_LOCK PsLoadedModuleSpinLock
LIST_ENTRY PsLoadedModuleList
BOOLEAN NTAPI MmVerifyImageIsOkForMpUse(IN PVOID BaseAddress)
VOID NTAPI MiSetPagingOfDriver(IN PMMPTE PointerPte, IN PMMPTE LastPte)
LIST_ENTRY MmLoadedUserImageList
USHORT NTAPI NameToOrdinal(_In_ PCSTR ExportName, _In_ PVOID ImageBase, _In_ ULONG NumberOfNames, _In_ PULONG NameTable, _In_ PUSHORT OrdinalTable)
NTSTATUS NTAPI MiResolveImageReferences(IN PVOID ImageBase, IN PUNICODE_STRING ImageFileDirectory, IN PUNICODE_STRING NamePrefix OPTIONAL, OUT PCHAR *MissingApi, OUT PWCHAR *MissingDriver, OUT PLOAD_IMPORTS *LoadImports)
BOOLEAN MmEnforceWriteProtection
ERESOURCE PsLoadedModuleResource
VOID NTAPI MmFreeDriverInitialization(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
PVOID NTAPI LdrpInitSecurityCookie(PLDR_DATA_TABLE_ENTRY LdrEntry)
VOID NTAPI MiReloadBootLoadedDrivers(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
VOID NTAPI MiWriteProtectSystemImage(_In_ PVOID ImageBase)
VOID NTAPI MiEnablePagingOfDriver(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
#define DEFAULT_SECURITY_COOKIE
ULONG_PTR MmPoolCodeStart
NTSTATUS NTAPI RtlpFindExportedRoutineByName(_In_ PVOID ImageBase, _In_ PCSTR ExportName, _Out_ PVOID *Function, _Out_opt_ PBOOLEAN IsForwarder, _In_ NTSTATUS NotFoundStatus)
ReactOS-only helper routine for RtlFindExportedRoutineByName(), that provides a finer granularity reg...
VOID NTAPI MiFindInitializationCode(OUT PVOID *StartVa, OUT PVOID *EndVa)
PVOID MmLastUnloadedDrivers
NTSTATUS NTAPI MmCallDllInitialize(_In_ PLDR_DATA_TABLE_ENTRY LdrEntry, _In_ PLIST_ENTRY ModuleListHead)
PVOID NTAPI LdrpFetchAddressOfSecurityCookie(PVOID BaseAddress, ULONG SizeOfImage)
NTSTATUS NTAPI MmUnloadSystemImage(IN PVOID ImageHandle)
BOOLEAN NTAPI MmChangeKernelResourceSectionProtection(IN ULONG_PTR ProtectionMask)
VOID NTAPI MiFreeInitializationCode(IN PVOID InitStart, IN PVOID InitEnd)
BOOLEAN MiCallDllUnloadAndUnloadDll(_In_ PLDR_DATA_TABLE_ENTRY LdrEntry)
VOID NTAPI MiProcessLoaderEntry(IN PLDR_DATA_TABLE_ENTRY LdrEntry, IN BOOLEAN Insert)
PVOID NTAPI MmGetSystemRoutineAddress(IN PUNICODE_STRING SystemRoutineName)
PFN_NUMBER MmTotalSystemDriverPages
PMMPTE MiKernelResourceEndPte
PVOID NTAPI MiCacheImageSymbols(IN PVOID BaseAddress)
PVOID NTAPI MmPageEntireDriver(IN PVOID AddressWithinSection)
NTSTATUS NTAPI MiLoadImageSection(_Inout_ PSECTION *SectionPtr, _Out_ PVOID *ImageBase, _In_ PUNICODE_STRING FileName, _In_ BOOLEAN SessionLoad, _In_ PLDR_DATA_TABLE_ENTRY LdrEntry)
VOID NTAPI MiUpdateThunks(IN PLOADER_PARAMETER_BLOCK LoaderBlock, IN PVOID OldBase, IN PVOID NewBase, IN ULONG Size)
VOID NTAPI MiSetSystemCodeProtection(_In_ PMMPTE FirstPte, _In_ PMMPTE LastPte, _In_ ULONG Protection)
PVOID NTAPI RtlFindExportedRoutineByName(_In_ PVOID ImageBase, _In_ PCSTR ExportName)
Finds the address of a given named exported routine in a loaded image. Note that this function does n...
NTSTATUS NTAPI MmCheckSystemImage(IN HANDLE ImageHandle, IN BOOLEAN PurgeSection)
VOID NTAPI MmResetDriverPaging(IN PVOID AddressWithinSection)
PMMPTE MiKernelResourceStartPte
PLDR_DATA_TABLE_ENTRY NTAPI MiLookupDataTableEntry(IN PVOID Address)
VOID NTAPI MiClearImports(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
LOGICAL NTAPI MiUseLargeDriverPage(IN ULONG NumberOfPtes, IN OUT PVOID *ImageBaseAddress, IN PUNICODE_STRING BaseImageName, IN BOOLEAN BootDriver)
ULONG_PTR PsNtosImageBase
#define TAG_MODULE_OBJECT
#define RTL_CONSTANT_STRING(s)
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_OBJECT_NAME_NOT_FOUND
#define ALIGN_UP_POINTER_BY(ptr, align)
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
_Must_inspect_result_ _In_ ULONG Flags
_In_opt_ PVOID _Out_ PLARGE_INTEGER Cookie
NTSTATUS(NTAPI * PMM_DLL_UNLOAD)(VOID)
NTSTATUS(NTAPI * PMM_DLL_INITIALIZE)(_In_ PUNICODE_STRING RegistryPath)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define ROUND_TO_PAGES(Size)
#define ObDereferenceObject
#define PsGetCurrentProcess