Implementation of $peb pseudo-register.
128{
129#ifdef SCRIPT_ENGINE_USER_MODE
130# ifdef _WIN32
131
132
133
134 struct PROCESS_BASIC_INFORMATION
135 {
137 PVOID PebBaseAddress;
139 ULONG_PTR UniqueProcessId;
141 };
142
144 {
147 LIST_ENTRY InMemoryOrderModuleList;
148 };
149
151 {
164 };
165
167 {
171 };
172
173 struct LDR_MODULE
174 {
175 LIST_ENTRY InLoadOrderModuleList;
176 LIST_ENTRY InMemoryOrderModuleList;
177 LIST_ENTRY InInitializationOrderModuleList;
186 LIST_ENTRY HashTableEntry;
188 };
189
190 enum PROCESSINFOCLASS
191 {
192 ProcessBasicInformation = 0,
193 ProcessDebugPort = 7,
194 ProcessWow64Information = 26,
195 ProcessImageFileName = 27
196 };
197
198 LPCWSTR NTDLL_NAME = L"ntdll.dll";
199 LPCSTR NTQUERYINFO_NAME = "NtQueryInformationProcess";
200
201 HMODULE NtdllMod;
202 HANDLE ThisProcess;
203 NTSTATUS NtCallRet;
205
206
207
208
209 NTSTATUS(WINAPI * QueryInfoProcPtr)
210 (HANDLE,
enum PROCESSINFOCLASS,
PVOID,
ULONG, PULONG);
211
212 struct PROCESS_BASIC_INFORMATION BasicInfo;
214
215
216 ThisProcess = GetCurrentProcess();
217
218
219
220
221 NtdllMod = LoadLibraryW(NTDLL_NAME);
222
223
224
225
226 QueryInfoProcPtr =
227 (NTSTATUS(WINAPI *)(HANDLE,
enum PROCESSINFOCLASS,
PVOID,
ULONG, PULONG))GetProcAddress(NtdllMod, NTQUERYINFO_NAME);
228
229
230
231
232 NtCallRet = QueryInfoProcPtr(ThisProcess, ProcessBasicInformation, &BasicInfo, sizeof(BasicInfo), &BytesReturned);
233
234
235
236
237 PebPtr = (
struct PEB *)BasicInfo.PebBaseAddress;
238
239 return (UINT64)PebPtr;
240
241# else
242
243
244
245
246
247
248
249
250
251
252
253 return 0;
254
255# endif
256
257#endif
258
259#ifdef SCRIPT_ENGINE_KERNEL_MODE
260
261
262
263
265#endif
266}
struct _PEB PEB
PEB 64-bit.
struct _PEB_LDR_DATA PEB_LDR_DATA
PEB LDR Data.
struct _UNICODE_STRING UNICODE_STRING
ULONG Reserved6
Definition UserAccess.h:65
PPEB_LDR_DATA Ldr
Definition UserAccess.h:60
BYTE Reserved2[1]
Definition UserAccess.h:58
BYTE BeingDebugged
Definition UserAccess.h:57
ULONG SessionId
Definition UserAccess.h:74
PRTL_USER_PROCESS_PARAMETERS ProcessParameters
Definition UserAccess.h:61
PVOID Reserved5
Definition UserAccess.h:64
PVOID Reserved3[2]
Definition UserAccess.h:59
PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine
Definition UserAccess.h:71
PVOID Reserved7
Definition UserAccess.h:66
PVOID Reserved4[3]
Definition UserAccess.h:62
BYTE Reserved1[2]
Definition UserAccess.h:56
USHORT Length
Definition casting.cpp:26
USHORT MaximumLength
Definition casting.cpp:27
PWSTR Buffer
Definition casting.cpp:28