13#define TAG_RTLDYNFNTBL 'tfDP'
18GET_RUNTIME_FUNCTION_CALLBACK(
21typedef GET_RUNTIME_FUNCTION_CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK;
26OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK(
31typedef OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK *POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK;
33typedef enum _FUNCTION_TABLE_TYPE
38 RF_KERNEL_DYNAMIC = 0x3,
54#if (NTDDI_VERSION <= NTDDI_WIN10)
132 if (dynamicTable ==
NULL)
134 DPRINT1(
"Failed to allocate dynamic function table\n");
144 dynamicTable->
Type = RF_UNSORTED;
149 for (
i = 0;
i < EntryCount;
i++)
174 SIZE_T stringLength, allocationSize;
177 if ((TableIdentifier & 3) != 3)
183 if (OutOfProcessCallbackDll !=
NULL)
185 stringLength =
wcslen(OutOfProcessCallbackDll) + 1;
197 if (dynamicTable ==
NULL)
199 DPRINT1(
"Failed to allocate dynamic function table\n");
209 dynamicTable->
Type = RF_CALLBACK;
214 if (OutOfProcessCallbackDll !=
NULL)
218 OutOfProcessCallbackDll,
219 stringLength *
sizeof(
WCHAR));
246 listLink = listLink->
Flink)
274 _In_ PUNWIND_HISTORY_TABLE HistoryTable)
279 PGET_RUNTIME_FUNCTION_CALLBACK
callback;
287 listLink = listLink->
Flink)
292 (ControlPc < dynamicTable->MaximumAddress))
310 if ((ControlPc >= functionTable[
i].BeginAddress) &&
311 (ControlPc < functionTable[
i].EndAddress))
313 foundEntry = &functionTable[
i];
static const ENTRY Entries[]
struct _DYNAMIC_FUNCTION_TABLE DYNAMIC_FUNCTION_TABLE
static __inline VOID AcquireDynamicFunctionTableLockShared()
static __inline VOID ReleaseDynamicFunctionTableLockExclusive()
struct _DYNAMIC_FUNCTION_TABLE * PDYNAMIC_FUNCTION_TABLE
static VOID RtlpInsertDynamicFunctionTable(PDYNAMIC_FUNCTION_TABLE DynamicTable)
PRUNTIME_FUNCTION NTAPI RtlpLookupDynamicFunctionEntry(_In_ DWORD64 ControlPc, _Out_ PDWORD64 ImageBase, _In_ PUNWIND_HISTORY_TABLE HistoryTable)
static __inline VOID AcquireDynamicFunctionTableLockExclusive()
RTL_SRWLOCK RtlpDynamicFunctionTableLock
BOOLEAN NTAPI RtlAddFunctionTable(_In_ PRUNTIME_FUNCTION FunctionTable, _In_ DWORD EntryCount, _In_ DWORD64 BaseAddress)
BOOLEAN NTAPI RtlDeleteFunctionTable(_In_ PRUNTIME_FUNCTION FunctionTable)
PLIST_ENTRY NTAPI RtlGetFunctionTableListHead(void)
static __inline VOID ReleaseDynamicFunctionTableLockShared()
BOOLEAN NTAPI RtlInstallFunctionTableCallback(_In_ DWORD64 TableIdentifier, _In_ DWORD64 BaseAddress, _In_ DWORD Length, _In_ PGET_RUNTIME_FUNCTION_CALLBACK Callback, _In_ PVOID Context, _In_opt_z_ PCWSTR OutOfProcessCallbackDll)
LIST_ENTRY RtlpDynamicFunctionTableList
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
NTSYSAPI void WINAPI RtlAcquireSRWLockShared(RTL_SRWLOCK *)
NTSYSAPI void WINAPI RtlReleaseSRWLockExclusive(RTL_SRWLOCK *)
NTSYSAPI void WINAPI RtlAcquireSRWLockExclusive(RTL_SRWLOCK *)
NTSYSAPI void WINAPI RtlReleaseSRWLockShared(RTL_SRWLOCK *)
static IPrintDialogCallback callback
#define _Function_class_(x)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
_In_ ULONG _In_ ULONG _In_ ULONG Length
struct _RUNTIME_FUNCTION * PRUNTIME_FUNCTION
PVOID NTAPI RtlpAllocateMemory(_In_ ULONG Bytes, _In_ ULONG Tag)
VOID NTAPI RtlpFreeMemory(_In_ PVOID Mem, _In_ ULONG Tag)
PGET_RUNTIME_FUNCTION_CALLBACK Callback
PRUNTIME_FUNCTION FunctionTable
PWCHAR OutOfProcessCallbackDll
struct _LIST_ENTRY * Flink
#define RtlCopyMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
static WLX_DISPATCH_VERSION_1_4 FunctionTable