mirror of
https://github.com/bb107/MemoryModulePP
synced 2026-06-08 13:15:33 +00:00
59 lines
1.8 KiB
C
59 lines
1.8 KiB
C
#pragma once
|
|
|
|
//
|
|
// ThreadLocalStoragePointer Tls indexs
|
|
// [0, MMP_START_TLS_INDEX) Reserved for ntdll loader
|
|
// [MMP_START_TLS_INDEX, MMP_MAXIMUM_TLS_INDEX) Reserved for MemoryModule
|
|
//
|
|
|
|
#define MMP_START_TLS_INDEX 0x80 //128
|
|
|
|
#define MMP_MAXIMUM_TLS_INDEX 0x100 //256
|
|
|
|
#define MMP_TLSP_INDEX_BUFFER_SIZE (MMP_MAXIMUM_TLS_INDEX / 8) //32
|
|
|
|
#if (((MMP_START_TLS_INDEX | MMP_MAXIMUM_TLS_INDEX) & 7) || (MMP_START_TLS_INDEX >= MMP_MAXIMUM_TLS_INDEX))
|
|
#error "MMP_START_TLS_INDEX must be smaller than MMP_MAXIMUM_TLS_INDEX, and both are 8-bit aligned."
|
|
#endif
|
|
|
|
#define MmpAllocateTlsp() (PTLS_VECTOR)(RtlAllocateHeap(\
|
|
RtlProcessHeap(),\
|
|
HEAP_ZERO_MEMORY,\
|
|
sizeof(TLS_VECTOR) + sizeof(PVOID)* MMP_MAXIMUM_TLS_INDEX\
|
|
))
|
|
|
|
typedef struct _TLS_VECTOR {
|
|
union
|
|
{
|
|
ULONG Length;
|
|
HANDLE ThreadId;
|
|
};
|
|
|
|
struct _TLS_VECTOR* PreviousDeferredTlsVector;
|
|
PVOID ModuleTlsData[ANYSIZE_ARRAY];
|
|
} TLS_VECTOR, * PTLS_VECTOR;
|
|
|
|
typedef struct _TLS_ENTRY {
|
|
LIST_ENTRY TlsEntryLinks;
|
|
IMAGE_TLS_DIRECTORY TlsDirectory;
|
|
PLDR_DATA_TABLE_ENTRY ModuleEntry;
|
|
} TLS_ENTRY, * PTLS_ENTRY;
|
|
|
|
typedef struct _MMP_TLSP_RECORD {
|
|
|
|
LIST_ENTRY InMmpThreadLocalStoragePointer;
|
|
|
|
HANDLE UniqueThread;
|
|
|
|
// PEB->ThreadLocalStoragePointer allocated by ntdll!Ldr
|
|
PVOID* TlspLdrBlock;
|
|
|
|
// PEB->ThreadLocalStoragePointer allocated by MemoryModulePP
|
|
PVOID* TlspMmpBlock;
|
|
}MMP_TLSP_RECORD, * PMMP_TLSP_RECORD;
|
|
|
|
typedef struct _THREAD_CONTEXT {
|
|
PTHREAD_START_ROUTINE ThreadStartRoutine;
|
|
LPVOID ThreadParameter;
|
|
}THREAD_CONTEXT, * PTHREAD_CONTEXT;
|