16#define MODULE_INVOLVED_IN_ARM3
41#define COOKIE_MAX 0x0000FFFFFFFFFFFFll
42#define DEFAULT_SECURITY_COOKIE 0x00002B992DDFA232ll
44#define DEFAULT_SECURITY_COOKIE 0xBB40E64E
73 return DebugDirectory;
93 PMMPTE PointerPte, LastPte;
149 DPRINT1(
"MmMapViewOfSection failed with status 0x%x\n",
Status);
159 DPRINT1(
"MiReserveSystemPtes failed\n");
165 LastPte = PointerPte + PteCount;
169 *ImageBase = DriverBase;
170 DPRINT1(
"Loading: %wZ at %p with %lx pages\n",
FileName, DriverBase, PteCount);
177 while (PointerPte < LastPte)
249#define RVA(m, b) ((PVOID)((ULONG_PTR)(b) + (ULONG_PTR)(m)))
269 High = NumberOfNames - 1;
299 return OrdinalTable[Mid];
362 if (!ExportDirectory)
378 return NotFoundStatus;
382 return NotFoundStatus;
386 FunctionAddress = (
ULONG_PTR)
RVA(ImageBase, ExportTable[Ordinal]);
391 *IsForwarder =
FALSE;
392 if ((FunctionAddress > (
ULONG_PTR)ExportDirectory) &&
393 (FunctionAddress < (
ULONG_PTR)ExportDirectory + ExportSize))
454 DPRINT1(
"RtlFindExportedRoutineByName does not support forwarders!\n",
FALSE);
469 L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\");
484 ImportName.
Length = LdrEntry->BaseDllName.Length;
485 ImportName.
MaximumLength = LdrEntry->BaseDllName.MaximumLength;
486 ImportName.
Buffer = LdrEntry->BaseDllName.Buffer;
514 DPRINT(
"Calling DllInit(%wZ)\n", &RegPath);
515 Status = DllInit(&RegPath);
548 ASSERT(LdrEntry->LoadCount == 0);
549 LdrEntry->LoadCount = 1;
563 PVOID CurrentImports;
569 (ImportList->Count == 0))
579 SingleEntry.
Count = 1;
583 ImportList = &SingleEntry;
587 for (
i = 0; (
i < ImportList->Count) && (ImportList->Entry[
i]);
i++)
590 LdrEntry = ImportList->Entry[
i];
699#ifdef _WORKING_LINKER_
710 for (NextEntry = LoaderBlock->LoadOrderListHead.
Flink;
711 NextEntry != &LoaderBlock->LoadOrderListHead;
712 NextEntry = NextEntry->
Flink)
718#ifdef _WORKING_LINKER_
724 if (!ImageThunk)
continue;
728 for (
i = 0;
i < ImportSize;
i++, ImageThunk++)
731 if ((*ImageThunk >= (
ULONG_PTR)OldBase) && (*ImageThunk <= OldBaseTop))
734 DPRINT(
"[Mm0]: Updating IAT at: %p. Old Entry: %p. New Entry: %p.\n",
735 ImageThunk, *ImageThunk, *ImageThunk + Delta);
736 *ImageThunk += Delta;
745 if (!ImportDescriptor)
continue;
749 while ((ImportDescriptor->
Name) &&
758 if ((*ImageThunk >= (
ULONG_PTR)OldBase) && (*ImageThunk <= OldBaseTop))
761 DPRINT(
"[Mm0]: Updating IAT at: %p. Old Entry: %p. New Entry: %p.\n",
762 ImageThunk, *ImageThunk, *ImageThunk + Delta);
763 *ImageThunk += Delta;
795 PCHAR MissingForwarder;
802 ULONG ForwardExportSize;
812 if ((IsOrdinal) && !(SnapForwarder))
816 ExportDirectory->Base);
822 if (!SnapForwarder)
Name->u1.AddressOfData += (
ULONG_PTR)ImageBase;
831 DPRINT(
"Import name: %s\n", NameImport->
Name);
833 ExportDirectory->AddressOfNames);
835 ExportDirectory->AddressOfNameOrdinals);
838 Hint = NameImport->
Hint;
839 if ((Hint < ExportDirectory->NumberOfNames) &&
843 Ordinal = OrdinalTable[Hint];
850 ExportDirectory->NumberOfNames,
857 DPRINT1(
"Warning: Driver failed to load, %s not found\n", NameImport->
Name);
864 if (Ordinal >= ExportDirectory->NumberOfFunctions)
872 MissingForwarder = NameBuffer;
876 ExportDirectory->AddressOfFunctions);
920 ForwardExportDirectory =
925 if (!ForwardExportDirectory)
break;
931 sizeof(*ForwardName) +
934 if (!ForwardName)
break;
940 ForwardName->
Hint = 0;
950 ForwardExportDirectory,
962 NextEntry = NextEntry->
Flink;
1084 PCHAR MissingApiBuffer = *MissingApi, ImportName;
1086 ULONG ImportSize, ImportCount = 0, LoadedImportsSize, ExportSize;
1094 PVOID ImportBase, DllBase;
1102 DPRINT(
"%s - ImageBase: %p. ImageFileDirectory: %wZ\n",
1119 for (CurrentImport = ImportDescriptor;
1131 LoadedImportsSize = ImportCount *
sizeof(
PVOID) +
sizeof(
SIZE_T);
1139 LoadedImports->
Count = ImportCount;
1145 LoadedImports =
NULL;
1149 GdiLink = NormalLink =
FALSE;
1157 GdiLink = GdiLink ||
1158 !(
_strnicmp(ImportName,
"win32k",
sizeof(
"win32k") - 1));
1161 NormalLink = NormalLink ||
1162 ((
_strnicmp(ImportName,
"win32k",
sizeof(
"win32k") - 1)) &&
1163 (
_strnicmp(ImportName,
"dxapi",
sizeof(
"dxapi") - 1)) &&
1164 (
_strnicmp(ImportName,
"coverage",
sizeof(
"coverage") - 1)) &&
1165 (
_strnicmp(ImportName,
"irt",
sizeof(
"irt") - 1)));
1168 if (GdiLink && NormalLink)
1176 if (!(
_strnicmp(ImportName,
"ntdll",
sizeof(
"ntdll") - 1)) ||
1177 !(
_strnicmp(ImportName,
"winsrv",
sizeof(
"winsrv") - 1)) ||
1178 !(
_strnicmp(ImportName,
"advapi32",
sizeof(
"advapi32") - 1)) ||
1179 !(
_strnicmp(ImportName,
"kernel32",
sizeof(
"kernel32") - 1)) ||
1180 !(
_strnicmp(ImportName,
"user32",
sizeof(
"user32") - 1)) ||
1181 !(
_strnicmp(ImportName,
"gdi32",
sizeof(
"gdi32") - 1)))
1189 if (!(
_strnicmp(ImportName,
"ntoskrnl",
sizeof(
"ntoskrnl") - 1)) ||
1190 !(
_strnicmp(ImportName,
"win32k",
sizeof(
"win32k") - 1)) ||
1191 !(
_strnicmp(ImportName,
"hal",
sizeof(
"hal") - 1)))
1194 ReferenceNeeded =
FALSE;
1199 ReferenceNeeded =
TRUE;
1212 if (NamePrefix)
DPRINT1(
"Name Prefix not yet supported!\n");
1232 ImportBase = LdrEntry->
DllBase;
1235 if (!(
Loaded) && (ReferenceNeeded))
1250 NextEntry = NextEntry->
Flink;
1258 ImageFileDirectory->Length +
1323 *MissingDriver = DllName.
Buffer;
1324 *(
PULONG)MissingDriver |= 1;
1327 DPRINT1(
"Failed to load dependency: %wZ\n", &DllName);
1344 ASSERT(DllBase == DllEntry->DllBase);
1361 if ((ReferenceNeeded) && (LoadedImports))
1367 LoadedImports->
Entry[ImportCount] = LdrEntry;
1381 if (!ExportDirectory)
1384 DPRINT1(
"Warning: Driver failed to load, %S not found\n", *MissingDriver);
1417 *MissingApi = MissingApiBuffer;
1430 for (
i = 0;
i < LoadedImports->
Count;
i++)
1432 if (LoadedImports->
Entry[
i])
1448 else if (ImportCount == 1)
1454 else if (ImportCount != LoadedImports->
Count)
1457 LoadedImportsSize = ImportCount *
sizeof(
PVOID) +
sizeof(
SIZE_T);
1464 NewImports->
Count = 0;
1467 for (
i = 0;
i < LoadedImports->
Count;
i++)
1470 if (LoadedImports->
Entry[
i])
1474 NewImports->
Count++;
1480 LoadedImports = NewImports;
1485 *LoadImports = LoadedImports;
1535 ULONG_PTR DllBase, InitStart, InitEnd, ImageEnd, InitCode;
1570 NextEntry = NextEntry->
Flink;
1579 NextEntry = NextEntry->
Flink;
1587 while (SectionCount > 0)
1598 InitSection = Section;
1618 if (SectionCount == 1)
1621 LastSection = Section;
1635 LastSection = Section;
1643 while (SectionCount > 1);
1656 if (SectionCount != 1)
1669 if (InitStart < InitEnd)
1672 if ((InitCode >= InitStart) && (InitCode < InitEnd))
1676 *StartVa = (
PVOID)InitStart;
1677 *EndVa = (
PVOID)InitEnd;
1683 DPRINT(
"Freeing init code: %p-%p ('%wZ' @%p : '%s')\n",
1700 NextEntry = NextEntry->
Flink;
1725 DllBase = LdrEntry->DllBase;
1726 PageCount = LdrEntry->SizeOfImage >>
PAGE_SHIFT;
1733 if (!NtHeader)
return;
1737 DiscardSection =
NULL;
1745 DiscardSection = Section;
1755 if (!DiscardSection)
return;
1764 if (!PageCount)
return;
1782 PVOID DllBase, NewImageAddress;
1784 PMMPTE PointerPte, StartPte, LastPte;
1790 for (NextEntry = LoaderBlock->LoadOrderListHead.
Flink;
1791 NextEntry != &LoaderBlock->LoadOrderListHead;
1792 NextEntry = NextEntry->
Flink)
1801 DPRINT(
"[Mm0]: Driver at: %p ending at: %p for module: %wZ\n",
1809 LastPte = StartPte + PteCount;
1813 while (PointerPte < LastPte)
1826 if (
i <= 4)
continue;
1829 if (!NtHeader)
continue;
1843 ValidRelocs =
FALSE;
1863 PointerPte = StartPte;
1864 while (PointerPte < LastPte)
1881 ERROR_FATAL(
"[Mm0]: Couldn't allocate driver section!\n");
1886 LastPte = PointerPte + PteCount;
1890 DPRINT(
"[Mm0]: Copying from: %p to: %p\n", DllBase, NewImageAddress);
1895 while (PointerPte < LastPte)
1913 PointerPte -= PteCount;
1940 LdrEntry->
DllBase = NewImageAddress;
1970 ULONG LoadedImportsSize, ImportSize;
1977 KernelEntry = HalEntry = LastEntry =
NULL;
1992 KernelEntry = LdrEntry;
1997 HalEntry = LdrEntry;
2004 if ((LdrEntry == HalEntry) || (LdrEntry == KernelEntry))
2025 NextEntry = NextEntry->
Flink;
2044#ifdef _WORKING_LOADER_
2057 if (!ImportDescriptor)
2062 NextEntry = NextEntry->
Flink;
2068#ifdef _WORKING_LOADER_
2072 for (
i = 0, DllBase = 0, DllEnd = 0;
i < ImportSize;
i++, ImageThunk++)
2074 DllBase = DllEnd =
i = 0;
2075 while ((ImportDescriptor->
Name) &&
2088 if ((*ImageThunk >= DllBase) && (*ImageThunk < DllEnd))
2112 if ((*ImageThunk >= DllBase) && (*ImageThunk < DllEnd))
2116 EntryArray[
j] = LdrEntry2;
2121 NextEntry2 = NextEntry2->
Flink;
2126 if ((*ImageThunk < DllBase) || (*ImageThunk >= DllEnd))
2132 ERROR_FATAL(
"Broken IAT entry for %p at %p (%lx)\n",
2133 LdrEntry, ImageThunk, *ImageThunk);
2139#ifndef _WORKING_LOADER_
2149 for (
i = 0, ImportSize = 0;
i < Modules;
i++)
2152 if ((EntryArray[
i]) &&
2153 (EntryArray[
i] != HalEntry) &&
2154 (EntryArray[
i] != KernelEntry))
2157 LastEntry = EntryArray[
i];
2168 else if (ImportSize == 1)
2177 LoadedImportsSize = ImportSize *
sizeof(
PVOID) +
sizeof(
SIZE_T);
2184 LoadedImports->
Count = ImportSize;
2187 for (
i = 0,
j = 0;
i < Modules;
i++)
2190 if ((EntryArray[
i]) &&
2191 (EntryArray[
i] != HalEntry) &&
2192 (EntryArray[
i] != KernelEntry))
2196 LoadedImports->
Entry[
j] = EntryArray[
i];
2208 NextEntry = NextEntry->
Flink;
2241 Sections > 0; --Sections, ++SectionHeader)
2255 else if (*(
PULONG)SectionHeader->
Name ==
'LOOP')
2258 if (*(
PULONG)&SectionHeader->
Name[4] ==
'EDOC')
2264 else if (*(
PUSHORT)&SectionHeader->
Name[4] ==
'MI')
2271 else if ((*(
PULONG)SectionHeader->
Name ==
'YSIM') &&
2272 (*(
PULONG)&SectionHeader->
Name[4] ==
'ETPS'))
2296 ListHead = &LoaderBlock->LoadOrderListHead;
2297 NextEntry = ListHead->
Flink;
2307 while (NextEntry != ListHead)
2318 NextEntry = NextEntry->
Flink;
2327 if (!NewEntry)
return FALSE;
2330 *NewEntry = *LdrEntry;
2361 NextEntry = NextEntry->
Flink;
2470 NextEntry = NextEntry->
Flink;
2478 DPRINT1(
"Large pages not supported!\n");
2493 for (PointerPte = FirstPte; PointerPte <= LastPte; PointerPte++)
2501 DPRINT1(
"CORE-16449: FirstPte=%p, LastPte=%p, Protection=%lx\n", FirstPte, LastPte, Protection);
2502 DPRINT1(
"CORE-16449: PointerPte=%p, TempPte=%lx\n", PointerPte,
TempPte.u.Long);
2503 DPRINT1(
"CORE-16449: Please issue the 'mod' and 'bt' (KDBG) or 'lm' and 'kp' (WinDbg) commands. Then report this in Jira.\n");
2510#if _MI_HAS_NO_EXECUTE
2529 PVOID SectionBase, SectionEnd;
2532 PMMPTE FirstPte, LastPte;
2549 if (NtHeaders ==
NULL)
2551 DPRINT1(
"Failed to get NT headers for image @ %p\n", ImageBase);
2559 DPRINT1(
"Skipping NT 4 driver @ %p\n", ImageBase);
2573 if (LastPte >= FirstPte)
2582 Section = &SectionHeaders[
i];
2590 if (FirstPte == LastPte)
2606 SectionEnd =
Add2Ptr(SectionBase, SectionSize - 1);
2611 if (LastPte < FirstPte)
2628 DPRINT1(
"ImageBase 0x%p ImageSize 0x%lx Section %u VA 0x%lx Raw 0x%lx virt 0x%lx\n",
2643#ifdef ENABLE_MISETPAGINGOFDRIVER
2653#ifndef ENABLE_MISETPAGINGOFDRIVER
2655 DPRINT1(
"WARNING: MiSetPagingOfDriver() called, but paging is broken! ignoring!\n");
2668 while (PointerPte <= LastPte)
2671 if (PointerPte->u.Hard.Valid == 1)
2709 ImageBase = (
ULONG_PTR)LdrEntry->DllBase;
2711 if (!NtHeaders)
return;
2764MiVerifyImageIsOkForMpUse(
2779MmVerifyImageIsOkForMpUse(
2790 return MiVerifyImageIsOkForMpUse(NtHeaders);
2818 Status = ZwCreateSection(&SectionHandle,
2827 DPRINT1(
"ZwCreateSection failed with status 0x%x\n",
Status);
2835 Status = ZwMapViewOfSection(SectionHandle,
2848 DPRINT1(
"ZwMapViewOfSection failed with status 0x%x\n",
Status);
2855 Status = ZwQueryInformationFile(ImageHandle,
2893 if (!MiVerifyImageIsOkForMpUse(NtHeaders))
2971 if (NewCookie > COOKIE_MAX)
2977 if ((NewCookie == 0) || (NewCookie == *
Cookie))
3009 PWCHAR MissingDriverName, PrefixedBuffer =
NULL;
3048 BaseLength *=
sizeof(
WCHAR);
3099 if (!PrefixedBuffer)
3106 PrefixName.
Buffer = PrefixedBuffer;
3116 BaseName.
Length += NamePrefix->Length;
3121 if (LoadedName) BaseName = *LoadedName;
3127 DPRINT1(
"MM:SYSLDR Loading %wZ (%wZ) %s\n",
3128 &PrefixName, &BaseName,
Flags ?
"in session space" :
"");
3157 NextEntry = NextEntry->
Flink;
3175 *ModuleObject = LdrEntry;
3176 *ImageBaseAddress = LdrEntry->
DllBase;
3221 DPRINT1(
"ZwOpenFile failed for '%wZ' with status 0x%x\n",
3256 Status = ZwCreateSection(&SectionHandle,
3265 DPRINT1(
"ZwCreateSection failed with status 0x%x\n",
Status);
3328 DPRINT1(
"MiLoadImageSection failed with status 0x%x\n",
Status);
3341 DPRINT1(
"LdrRelocateImageWithBias failed with status 0x%x\n",
Status);
3377 LdrEntry->
DllBase = ModuleLoadBase;
3424 MissingDriverName =
NULL;
3436 if (*(
ULONG_PTR*)&MissingDriverName & 1)
3438 NeedToFreeString =
TRUE;
3442 DPRINT1(
"MiResolveImageReferences failed with status 0x%x\n",
Status);
3443 DPRINT1(
" Missing driver '%ls', missing API '%s'\n",
3444 MissingDriverName, MissingApiName);
3446 if (NeedToFreeString)
3471 LdrEntry->
Flags &= ~LDRP_LOAD_IN_PROGRESS;
3497#ifdef __ROS_ROSSYM__
3513 UnicodeTemp = PrefixName;
3514 UnicodeTemp.
Buffer += 11;
3544 *ModuleObject = LdrEntry;
3545 *ImageBaseAddress = LdrEntry->
DllBase;
3557 ModuleLoadBase =
NULL;
3603 FoundEntry = LdrEntry;
3608 NextEntry = NextEntry->
Flink;
3630 if (!LdrEntry)
return NULL;
3640 KeFlushQueuedDpcs();
3722 if (ProcAddress)
break;
3723 if (Modules == 2)
break;
3727 NextEntry = NextEntry->
Flink;
NTSTATUS NTAPI MmUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress)
#define ALIGN_DOWN_BY(size, align)
#define ALIGN_UP_BY(size, align)
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 STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
#define RTL_CONSTANT_STRING(s)
#define IMAGE_DIRECTORY_ENTRY_EXPORT
#define IMAGE_DIRECTORY_ENTRY_DEBUG
#define RtlImageDirectoryEntryToData
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
#define _strnicmp(_String1, _String2, _MaxCount)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
_ACRTIMP char *__cdecl strchr(const char *, int)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
_ACRTIMP int __cdecl strncmp(const char *, const char *, size_t)
#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 FLG_SHOW_LDR_SNAPS
#define FLG_ENABLE_KDEBUG_SYMBOL_LOAD
#define EXCEPTION_EXECUTE_HANDLER
#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)
VOID NTAPI MiReleaseSystemPtes(IN PMMPTE StartingPte, IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
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 ExFreePoolWithTag(_P, _T)
#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 _Pre_valid_ PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize _Pre_valid_ PVOID * BaseAddress
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize _Pre_valid_ PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
ULONG NTAPI LdrRelocateImageWithBias(_In_ PVOID BaseAddress, _In_ LONGLONG AdditionalBias, _In_opt_ PCSTR 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 RTL_SIZEOF_THROUGH_FIELD(type, field)
#define UNREFERENCED_PARAMETER(P)
static OUT PIO_STATUS_BLOCK IoStatusBlock
#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 MiAddressToPte(x)
#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_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)
BOOLEAN PsImageNotifyEnabled
FORCEINLINE VOID PspRunLoadImageNotifyRoutines(PUNICODE_STRING FullImageName, HANDLE ProcessId, PIMAGE_INFO ImageInfo)
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
#define _SEH2_EXCEPT(...)
PEPROCESS PsInitialSystemProcess
#define ERROR_DBGBREAK(...)
POBJECT_TYPE MmSectionObjectType
NTSTATUS NTAPI MmMapViewOfSection(_In_ PVOID SectionObject, _In_ PEPROCESS Process, _Outptr_result_bytebuffer_(*ViewSize) _Pre_opt_valid_ PVOID *BaseAddress, _In_ ULONG_PTR ZeroBits, _In_ SIZE_T CommitSize, _Inout_opt_ PLARGE_INTEGER SectionOffset, _Inout_ PSIZE_T ViewSize, _In_range_(ViewShare, ViewUnmap) SECTION_INHERIT InheritDisposition, _In_ ULONG AllocationType, _In_ ULONG Protect)
#define FileStandardInformation
PULONG MinorVersion OPTIONAL
DWORD AddressOfNameOrdinals
ULONG ImageAddressingMode
union _IMAGE_THUNK_DATA32::@2362 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
VOID NTAPI MiSetPagingOfDriver(IN PMMPTE PointerPte, IN PMMPTE LastPte)
NTSTATUS NTAPI MmCheckSystemImage(_In_ HANDLE ImageHandle)
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)
static VOID MiUnmapSystemImage(_In_ PVOID ImageBase, _In_ ULONG ImageSize)
Undoes the mapping performed by MiLoadImageSection(): frees the pages backing the image,...
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...
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 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 BYTES_TO_PAGES(Size)
#define ObDereferenceObject
#define PsGetCurrentProcess