Get details about processes or threads.
142{
144 ULONG ReturnedLength;
146 UINT32 SizeOfBufferForThreadsAndProcessDetails =
NULL;
150
151
152
153
155
156
157
158
159 if (IsProcess)
160 {
161
162
163
165 }
166 else
167 {
168
169
170
172 }
173
174
175
176
178
179 if (IsProcess)
180 {
181
182
183
185 SymDetailsForProcessList,
187 }
188 else
189 {
190
191
192
194 SymDetailsForThreadList,
196 }
197
198
199
200
201 Status = DeviceIoControl(
204
205 &QueryCountOfActiveThreadsOrProcessesRequest,
207 &QueryCountOfActiveThreadsOrProcessesRequest,
209
210 &ReturnedLength,
211 NULL
212 );
213
214 if (!Status)
215 {
216 ShowMessages("ioctl failed with code 0x%x\n", GetLastError());
218 }
219
220
221
222
224 {
225 if (QueryCountOfActiveThreadsOrProcessesRequest.
Count == 0)
226 {
227 ShowMessages("err, unable to get count of active processes or threads\n");
228 }
229 else
230 {
231
232
233
234
235
236
237
238 QueryCountOfActiveThreadsOrProcessesRequest.
Count = QueryCountOfActiveThreadsOrProcessesRequest.
Count + 5;
239
240
241
242
243 if (IsProcess)
244 {
245 SizeOfBufferForThreadsAndProcessDetails =
247 }
248 else
249 {
250 SizeOfBufferForThreadsAndProcessDetails =
252 }
253
254 Entries = (
PVOID)malloc(SizeOfBufferForThreadsAndProcessDetails);
255
256 RtlZeroMemory(Entries, SizeOfBufferForThreadsAndProcessDetails);
257
258
259
260 if (IsProcess)
261 {
263 }
264 else
265 {
267 }
268
269
270
271
272 Status = DeviceIoControl(
275 &QueryCountOfActiveThreadsOrProcessesRequest,
277 Entries,
278 SizeOfBufferForThreadsAndProcessDetails,
279 &ReturnedLength,
280 NULL
281 );
282
283 if (!Status)
284 {
285 ShowMessages("ioctl failed with code 0x%x\n", GetLastError());
287 }
288
289 if (IsProcess)
290 {
292 }
293 else
294 {
296
297 ShowMessages("PROCESS\t%llx\tIMAGE\t%s\n",
300 }
301
302
303
304
305 for (SIZE_T i = 0; i < QueryCountOfActiveThreadsOrProcessesRequest.
Count; i++)
306 {
307
308
309
310 if (IsProcess)
311 {
312 if (ProcessEntries[i].Eprocess != NULL)
313 {
314 ShowMessages("PROCESS\t%llx\n\tProcess Id: %04x\tDirBase (Kernel Cr3): %016llx\tImage: %s\n\n",
315 ProcessEntries[i].Eprocess,
316 ProcessEntries[i].ProcessId,
317 ProcessEntries[i].Cr3,
318 ProcessEntries[i].ImageFileName);
319 }
320 }
321 else
322 {
323 if (ThreadEntries[i].Ethread != NULL)
324 {
325 ShowMessages("\tTHREAD\t%llx (%x.%x)\n",
326 ThreadEntries[i].Ethread,
327 ThreadEntries[i].ProcessId,
328 ThreadEntries[i].ThreadId);
329 }
330 }
331 }
332 }
333
334
335
336
338 }
339 else
340 {
343 }
344
345
346
347
349}
BOOLEAN g_IsKdModuleLoaded
shows whether the kernel debugger (KD) module is loaded or not
Definition globals.h:22
NULL()
Definition test-case-generator.py:530
UCHAR ImageFileName[15+1]
Definition RequestStructures.h:785
UINT64 Eprocess
Definition RequestStructures.h:781
UINT32 Count
Definition RequestStructures.h:799
DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_TYPES QueryType
Definition RequestStructures.h:797
DEBUGGEE_THREAD_LIST_NEEDED_DETAILS ThreadListNeededDetails
Definition RequestStructures.h:796
UINT64 Result
Definition RequestStructures.h:800
DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_ACTIONS QueryAction
Definition RequestStructures.h:798
DEBUGGEE_PROCESS_LIST_NEEDED_DETAILS ProcessListNeededDetails
Definition RequestStructures.h:795