Added process ids.
[reactos.git] / reactos / include / ddk / pstypes.h
index b7aaf1e..9316431 100644 (file)
 #ifndef __INCLUDE_DDK_PSTYPES_H
 #define __INCLUDE_DDK_PSTYPES_H
 
-#include <kernel32/heap.h>
+#include <kernel32/atom.h>
+#include <internal/hal.h>
 
-typedef ULONG THREADINFOCLASS;
+#ifndef TLS_MINIMUM_AVAILABLE
+#define TLS_MINIMUM_AVAILABLE  (64)
+#endif
+#ifndef MAX_PATH
+#define MAX_PATH       (260)
+#endif
 
-typedef struct _CLIENT_ID 
+typedef NTSTATUS (*PKSTART_ROUTINE)(PVOID StartContext);
+
+typedef struct _STACK_INFORMATION 
 {
-    HANDLE UniqueProcess;
-    HANDLE UniqueThread;
-} CLIENT_ID, *PCLIENT_ID;
+       PVOID   BaseAddress;
+       PVOID   UpperAddress;
+} STACK_INFORMATION, *PSTACK_INFORMATION;
+
+typedef struct linux_sigcontext {
+        int     sc_gs;
+        int     sc_fs;
+        int     sc_es;
+        int     sc_ds;
+        int     sc_edi;
+        int     sc_esi;
+        int     sc_ebp;
+        int     sc_esp;
+        int     sc_ebx;
+        int     sc_edx;
+        int     sc_ecx;
+        int     sc_eax;
+        int     sc_trapno;
+        int     sc_err;
+        int     sc_eip;
+        int     sc_cs;
+        int     sc_eflags;
+        int     sc_esp_at_signal;
+        int     sc_ss;
+        int     sc_387;
+        int     sc_mask;
+        int     sc_cr2;
+} TRAP_FRAME, *PTRAP_FRAME;
+
+typedef ULONG THREADINFOCLASS;
+
+typedef struct _STARTUPINFOW { 
+  DWORD   cb; 
+  WCHAR          WindowTitle[MAX_PATH];
+  WCHAR          ImageFile[MAX_PATH];  
+  WCHAR          CommandLine[MAX_PATH];
+  WCHAR          DllPath[MAX_PATH];
+  LPWSTR  Reserved[MAX_PATH]; 
+  LPWSTR  Desktop[MAX_PATH]; 
+  LPWSTR  Title[MAX_PATH]; 
+  DWORD   dwX; 
+  DWORD   dwY; 
+  DWORD   dwXSize; 
+  DWORD   dwYSize; 
+  DWORD   dwXCountChars; 
+  DWORD   dwYCountChars; 
+  DWORD   dwFillAttribute; 
+  DWORD   dwFlags; 
+  WORD    wShowWindow; 
+  WORD    cbReserved2; 
+  unsigned char * lpReserved2; 
+  HANDLE  hStdInput; 
+  HANDLE  hStdOutput; 
+  HANDLE  hStdError; 
+} PROCESSINFOW, *PPROCESSINFOW; 
+
+
+
+typedef struct _LDR {
+       UCHAR   Initialized;
+       UCHAR   InInitializationOrderModuleList;
+       PVOID   InLoadOrderModuleList;
+       PVOID   InMemoryOrderModuleList;
+} LDR, *PLDR;
 
-//typedef void* HEAP;
-typedef void* HANDLE_TABLE;
-typedef void* ATOMTABLE;
-
-typedef struct _pPebInfo {
-       LPWSTR          lpCommandLine;
-       DWORD           cb;
-       HANDLE          hStdInput; //18
-       HANDLE          hStdput;  
-       HANDLE          hStdError; 
-       LPWSTR          lpEnvironment;
-       DWORD           dwX;
-       DWORD           dwY;
-       DWORD           dwXSize;  
-       DWORD           dwYSize;  
-       DWORD           dwXCountChars;  
-       DWORD           dwYCountChars; 
-       DWORD           dwFillAttribute; 
-       DWORD           dwFlags; 
-       DWORD           wShowWindow; 
-       LPTSTR          lpTitle;  
-       LPTSTR          lpDesktop; 
-       LPTSTR          reserved; 
-       DWORD           cbReserved2; 
-       LPTSTR          lpReserved1; 
-} PEBINFO;
 
 typedef struct _NT_PEB
 {
-       
+       UCHAR                   InheritedAddressSpace;
+       UCHAR                   ReadImageFileExecOptions;
+       UCHAR                   BeingDebugged;
        LONG                    ImageBaseAddress; 
-       DWORD                   nActiveStdHandle;
-       void                    *HeapIndex;
-       DWORD                   dwTlsBits[2]; // tls in use bits 
+       LDR                     Ldr;
+
        WORD                    NumberOfProcessors;
        WORD                    NtGlobalFlag;
-       DWORD                   dwCriticalSectionTime;
-       DWORD                   dwHeapReserve;
-       DWORD                   dwHeapCommit;
-       DWORD                   dwHeapDecommitFreeBlockThreshold;
-       DWORD                   dwNumberOfHeaps;
-       DWORD                   dwMaxiumNumberOfHeaps;
-       PEBINFO                 *pPebInfo; 
-       HEAP                    *pProcessHeap; 
-       HANDLE_TABLE            htGDISharedHandleTable;
-       ATOMTABLE               LocalAtomTable;
-       CRITICAL_SECTION        *pCriticalSection; 
-       WORD                    wMajorVersion; 
-       WORD                    wMinorVersion; 
-       WORD                    wBuildNumber;  
-       WORD                    wPlatformId;    
-} NT_PEB, *PPEB;
 
