-/* $Id$
- *
+/*
* ReactOS Project
* TList
*
* Copyright (c) 2000,2001 Emanuele Aliberti
*/
#include <reactos/buildno.h>
+#define WIN32_NO_STATUS
+#include <windows.h>
#define NTOS_MODE_USER
-#include <ntos.h>
+#include <ndk/ntndk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
-#include <epsapi.h>
+#include <epsapi/epsapi.h>
#include <getopt.h>
#ifndef PAGE_SIZE
int STDCALL
ProcessHasDescendants (
- ULONG Pid,
- PSYSTEM_PROCESSES pInfo
+ HANDLE Pid,
+ PSYSTEM_PROCESS_INFORMATION pInfo
)
{
LONG Count = 0;
if (NULL == pInfo) return 0;
do {
- if (ALREADY_PROCESSED != pInfo->InheritedFromProcessId)
+ if (ALREADY_PROCESSED != (DWORD)pInfo->InheritedFromUniqueProcessId)
{
- if ((Pid != pInfo->ProcessId) && (Pid == pInfo->InheritedFromProcessId))
+ if ((Pid != (HANDLE)pInfo->UniqueProcessId) && (Pid == (HANDLE)pInfo->InheritedFromUniqueProcessId))
{
++ Count;
}
}
- pInfo = (PSYSTEM_PROCESSES)((PBYTE)pInfo + pInfo->NextEntryDelta);
+ pInfo = (PSYSTEM_PROCESS_INFORMATION)((PBYTE)pInfo + pInfo->NextEntryOffset);
- } while (0 != pInfo->NextEntryDelta);
+ } while (0 != pInfo->NextEntryOffset);
return Count;
}
BOOL STDCALL
GetProcessInfo (
- PSYSTEM_PROCESSES pInfo,
+ PSYSTEM_PROCESS_INFORMATION pInfo,
LPWSTR * Module,
LPWSTR * Title
)
{
- *Module = (pInfo->ProcessName.Length ? pInfo->ProcessName.Buffer : L"System process");
+ *Module = (pInfo->ImageName.Length ? pInfo->ImageName.Buffer : L"System process");
*Title = L""; /* TODO: check if the process has any window */
return TRUE;
}
int STDCALL PrintProcessInfoDepth (
- PSYSTEM_PROCESSES pInfo,
+ PSYSTEM_PROCESS_INFORMATION pInfo,
LONG Depth
)
{
INT d = 0;
LPWSTR Module = L"";
LPWSTR Title = L"";
-
+
for (d = 0; d < Depth; d ++) printf (" ");
GetProcessInfo (pInfo, & Module, & Title);
wprintf (
L"%s (%d, %d) %s\n",
Module,
- pInfo->ProcessId,
- pInfo->InheritedFromProcessId,
+ pInfo->UniqueProcessId,
+ pInfo->InheritedFromUniqueProcessId,
Title
);
return EXIT_SUCCESS;
int STDCALL
PrintProcessAndDescendants (
- PSYSTEM_PROCESSES pInfo,
- PSYSTEM_PROCESSES pInfoBase,
+ PSYSTEM_PROCESS_INFORMATION pInfo,
+ PSYSTEM_PROCESS_INFORMATION pInfoBase,
LONG Depth
)
{
- DWORD Pid = 0;
+ HANDLE Pid = 0;
if (NULL == pInfo) return EXIT_FAILURE;
/* Print current pInfo process */
PrintProcessInfoDepth (pInfo, Depth ++);
- pInfo->InheritedFromProcessId = ALREADY_PROCESSED;
+ pInfo->InheritedFromUniqueProcessId = (HANDLE)ALREADY_PROCESSED;
/* Save current process' PID */
- Pid = pInfo->ProcessId;
+ Pid = pInfo->UniqueProcessId;
/* Scan and print possible children */
do {
- if (ALREADY_PROCESSED != pInfo->InheritedFromProcessId)
+ if (ALREADY_PROCESSED != (DWORD)pInfo->InheritedFromUniqueProcessId)
{
- if (Pid == pInfo->InheritedFromProcessId)
+ if (Pid == pInfo->InheritedFromUniqueProcessId)
{
if (ProcessHasDescendants (Pid, pInfoBase))
{
else
{
PrintProcessInfoDepth (pInfo, Depth);
- pInfo->InheritedFromProcessId = ALREADY_PROCESSED;
+ pInfo->InheritedFromUniqueProcessId = (HANDLE)ALREADY_PROCESSED;
}
}
}
- pInfo = (PSYSTEM_PROCESSES)((PBYTE)pInfo + pInfo->NextEntryDelta);
+ pInfo = (PSYSTEM_PROCESS_INFORMATION)((PBYTE)pInfo + pInfo->NextEntryOffset);
+
+ } while (0 != pInfo->NextEntryOffset);
- } while (0 != pInfo->NextEntryDelta);
-
return EXIT_SUCCESS;
}
int STDCALL PrintProcessList (BOOL DisplayTree)
{
- PSYSTEM_PROCESSES pInfo = NULL;
- PSYSTEM_PROCESSES pInfoBase = NULL;
- LONG Length = 0;
+ PSYSTEM_PROCESS_INFORMATION pInfo = NULL;
+ PSYSTEM_PROCESS_INFORMATION pInfoBase = NULL;
LPWSTR Module = L"";
LPWSTR Title = L"";
GetProcessInfo (pInfo, & Module, & Title);
wprintf (
L"%4d %-16s %s\n",
- pInfo->ProcessId,
+ pInfo->UniqueProcessId,
Module,
Title,
- pInfo->InheritedFromProcessId
+ pInfo->InheritedFromUniqueProcessId
);
}
- else
+ else
{
- if (ALREADY_PROCESSED != pInfo->InheritedFromProcessId)
+ if (ALREADY_PROCESSED != (DWORD)pInfo->InheritedFromUniqueProcessId)
{
PrintProcessAndDescendants (pInfo, pInfoBase, 0);
}
pInfo = PsaWalkNextProcess(pInfo);
}
-
+
PsaFreeCapture(pInfoBase);
-
+
return EXIT_SUCCESS;
}
-int STDCALL PrintThreads (PSYSTEM_PROCESSES pInfo)
+int STDCALL PrintThreads (PSYSTEM_PROCESS_INFORMATION pInfo)
{
- ULONG i = 0;
- NTSTATUS Status = STATUS_SUCCESS;
- HANDLE hThread = INVALID_HANDLE_VALUE;
- OBJECT_ATTRIBUTES Oa = {0};
- PVOID Win32StartAddress = NULL;
- THREAD_BASIC_INFORMATION tInfo = {0};
- ULONG ReturnLength = 0;
- PSYSTEM_THREADS CurThread;
+ ULONG i = 0;
+ NTSTATUS Status = STATUS_SUCCESS;
+ HANDLE hThread = INVALID_HANDLE_VALUE;
+ OBJECT_ATTRIBUTES Oa = {0};
+ PVOID Win32StartAddress = NULL;
+ THREAD_BASIC_INFORMATION tInfo = {0};
+ ULONG ReturnLength = 0;
+ PSYSTEM_THREAD_INFORMATION CurThread;
if (NULL == pInfo) return EXIT_FAILURE;
-
+
CurThread = PsaWalkFirstThread(pInfo);
- wprintf (L" NumberOfThreads: %d\n", pInfo->ThreadCount);
+ wprintf (L" NumberOfThreads: %d\n", pInfo->NumberOfThreads);
- for (i = 0; i < pInfo->ThreadCount; i ++, CurThread = PsaWalkNextThread(CurThread))
+ for (i = 0; i < pInfo->NumberOfThreads; i ++, CurThread = PsaWalkNextThread(CurThread))
{
Status = NtOpenThread (
& hThread,
{
continue;
}
-
+
Status = NtQueryInformationThread (
hThread,
ThreadBasicInformation,
NtClose (hThread);
continue;
}
-
+
NtClose (hThread);
/* Now print the collected information */
CurThread->ClientId.UniqueThread,
Win32StartAddress,
0 /* FIXME: ((PTEB) tInfo.TebBaseAddress)->LastErrorValue */,
- ThreadStateName[CurThread->State]
+ ThreadStateName[CurThread->ThreadState]
);
- }
+ }
return EXIT_SUCCESS;
}
return EXIT_SUCCESS;
}
-PSYSTEM_PROCESSES STDCALL
+PSYSTEM_PROCESS_INFORMATION STDCALL
GetProcessInfoPid (
- PSYSTEM_PROCESSES pInfoBase,
- DWORD Pid
+ PSYSTEM_PROCESS_INFORMATION pInfoBase,
+ HANDLE Pid
)
{
if (NULL == pInfoBase) return NULL;
while(pInfoBase)
{
- if (Pid == pInfoBase->ProcessId)
+ if (Pid == pInfoBase->UniqueProcessId)
{
return pInfoBase;
}
OBJECT_ATTRIBUTES Oa = {0};
CLIENT_ID ClientId = {0, 0};
-
+
ClientId.UniqueProcess = (PVOID) atol (PidStr);
-
+
if (FALSE == AcquirePrivileges ())
{
return EXIT_FAILURE;
}
-
+
Status = NtOpenProcess (
& hProcess,
PROCESS_QUERY_INFORMATION,
ULONG ReturnLength = 0;
PROCESS_BASIC_INFORMATION PsBasic;
VM_COUNTERS PsVm;
- PSYSTEM_PROCESSES pInfo = NULL;
- PSYSTEM_PROCESSES pInfoBase = NULL;
- LONG pInfoBaseLength = 0;
+ PSYSTEM_PROCESS_INFORMATION pInfo = NULL;
+ PSYSTEM_PROCESS_INFORMATION pInfoBase = NULL;
LPWSTR Module = L"";
LPWSTR Title = L"";
-
+
Status = NtQueryInformationProcess (
hProcess,
ProcessBasicInformation,
if (!NT_SUCCESS(PsaCaptureProcessesAndThreads (&pInfoBase)))
return EXIT_FAILURE;
- pInfo = GetProcessInfoPid (pInfoBase, (DWORD) ClientId.UniqueProcess);
+ pInfo = GetProcessInfoPid (pInfoBase, ClientId.UniqueProcess);
if (NULL == pInfo) return EXIT_FAILURE;
GetProcessInfo (pInfo, & Module, & Title);
-
+
wprintf (L"%4d %s\n", ClientId.UniqueProcess, Module);
#if 0
printf (" CWD: %s\n", ""); /* it won't appear if empty */
((LONG) PsVm.WorkingSetSize / 1024),
((LONG) PsVm.PeakWorkingSetSize / 1024)
);
-
+
PrintThreads (pInfo);
PrintModules ();
PsaFreeCapture(pInfoBase);
-
+
NtClose (hProcess);
-
+
return EXIT_SUCCESS;
}
return EXIT_FAILURE;