* - PsaWalkFirstProcess
* - PsaWalkNextProcess
* - PsaWalkFirstThread
- * - PsaWalkNextThread
+ * - PsaWalkNextThread
* - PsaEnumerateProcessesAndThreads
* - PsaEnumerateProcesses
* - PsaEnumerateThreads
that could end up copying a large chunk of data we'd discard anyway */
PsaiFree(pInfoBuffer);
pTmp = PsaiMalloc(nSize);
-
+
if(pTmp == NULL)
{
DPRINT(FAILED_WITH_STATUS, "PsaiMalloc", STATUS_NO_MEMORY);
Status = STATUS_NO_MEMORY;
break;
}
-
+
pInfoBuffer = pTmp;
-
+
/* query the information */
Status = NtQuerySystemInformation(SystemProcessInformation,
pInfoBuffer,
/* double the buffer size */
nSize *= 2;
} while(Status == STATUS_INFO_LENGTH_MISMATCH);
-
+
if(!NT_SUCCESS(Status))
{
DPRINT(FAILED_WITH_STATUS, "NtQuerySystemInformation", Status);
{
return STATUS_INVALID_PARAMETER;
}
-
+
Status = STATUS_SUCCESS;
ProcessesAndThreads = PsaWalkFirstProcess(ProcessesAndThreads);
if(ProcessCallback)
{
Status = ProcessCallback(ProcessesAndThreads, ProcessCallbackContext);
-
+
if(!NT_SUCCESS(Status))
{
break;
i++, pCurThread = PsaWalkNextThread(pCurThread))
{
Status = ThreadCallback(pCurThread, ThreadCallbackContext);
-
+
if(!NT_SUCCESS(Status))
{
goto Bail;
Bail:
PsaFreeCapture(pInfoBuffer);
-
+
return Status;
}