+       PPROCESSINFOW           StartupInfo;
+       HANDLE                  ProcessHeap; 
+       ATOMTABLE               LocalAtomTable;
+       LPCRITICAL_SECTION      CriticalSection;
+       DWORD                   CriticalSectionTimeout; 
+       WORD                    MajorVersion; 
+       WORD                    MinorVersion; 
+       WORD                    BuildNumber;  
+       WORD                    PlatformId;     
+} NT_PEB, *PNT_PEB;    
 
+typedef struct _CLIENT_ID 
+{
+    HANDLE UniqueProcess;
+    HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
 typedef struct _NT_TIB {
     struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
     PVOID StackBase;
@@ -73,88 +117,163 @@ typedef struct _NT_TIB {
     union {
         PVOID FiberData;
         ULONG Version;
-    } s;
+    } Fib;
     PVOID ArbitraryUserPointer;
     struct _NT_TIB *Self;
 } NT_TIB, *PNT_TIB;
 
 typedef struct _NT_TEB
 {
-
        NT_TIB                  Tib; 
-       DWORD                   dwProcessId;
-       DWORD                   dwThreadId;     
-       HANDLE                  hRPC;
-       NT_PEB                  *pPeb;   
-       DWORD                   dwErrCode; 
-       WORD                    nMutexCount;
-       LCID                    Locale;
-       //HQUEUE                MessageQueue
-       DWORD                   dwTlsIndex ;
-       LPVOID                  TlsData[512];
-       
-       
+       CLIENT_ID               Cid;
+       HANDLE                  RPCHandle;
+       PVOID                   TlsData[TLS_MINIMUM_AVAILABLE];
+       DWORD                   dwTlsIndex;
+       NT_PEB                  *Peb;   
+       DWORD                   LastErrorCode;
+       NTSTATUS                LastStatusValue; 
+       DWORD                   LockCount;
+       UCHAR                   HardErrorMode;
 } NT_TEB;
 
+typedef struct _KTHREAD 
+{
+       DISPATCHER_HEADER       DispatcherHeader;
+       TIME                    ElapsedTime;
+       TIME                    KernelTime;
+       TIME                    UserTime;
+       STACK_INFORMATION       StackInformation;
+       PVOID                   ServiceDescriptorTable;  // points to KeServiceDescriptorTable
+       KAFFINITY               Affinity;
+       KPRIORITY               CurrentPriority;
+       KPRIORITY               BasePriority;
+       ULONG                   Quantum;
+       UCHAR                   ThreadState; //Thread state is a typeless enum, otherwise it should be const integer
+       ULONG                   FreezeCount;
+       LONG                    SuspendCount;
+       PTRAP_FRAME             TrapFrame; 
+       PVOID                   *Tls;
+       KWAIT_BLOCK             WaitBlock[4];   
+       struct _KMUTANT*        MutantList;
+       PLIST_ENTRY             ApcList;
+       UCHAR                   KernelApcDisable;
+       KTIMER                  TimerBlock;
+       KDEVICE_QUEUE           DeviceQueue;
+       NT_TEB*                 Teb;
+   
+        /*
+        * PURPOSE: CPU state
+        * NOTE: I have temporarily added this to give somewhere to store
+        * cpu state when the thread isn't running
+        */
+        hal_thread_state                   Context;
+        LIST_ENTRY Entry;
+        ULONG LastTick;
+} KTHREAD, *PKTHREAD;
+
+
+// According to documentation the stack should have a commited [ 1 page ] and
+// a reserved part [ 1 M ] but can be specified otherwise in the image file.
+
+typedef struct _INITIAL_TEB {
+       PVOID StackBase;
+       PVOID StackLimit;
+       PVOID StackCommit;
+       PVOID StackCommitMax;
+       PVOID StackReserved;
+} INITIAL_TEB, *PINITIAL_TEB;
 
-typedef NT_TEB *PINITIAL_TEB;
 
-typedef struct _EPROCESS
-{
-} EPROCESS, *PEPROCESS;
 
-//typedef KTHREAD ETHREAD, *PETHREAD;
 
-#if ETHREAD_NOT_THE_SAME_AS_KTHREAD
-typedef struct _ETHREAD
-{
-   EPROCESS* Process;
-} ETHREAD, *PETHREAD;
 
-/*
- * PURPOSE: Thread object
- */
-typedef struct 
+
+// TopLevelIrp can be one of the following values:
+// FIXME I belong somewhere else
+
+#define        FSRTL_FSP_TOP_LEVEL_IRP                 (0x01)
+#define        FSRTL_CACHE_TOP_LEVEL_IRP               (0x02)
+#define        FSRTL_MOD_WRITE_TOP_LEVEL_IRP           (0x03)
+#define                FSRTL_FAST_IO_TOP_LEVEL_IRP             (0x04)
+#define                FSRTL_MAX_TOP_LEVEL_IRP_FLAG            (0x04)
+
+typedef struct _TOP_LEVEL_IRP
 {
-   CSHORT Type;
-   CSHORT Size;
-   
-   /*
-    * PURPOSE: Entry in the linked list of threads
-    */
-   LIST_ENTRY Entry;
-   
-   /*
-    * PURPOSE: Current state of the thread
-    */
-   ULONG State;
-   
-   /*
-    * PURPOSE: Priority modifier of the thread
-    */
-   ULONG Priority;
-   
-   /*
-    * PURPOSE: Pointer to our parent process
-    */
-//   PEPROCESS Parent;
-   
-   /*
-    * PURPOSE: Handle of our parent process
-    */
-   HANDLE ParentHandle;
+       PIRP TopLevelIrp;
+       ULONG TopLevelIrpConst;
+} TOP_LEVEL_IRP;
+
+typedef struct _ETHREAD {
+       KTHREAD                 Tcb;
+       TIME                    CreateTime;
+       TIME                    ExitTime;
+       NTSTATUS                ExitStatus;
+       LIST_ENTRY              PostBlockList;
+       LIST_ENTRY              TerminationPortList;  
+       ULONG                   ActiveTimerListLock;
+       PVOID                   ActiveTimerListHead;
+       CLIENT_ID               Cid;
+       PLARGE_INTEGER          LpcReplySemaphore;
+       PVOID                   LpcReplyMessage;
+       PLARGE_INTEGER          LpcReplyMessageId;
+       PVOID                   ImpersonationInfo;
+       LIST_ENTRY              IrpList; //
+       TOP_LEVEL_IRP           TopLevelIrp;
+       ULONG                   ReadClusterSize;
+       UCHAR                   ForwardClusterOnly;
+       UCHAR                   DisablePageFaultClustering;
+       UCHAR                   DeadThread;
+       UCHAR                   HasTerminated;
+       ACCESS_MASK             GrantedAccess;
+       struct _EPROCESS*       ThreadsProcess;
+       PKSTART_ROUTINE         StartAddress;
+       LPTHREAD_START_ROUTINE  Win32StartAddress; // Should Specify a win32 start func
+       UCHAR                   LpcExitThreadCalled;
+       UCHAR                   HardErrorsAreDisabled;
+
    
    /*
-    * PURPOSE: Not currently used 
+    * Added by David Welch (welch@cwcom.net)
     */
-   ULONG AffinityMask;
+   struct _EPROCESS* OldProcess;
+
+} ETHREAD, *PETHREAD;
+
+
+typedef struct _KPROCESS 
+{
+   DISPATCHER_HEADER   DispatcherHeader;
+   PVOID               PageTableDirectory; // FIXME: I shoud point to a PTD
+   TIME                        ElapsedTime;
+   TIME                        KernelTime;
+   TIME                        UserTime;
+   LIST_ENTRY          InMemoryList;  
+   LIST_ENTRY          SwappedOutList;         
+   KSPIN_LOCK          SpinLock;
+   KAFFINITY           Affinity;
+   ULONG               StackCount;
+   KPRIORITY           BasePriority;
+   ULONG               DefaultThreadQuantum;
+   UCHAR               ProcessState;
+   ULONG               ThreadSeed;
+   UCHAR               DisableBoost;
    
    /*
-    * PURPOSE: Saved thread context
+    * Added by David Welch (welch@mcmail.com)
     */
-   hal_thread_state context;
-   
-} THREAD_OBJECT, *PTHREAD_OBJECT;
-#endif
+   LIST_ENTRY           MemoryAreaList;
+   HANDLE_TABLE         HandleTable;
+} KPROCESS, *PKPROCESS;
+
+typedef struct _EPROCESS
+{
+   KPROCESS Pcb;
+
+   ULONG    UniqueProcessId;
+   ULONG    InheritedFromUniqueProcessId;
+} EPROCESS, *PEPROCESS;
+
+#define PROCESS_STATE_TERMINATED (1)
+#define PROCESS_STATE_ACTIVE     (2)
 
 #endif /* __INCLUDE_DDK_PSTYPES_H */