166 CHECK_PAGED_CODE_RTL(
char *
file,
int line)
231 ULONG_PTR Stack, NewStack, StackBegin, StackEnd = 0;
239 __asm__(
"mov %%ebp, %0" :
"=r" (Stack) : );
240 #elif defined(_MSC_VER) 243 #elif defined(_M_MIPS) 244 __asm__(
"move $sp, %0" :
"=r" (Stack) : );
245 #elif defined(_M_PPC) 246 __asm__(
"mr %0,1" :
"=r" (Stack) : );
247 #elif defined(_M_ARM) 249 __asm__(
"mov sp, %0" :
"=r"(Stack) : );
250 #elif defined(_MSC_VER) 255 #error Unknown architecture 282 if ((Stack >= StackEnd) ||
283 (!
i ? (Stack < StackBegin) : (Stack <= StackBegin)) ||
284 ((StackEnd - Stack) < (2 *
sizeof(
ULONG_PTR))))
295 if (!((Stack < NewStack) && (NewStack < StackEnd)))
302 if ((StackBegin < Eip) && (Eip < StackEnd))
break;
398 &AtomTable->RtlHandleTable);
463 if (RtlHandle !=
NULL)
468 if (HandleIndex < 0xC000)
517 WORD id,
void *
root,
int want_dir );
519 void *
root,
int want_dir );
535 LCID user_lcid, system_lcid;
542 if (!
level--)
goto done;
641 *BaseOfImage = ImageBase;
656 if (!bAllocateBuffer)
660 CallerBuffer->
Buffer[0] = 0;
674 static const WCHAR winsxsW[] = {
'\\',
'w',
'i',
'n',
's',
'x',
's',
'\\'};
677 ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *
info;
678 ACTCTX_SECTION_KEYED_DATA
data;
685 ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION,
701 AssemblyDetailedInformationInActivationContext,
709 DPRINT(
"manifestpath === %S\n",
info->lpAssemblyManifestPath);
710 DPRINT(
"DirectoryName === %S\n",
info->lpAssemblyDirectoryName);
711 if (!
info->lpAssemblyManifestPath )
717 if ((
p =
wcsrchr(
info->lpAssemblyManifestPath,
'\\' )))
719 DWORD dirlen =
info->ulAssemblyDirectoryNameLength /
sizeof(
WCHAR);
726 dirlen =
p -
info->lpAssemblyManifestPath;
727 needed = (dirlen + 1) *
sizeof(
WCHAR) + pnameW->
Length;
746 sizeof(winsxsW) +
info->ulAssemblyDirectoryNameLength + pnameW->
Length + 2*
sizeof(
WCHAR));
756 memcpy(
p, winsxsW,
sizeof(winsxsW) );
757 p +=
sizeof(winsxsW) /
sizeof(
WCHAR);
758 memcpy(
p,
info->lpAssemblyDirectoryName,
info->ulAssemblyDirectoryNameLength );
759 p +=
info->ulAssemblyDirectoryNameLength /
sizeof(
WCHAR);
814 if (!OriginalName->Buffer || OriginalName->Length == 0)
830 RtlInitEmptyUnicodeString(&RealName, RealNameBuf,
sizeof(RealNameBuf));
831 RtlInitEmptyUnicodeString(&LocalName, LocalNameBuf,
sizeof(LocalNameBuf));
836 DPRINT1(
"RtlComputePrivatizedDllName_U failed for %wZ: 0x%lx\n", OriginalName,
Status);
849 DPRINT1(
"Error while retrieving buffer for %wZ: 0x%lx\n", OriginalName,
Status);
861 DPRINT1(
"Error while retrieving buffer for %wZ: 0x%lx\n", OriginalName,
Status);
869 if (RealName.
Buffer != RealNameBuf)
871 if (LocalName.
Buffer != LocalNameBuf)
876 DPRINT(
"Redirecting %wZ to %S\n", OriginalName, fullname);
890 pstrParam = OriginalName;
893 p = OriginalName->
Buffer + OriginalName->Length /
sizeof(
WCHAR) - 1;
894 GotExtension =
FALSE;
895 while (
p >= OriginalName->Buffer)
907 pstrParam = &localStr;
925 RtlInitEmptyUnicodeString(&localStr2,
buffer,
sizeof(
buffer));
928 pstrParam = &localStr2;
938 DPRINT(
"Redirecting %wZ to %S\n", OriginalName, fullname);
VOID RtlpDestroyAtomHandleTable(PRTL_ATOM_TABLE AtomTable)
PTEB LdrpTopLevelDllBeingLoadedTeb
static int Hash(const char *)
_Out_ PULONG_PTR HighLimit
struct _RTL_ATOM_HANDLE * PRTL_ATOM_HANDLE
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
_In_ ULONG _Out_writes_bytes_all_(Length) PUCHAR Buffer
KPROCESSOR_MODE NTAPI RtlpGetMode(VOID)
BOOLEAN RtlpCreateAtomHandle(PRTL_ATOM_TABLE AtomTable, PRTL_ATOM_TABLE_ENTRY Entry)
NTSTATUS find_entry(PVOID BaseAddress, LDR_RESOURCE_INFO *info, ULONG level, void **ret, int want_dir)
#define STATUS_NOT_IMPLEMENTED
NTSYSAPI VOID NTAPI RtlDestroyHandleTable(_Inout_ PRTL_HANDLE_TABLE HandleTable)
ecx edi ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl edx movl TEMP incl eax andl eax ecx incl ebx eax jnz xchgl ecx incl TEMP esp ecx subl ebx pushl ecx ecx edx ecx ecx mm0 mm4 mm0 mm4 mm1 mm5 mm1 mm5 mm2 mm6 mm2 mm6 mm3 mm7 mm3 mm7 paddd mm0 paddd mm4 paddd mm0 paddd mm4 paddd mm0 paddd mm4 movq mm1 movq mm5 mm1 mm5 paddd mm0 paddd mm4 mm0 mm4 packssdw mm0 packssdw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi esi edx edi decl ecx jnz popl ecx ecx jecxz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 mm1 paddd mm0 mm0 packssdw mm0 movd eax movw edi esi edx esi ecx mm0 mm4 mm0 mm4 mm1 mm5 mm1 mm5 mm2 mm6 mm2 mm6 mm3 mm7 mm3 mm7 paddd mm0 paddd mm4 paddd mm0 paddd mm4 paddd mm0 paddd mm4 movq mm1 movq mm5 mm1 mm5 paddd mm1 paddd mm5 mm1 mm5 packssdw mm1 packssdw mm5 psubd mm0 psubd mm4 psubsw mm0 psubsw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi esi edx edi decl ecx jnz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 mm1 paddd mm1 mm1 packssdw mm1 psubd mm0 psubsw mm0 movd eax movw edi emms popl ebx popl esi popl edi mov ebp
NTSTATUS NTAPI RtlEnterHeapLock(IN OUT PHEAP_LOCK Lock, IN BOOLEAN Exclusive)
NTSYSAPI void WINAPI RtlReleaseActivationContext(HANDLE)
VOID RtlpUnlockAtomTable(PRTL_ATOM_TABLE AtomTable)
NTSYSAPI VOID NTAPI RtlInitializeHandleTable(_In_ ULONG TableSize, _In_ ULONG HandleSize, _In_ PRTL_HANDLE_TABLE HandleTable)
#define UNREFERENCED_PARAMETER(P)
IMAGE_RESOURCE_DIRECTORY * find_entry_by_name(IMAGE_RESOURCE_DIRECTORY *dir, LPCWSTR name, void *root, int want_dir)
#define STATUS_INVALID_PARAMETER
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
NTSTATUS find_actctx_dll(PUNICODE_STRING pnameW, LPWSTR *fullname, PUNICODE_STRING CallerBuffer, BOOLEAN bAllocateBuffer)
_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)
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlWow64EnableFsRedirection(IN BOOLEAN Wow64FsEnableRedirection)
_Inout_ __drv_aliasesMem PSLIST_ENTRY _Inout_ PSLIST_ENTRY _In_ ULONG Count
VOID NTAPI RtlReleasePebLock(VOID)
NTSTATUS NTAPI RtlpSafeCopyMemory(_Out_writes_bytes_all_(Length) VOID UNALIGNED *Destination, _In_reads_bytes_(Length) CONST VOID UNALIGNED *Source, _In_ SIZE_T Length)
VOID RtlpFreeAtomHandle(PRTL_ATOM_TABLE AtomTable, PRTL_ATOM_TABLE_ENTRY Entry)
#define STATUS_SXS_KEY_NOT_FOUND
PVOID NTAPI RtlPcToFileHeader(IN PVOID PcValue, PVOID *BaseOfImage)
#define STATUS_BUFFER_TOO_SMALL
#define SUBLANG_SYS_DEFAULT
VOID NTAPI RtlpClearInDbgPrint(VOID)
NTSYSAPI NTSTATUS NTAPI RtlComputeImportTableHash(IN HANDLE FileHandle, OUT PCHAR Hash, IN ULONG ImportTableHashSize)
ULONG HeapDeCommitFreeBlockThreshold
FORCEINLINE VOID YieldProcessor(VOID)
_Must_inspect_result_ _In_ ULONG Flags
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
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
VOID NTAPI RtlpSetHeapParameters(IN PRTL_HEAP_PARAMETERS Parameters)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
__asm__("\t.globl GetPhys\n" "GetPhys:\t\n" "mflr 0\n\t" "stwu 0,-16(1)\n\t" "mfmsr 5\n\t" "andi. 6,5,0xffef\n\t" "mtmsr 6\n\t" "isync\n\t" "sync\n\t" "lwz 3,0(3)\n\t" "mtmsr 5\n\t" "isync\n\t" "sync\n\t" "lwz 0,0(1)\n\t" "addi 1,1,16\n\t" "mtlr 0\n\t" "blr")
#define RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH
BOOLEAN NTAPI RtlTryEnterHeapLock(IN OUT PHEAP_LOCK Lock, IN BOOLEAN Exclusive)
#define EXCEPTION_EXECUTE_HANDLER
_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
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcsrchr(_In_z_ const wchar_t *_Str, _In_ wchar_t _Ch)
PRTL_ATOM_TABLE_ENTRY AtomEntry
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
NTSYSAPI PRTL_HANDLE_TABLE_ENTRY NTAPI RtlAllocateHandle(_In_ PRTL_HANDLE_TABLE HandleTable, _Inout_ PULONG Index)
BOOLEAN NTAPI RtlpCaptureStackLimits(IN ULONG_PTR Ebp, IN ULONG_PTR *StackBegin, IN ULONG_PTR *StackEnd)
NTSTATUS NTAPI RtlLeaveHeapLock(IN OUT PHEAP_LOCK Lock)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
NTSYSAPI BOOLEAN NTAPI RtlFreeHandle(_In_ PRTL_HANDLE_TABLE HandleTable, _In_ PRTL_HANDLE_TABLE_ENTRY Handle)
static const WCHAR lang[]
NTSYSAPI NTSTATUS NTAPI RtlComputePrivatizedDllName_U(_In_ PUNICODE_STRING DllName, _Inout_ PUNICODE_STRING RealName, _Inout_ PUNICODE_STRING LocalName)
struct _LIST_ENTRY * Flink
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
IMAGE_RESOURCE_DIRECTORY * find_entry_by_id(IMAGE_RESOURCE_DIRECTORY *dir, WORD id, void *root, int want_dir)
#define _SEH2_YIELD(STMT_)
IMAGE_RESOURCE_DIRECTORY * find_first_entry(IMAGE_RESOURCE_DIRECTORY *dir, void *root, int want_dir)
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define NT_SUCCESS(StatCode)
#define MI_HIGHEST_USER_ADDRESS
BOOLEAN NTAPI RtlpHandleDpcStackException(IN PEXCEPTION_REGISTRATION_RECORD RegistrationFrame, IN ULONG_PTR RegistrationFrameEnd, IN OUT PULONG_PTR StackLow, IN OUT PULONG_PTR StackHigh)
static const UCHAR Index[8]
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
PPEB NTAPI RtlGetCurrentPeb(VOID)
PVOID MmHighestUserAddress
NTSTATUS RtlpInitAtomTableLock(PRTL_ATOM_TABLE AtomTable)
_In_ ULONG _In_ ULONG _In_ ULONG Length
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
NTSTATUS NTAPI RtlInitializeHeapLock(IN OUT PHEAP_LOCK *Lock)
struct _RTL_ATOM_HANDLE RTL_ATOM_HANDLE
_IRQL_requires_same_ _In_ PVOID _Inout_ struct _CONTEXT * ContextRecord
#define STATUS_RESOURCE_DATA_NOT_FOUND
VOID RtlpFreeAtomTableEntry(PRTL_ATOM_TABLE_ENTRY Entry)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
BOOLEAN NTAPI RtlpCheckForActiveDebugger(VOID)
_In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
#define RtlImageDirectoryEntryToData
NTSYSAPI NTSTATUS WINAPI RtlFindActivationContextSectionString(ULONG, const GUID *, ULONG, const UNICODE_STRING *, PVOID)
NTSYSAPI NTSTATUS NTAPI RtlDosApplyFileIsolationRedirection_Ustr(IN ULONG Flags, IN PUNICODE_STRING OriginalName, IN PUNICODE_STRING Extension, IN OUT PUNICODE_STRING StaticString, IN OUT PUNICODE_STRING DynamicString, IN OUT PUNICODE_STRING *NewName, IN PULONG NewFlags, IN PSIZE_T FileNameSize, IN PSIZE_T RequiredLength)
#define memcpy(s1, s2, n)
#define LANGIDFROMLCID(l)
SIZE_T RtlpAllocDeallocQueryBufferSize
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG IN OUT PLONG IN LONG Increment IN PNDIS_RW_LOCK Lock
IN PVOID IN PVOID IN USHORT IN USHORT Size
VOID NTAPI RtlpGetStackLimits(PULONG_PTR StackBase, PULONG_PTR StackLimit)
struct atom_table ** PRTL_ATOM_TABLE
#define _In_reads_bytes_(size)
VOID RtlpFreeAtomTable(PRTL_ATOM_TABLE AtomTable)
int push_language(USHORT *list, ULONG pos, WORD lang)
BOOLEAN RtlpCreateAtomHandleTable(PRTL_ATOM_TABLE AtomTable)
ULONG HeapDeCommitTotalFreeThreshold
VOID RtlpDestroyAtomTableLock(PRTL_ATOM_TABLE AtomTable)
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
#define STATUS_RESOURCE_LANG_NOT_FOUND
NTSYSAPI NTSTATUS NTAPI RtlWow64EnableFsRedirectionEx(IN PVOID Wow64FsEnableRedirection, OUT PVOID *OldFsRedirectionLevel)
BOOLEAN NTAPI RtlDoesFileExists_UStr(IN PUNICODE_STRING FileName)
ULONG NTAPI RtlWalkFrameChain(OUT PVOID *Callers, IN ULONG Count, IN ULONG Flags)
_In_ ULONG _Out_opt_ PULONG RequiredLength
#define STATUS_RESOURCE_NAME_NOT_FOUND
ULONG NTAPI RtlGetTickCount(VOID)
NTSTATUS NTAPI NtQueryDefaultLocale(IN BOOLEAN UserProfile, OUT PLCID DefaultLocaleId)
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
BOOLEAN NTAPI RtlIsThreadWithinLoaderCallout(VOID)
NTSYSAPI NTSTATUS WINAPI RtlQueryInformationActivationContext(ULONG, HANDLE, PVOID, ULONG, PVOID, SIZE_T, SIZE_T *)
VOID NTAPI RtlAcquirePebLock(VOID)
PRTL_ATOM_TABLE RtlpAllocAtomTable(ULONG Size)
BOOLEAN NTAPI RtlpSetInDbgPrint(VOID)
BOOLEAN RtlpLockAtomTable(PRTL_ATOM_TABLE AtomTable)
_In_ PUNICODE_STRING NewName
VOID NTAPI RtlpFreeMemory(PVOID Mem, ULONG Tag)
NTSYSAPI BOOLEAN WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **)
NTSTATUS get_buffer(LPWSTR *buffer, SIZE_T needed, PUNICODE_STRING CallerBuffer, BOOLEAN bAllocateBuffer)
PVOID NTAPI RtlpAllocateMemory(ULONG Bytes, ULONG Tag)
VOID NTAPI RtlpCheckLogException(IN PEXCEPTION_RECORD ExceptionRecord, IN PCONTEXT ContextRecord, IN PVOID ContextData, IN ULONG Size)
static const WCHAR dotManifestW[]
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI RtlDeleteHeapLock(IN OUT PHEAP_LOCK Lock)
RTL_HANDLE_TABLE_ENTRY Handle
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
#define _SEH2_EXCEPT(...)
#define _SEH2_GetExceptionCode()
#define IMAGE_DIRECTORY_ENTRY_RESOURCE
NTSYSAPI NTSTATUS NTAPI RtlDeleteCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
PRTL_ATOM_TABLE_ENTRY RtlpGetAtomEntry(PRTL_ATOM_TABLE AtomTable, ULONG Index)
static SERVICE_STATUS status
NTSYSAPI BOOLEAN NTAPI RtlTryEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define UInt32x32To64(a, b)
PRTL_ATOM_TABLE_ENTRY RtlpAllocAtomTableEntry(ULONG Size)
_Inout_opt_ PUNICODE_STRING Extension
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
LIST_ENTRY * ModuleListHead
base of all file and directory entries
IN PUNICODE_STRING StaticString
ULONG NTAPI RtlGetNtGlobalFlags(VOID)
#define STATUS_RESOURCE_TYPE_NOT_FOUND
IN PUNICODE_STRING IN PUNICODE_STRING DynamicString