disable defining ntstatus codes in windows.h/winnt.h when using ndk
[reactos.git] / rosapps / sysutils / tlist / tlist.c
index 757f770..aed9089 100644 (file)
@@ -1,20 +1,21 @@
-/* $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
@@ -107,8 +108,8 @@ BOOL STDCALL AcquirePrivileges (VOID)
 
 int STDCALL
 ProcessHasDescendants (
-  ULONG                       Pid,
-  PSYSTEM_PROCESSES pInfo
+  HANDLE                      Pid,
+  PSYSTEM_PROCESS_INFORMATION pInfo
   )
 {
   LONG Count = 0;
@@ -116,16 +117,16 @@ ProcessHasDescendants (
   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;
 }
@@ -133,32 +134,32 @@ ProcessHasDescendants (
 
 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;
@@ -166,25 +167,25 @@ int STDCALL PrintProcessInfoDepth (
 
 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))
         {
@@ -197,22 +198,21 @@ PrintProcessAndDescendants (
        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"";
 
@@ -228,15 +228,15 @@ int STDCALL PrintProcessList (BOOL DisplayTree)
         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);
        }
@@ -244,31 +244,31 @@ int STDCALL PrintProcessList (BOOL DisplayTree)
 
       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,
@@ -280,7 +280,7 @@ int STDCALL PrintThreads (PSYSTEM_PROCESSES pInfo)
     {
       continue;
     }
-    
+
     Status = NtQueryInformationThread (
                hThread,
               ThreadBasicInformation,
@@ -306,7 +306,7 @@ int STDCALL PrintThreads (PSYSTEM_PROCESSES pInfo)
       NtClose (hThread);
       continue;
     }
-    
+
     NtClose (hThread);
 
     /* Now print the collected information */
@@ -314,9 +314,9 @@ int STDCALL PrintThreads (PSYSTEM_PROCESSES pInfo)
       CurThread->ClientId.UniqueThread,
       Win32StartAddress,
       0 /* FIXME: ((PTEB) tInfo.TebBaseAddress)->LastErrorValue */,
-      ThreadStateName[CurThread->State]
+      ThreadStateName[CurThread->ThreadState]
       );
-  } 
+  }
   return EXIT_SUCCESS;
 }
 
@@ -326,10 +326,10 @@ int STDCALL PrintModules (VOID)
        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;
@@ -338,7 +338,7 @@ GetProcessInfoPid (
 
   while(pInfoBase)
   {
-    if (Pid == pInfoBase->ProcessId)
+    if (Pid == pInfoBase->UniqueProcessId)
     {
       return pInfoBase;
     }
@@ -356,14 +356,14 @@ int STDCALL PrintProcess (char * PidStr)
   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,
@@ -375,12 +375,11 @@ int STDCALL PrintProcess (char * PidStr)
     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,
@@ -407,11 +406,11 @@ int STDCALL PrintProcess (char * PidStr)
     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 */
@@ -425,15 +424,15 @@ int STDCALL PrintProcess (char * PidStr)
       ((LONG) PsVm.WorkingSetSize / 1024),
       ((LONG) PsVm.PeakWorkingSetSize / 1024)
       );
-    
+
     PrintThreads (pInfo);
 
     PrintModules ();
 
     PsaFreeCapture(pInfoBase);
-  
+
     NtClose (hProcess);
-    
+
     return EXIT_SUCCESS;
   }
   return EXIT_FAILURE;