* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id: ps.h,v 1.64 2004/08/10 06:26:42 ion Exp $
+/* $Id$
*
* FILE: ntoskrnl/ke/kthread.c
* PURPOSE: Process manager definitions
/* Forward declarations. */
struct _KTHREAD;
struct _KTRAPFRAME;
+struct _EJOB;
#endif /* __ASM__ */
#define KeGetCurrentProcessorNumber() (KeGetCurrentKPCR()->ProcessorNumber)
#endif
-extern HANDLE SystemProcessHandle;
-
extern LCID PsDefaultThreadLocaleId;
extern LCID PsDefaultSystemLocaleId;
-#ifndef __USE_W32API
-
-#include <pshpack1.h>
-
-typedef struct _KAPC_STATE
-{
- LIST_ENTRY ApcListHead[2];
- struct _KPROCESS* Process;
- UCHAR KernelApcInProgress;
- UCHAR KernelApcPending;
- USHORT UserApcPending;
-} KAPC_STATE, *PKAPC_STATE, *__restrict PRKAPC_STATE;
-
-#include <poppack.h>
-
-#endif /* __USE_W32API */
-
#include <pshpack1.h>
typedef struct _KTHREAD
/* List of mutants owned by the thread */
LIST_ENTRY MutantListHead; /* 10 */
PVOID InitialStack; /* 18 */
- ULONG StackLimit; /* 1C */
+ ULONG_PTR StackLimit; /* 1C */
/* Pointer to the thread's environment block in user memory */
PTEB Teb; /* 20 */
/* Thread state (one of THREAD_STATE_xxx constants below) */
UCHAR State; /* 2D */
- UCHAR Alerted[2]; /* 2E */
+ BOOLEAN Alerted[2]; /* 2E */
UCHAR Iopl; /* 30 */
UCHAR NpxState; /* 31 */
- UCHAR Saturation; /* 32 */
+ CHAR Saturation; /* 32 */
CHAR Priority; /* 33 */
KAPC_STATE ApcState; /* 34 */
ULONG ContextSwitches; /* 4C */
- ULONG WaitStatus; /* 50 */
+ LONG WaitStatus; /* 50 */
KIRQL WaitIrql; /* 54 */
- UCHAR WaitMode; /* 55 */
+ CHAR WaitMode; /* 55 */
UCHAR WaitNext; /* 56 */
UCHAR WaitReason; /* 57 */
PKWAIT_BLOCK WaitBlockList; /* 58 */
CHAR BasePriority; /* 68 */
UCHAR DecrementCount; /* 69 */
UCHAR PriorityDecrement; /* 6A */
- UCHAR Quantum; /* 6B */
+ CHAR Quantum; /* 6B */
KWAIT_BLOCK WaitBlock[4]; /* 6C */
PVOID LegoData; /* CC */
- LONG KernelApcDisable; /* D0 */
+ ULONG KernelApcDisable; /* D0 */
KAFFINITY UserAffinity; /* D4 */
UCHAR SystemAffinityActive;/* D8 */
UCHAR PowerState; /* D9 */
UCHAR NpxIrql; /* DA */
- UCHAR Pad; /* DB */
+ UCHAR Pad[1]; /* DB */
SSDT_ENTRY *ServiceTable; /* DC */
PKQUEUE Queue; /* E0 */
KSPIN_LOCK ApcQueueLock; /* E4 */
UCHAR KernelStackResident; /* 11E */
UCHAR NextProcessor; /* 11F */
PVOID CallbackStack; /* 120 */
- BOOL Win32Thread; /* 124 */
- struct _KTRAP_FRAME* TrapFrame; /* 128 */
+ struct _W32THREAD *Win32Thread; /* 124 */
+ struct _KTRAP_FRAME *TrapFrame; /* 128 */
PKAPC_STATE ApcStatePointer[2]; /* 12C */
UCHAR EnableStackSwap; /* 134 */
UCHAR LargeStack; /* 135 */
UCHAR SuspendCount; /* 1AD */
UCHAR IdealProcessor; /* 1AE */
UCHAR DisableBoost; /* 1AF */
-
- /*
- * Below here are thread structure members that are specific to ReactOS
- */
-
- /* Added by Phillip Susi for list of threads in a process */
- LIST_ENTRY ProcessThreadListEntry; /* 1B0 */
} KTHREAD;
#include <poppack.h>
#define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
#define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
+#ifndef __USE_W32API
typedef struct
{
- PACCESS_TOKEN Token; // 0x0
- BOOLEAN CopyOnOpen; // 0x4
- BOOLEAN EffectiveOnly; // 0x5
- UCHAR Pad[2]; // 0x6
- SECURITY_IMPERSONATION_LEVEL Level; // 0x8
-} PS_IMPERSONATION_INFO, *PPS_IMPERSONATION_INFO;
+ PACCESS_TOKEN Token;
+ BOOLEAN CopyOnOpen;
+ BOOLEAN EffectiveOnly;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+} PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION;
+#endif
#include <pshpack1.h>
+/* This needs to be fixed ASAP! */
typedef struct _ETHREAD
{
- KTHREAD Tcb; /* 000 */
- TIME CreateTime; /* 1B0/1B8 */
- union
- {
- TIME ExitTime; /* 1B8/1E4 */
- LIST_ENTRY LpcReplyChain; /* 1B8/1E4 */
- } u1;
- NTSTATUS ExitStatus; /* 1C0/1EC */
- LIST_ENTRY PostBlockList; /* 1C4/1F0 */
- LIST_ENTRY TerminationPortList; /* 1CC/1F8 */
- KSPIN_LOCK ActiveTimerListLock; /* 1D4/200 */
- LIST_ENTRY ActiveTimerListHead; /* 1D8/204 */
- CLIENT_ID Cid; /* 1E0/20C */
- KSEMAPHORE LpcReplySemaphore; /* 1E8/214 */
- PVOID LpcReplyMessage; /* 1FC/228 */
- PLARGE_INTEGER LpcReplyMessageId; /* 200/22C */
- ULONG PerformanceCounterLow; /* 204/230 */
- PPS_IMPERSONATION_INFO ImpersonationInfo; /* 208/234 */
- LIST_ENTRY IrpList; /* 20C/238 */
- PIRP TopLevelIrp; /* 214/240 */
- PDEVICE_OBJECT DeviceToVerify; /* 218/244 */
- ULONG ReadClusterSize; /* 21C/248 */
- UCHAR ForwardClusterOnly; /* 220/24C */
- UCHAR DisablePageFaultClustering; /* 221/24D */
- UCHAR DeadThread; /* 222/24E */
- UCHAR HasTerminated; /* 223/24F */
- PVOID EventPair; /* 224/250 */
- ACCESS_MASK GrantedAccess; /* 228/254 */
- struct _EPROCESS* ThreadsProcess; /* 22C/258 */
- PKSTART_ROUTINE StartAddress; /* 230/25C */
- union
- {
- LPTHREAD_START_ROUTINE Win32StartAddress; /* 234/260 */
- ULONG LpcReceiveMessageId; /* 234/260 */
- } u2;
- UCHAR LpcExitThreadCalled; /* 238/264 */
- UCHAR HardErrorsAreDisabled; /* 239/265 */
- UCHAR LpcReceivedMsgIdValid; /* 23A/266 */
- BOOLEAN ActiveImpersonationInfo; /* 23B/267 */
- ULONG PerformanceCountHigh; /* 23C/268 */
-
- /*
- * Added by David Welch (welch@cwcom.net)
- */
- struct _EPROCESS* OldProcess; /* 240/26C */
-
- struct _W32THREAD* Win32Thread;
-
+ KTHREAD Tcb;
+ union {
+ LARGE_INTEGER CreateTime;
+ UCHAR NestedFaultCount:2;
+ UCHAR ApcNeeded:1;
+ };
+ LARGE_INTEGER ExitTime;
+ LIST_ENTRY LpcReplyChain;
+ NTSTATUS ExitStatus;
+ PVOID OfsChain;
+ LIST_ENTRY PostBlockList;
+ union {
+ struct _TERMINATION_PORT *TerminationPort;
+ struct _ETHREAD* ReaperLink;
+ };
+ KSPIN_LOCK ActiveTimerListLock;
+ LIST_ENTRY ActiveTimerListHead;
+ CLIENT_ID Cid;
+ KSEMAPHORE LpcReplySemaphore;
+ PVOID LpcReplyMessage;
+ ULONG LpcReplyMessageId;
+ ULONG PerformanceCountLow;
+ PPS_IMPERSONATION_INFORMATION ImpersonationInfo;
+ LIST_ENTRY IrpList;
+ PIRP TopLevelIrp;
+ PDEVICE_OBJECT DeviceToVerify;
+ ULONG ReadClusterSize;
+ UCHAR ForwardClusterOnly;
+ UCHAR DisablePageFaultClustering;
+ UCHAR DeadThread;
+ UCHAR HideFromDebugger;
+ ULONG HasTerminated;
+#ifdef _ENABLE_THRDEVTPAIR
+ PVOID EventPair;
+#endif /* _ENABLE_THRDEVTPAIR */
+ ACCESS_MASK GrantedAccess;
+ struct _EPROCESS *ThreadsProcess;
+ PKSTART_ROUTINE StartAddress;
+ LPTHREAD_START_ROUTINE Win32StartAddress;
+ ULONG LpcReceivedMessageId;
+ UCHAR LpcExitThreadCalled;
+ UCHAR HardErrorsAreDisabled;
+ UCHAR LpcReceivedMsgIdValid;
+ UCHAR ActiveImpersonationInfo;
+ ULONG PerformanceCountHigh;
+ LIST_ENTRY ThreadListEntry;
+ BOOLEAN SystemThread;
} ETHREAD;
#include <poppack.h>
typedef struct _KPROCESS *PKPROCESS;
+typedef struct _HARDWARE_PTE_X86 {
+ ULONG Valid : 1;
+ ULONG Write : 1;
+ ULONG Owner : 1;
+ ULONG WriteThrough : 1;
+ ULONG CacheDisable : 1;
+ ULONG Accessed : 1;
+ ULONG Dirty : 1;
+ ULONG LargePage : 1;
+ ULONG Global : 1;
+ ULONG CopyOnWrite : 1;
+ ULONG Prototype : 1;
+ ULONG reserved : 1;
+ ULONG PageFrameNumber : 20;
+} HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
+
+typedef struct _WOW64_PROCESS
+{
+ PVOID Wow64;
+} WOW64_PROCESS, *PWOW64_PROCESS;
+
#endif /* __USE_W32API */
struct _EPROCESS
ULONG LockCount; /* 07C */
/* Time of process creation. */
-#ifdef __USE_W32API
- LARGE_INTEGER CreateTime; /* 080 */
-#else
- TIME CreateTime; /* 080 */
-#endif
+ LARGE_INTEGER CreateTime; /* 080 */
/* Time of process exit. */
- TIME ExitTime; /* 088 */
+ LARGE_INTEGER ExitTime; /* 088 */
/* Unknown. */
- PVOID LockOwner; /* 090 */
+ PKTHREAD LockOwner; /* 090 */
/* Process id. */
- ULONG UniqueProcessId; /* 094 */
+ HANDLE UniqueProcessId; /* 094 */
/* Unknown. */
LIST_ENTRY ActiveProcessLinks; /* 098 */
/* Unknown. */
ULONG PeakVirtualSize; /* 0BC */
/* Unknown. */
LARGE_INTEGER VirtualSize; /* 0C0 */
- struct
- {
- ULONG LastTrimTime;
- ULONG LastTrimFaultCount;
- ULONG PageFaultCount;
- ULONG PeakWorkingSetSize;
- ULONG WorkingSetSize;
- ULONG MinimumWorkingSetSize;
- ULONG MaximumWorkingSetSize;
- ULONG VmWorkingSetList;
- LIST_ENTRY WorkingSetExpansionList;
- UCHAR AllowWorkingSetAdjustment;
- UCHAR AddressSpaceBeingDeleted;
- UCHAR ForegroundPrioritySwitch;
- UCHAR MemoryPriority;
- } Vm;
- PVOID LastProtoPteFault;
- struct _EPORT* DebugPort;
- struct _EPORT* ExceptionPort;
- PVOID ObjectTable;
+
+ MMSUPPORT Vm;
+ LIST_ENTRY SessionProcessLinks;
+ struct _EPORT *DebugPort;
+ struct _EPORT *ExceptionPort;
+ PHANDLE_TABLE ObjectTable;
PVOID Token;
- /* FAST_MUTEX WorkingSetLock; */
- KMUTEX WorkingSetLock;
- PVOID WorkingSetPage;
+ FAST_MUTEX WorkingSetLock;
+ ULONG WorkingSetPage;
UCHAR ProcessOutswapEnabled;
UCHAR ProcessOutswapped;
UCHAR AddressSpaceInitialized;
UCHAR ForkWasSuccessful;
UCHAR MmAgressiveWsTrimMask;
PKEVENT VmOperationEvent;
- PVOID PageDirectoryPte;
+ PVOID PaeTop;
ULONG LastFaultCount;
+ ULONG ModifiedPageCount;
PVOID VadRoot;
PVOID VadHint;
PVOID CloneRoot;
ULONG NumberOfPrivatePages;
ULONG NumberOfLockedPages;
- USHORT NextProcessColour;
+ USHORT NextPageColor;
UCHAR ExitProcessCalled;
UCHAR CreateProcessReported;
HANDLE SectionHandle;
PVOID SectionBaseAddress;
PEPROCESS_QUOTA_BLOCK QuotaBlock;
NTSTATUS LastThreadExitStatus;
- PVOID WorkingSetWatch;
+ PPAGEFAULT_HISTORY WorkingSetWatch;
+ HANDLE Win32WindowStation;
HANDLE InheritedFromUniqueProcessId;
- ACCESS_MASK GrantedAccess;
+ ULONG GrantedAccess;
ULONG DefaultHardErrorProcessing;
PVOID LdtInformation;
- ULONG VadFreeHint;
+ PVOID VadFreeHint;
PVOID VdmObjects;
- KMUTANT ProcessMutant;
+ PVOID DeviceObjects;
+ ULONG SessionId;
+ LIST_ENTRY PhysicalVadList;
+ HARDWARE_PTE_X86 PageDirectoryPte;
+ ULONGLONG Filler;
+ ULONG PaePageDirectoryPage;
CHAR ImageFileName[16];
ULONG VmTrimFaultValue;
UCHAR SetTimerResolution;
UCHAR SubSystemMinorVersion;
UCHAR SubSystemMajorVersion;
USHORT SubSystemVersion;
- struct _W32PROCESS* Win32Process;
- HANDLE Win32WindowStation;
-
- /*
- * Added by David Welch (welch@mcmail.com)
- */
- HANDLE Win32Desktop;
+ struct _W32PROCESS *Win32Process;
+ struct _EJOB *Job;
+ ULONG JobStatus;
+ LIST_ENTRY JobLinks;
+ PVOID LockedPagesList;
+ struct _EPORT *SecurityPort;
+ PWOW64_PROCESS Wow64;
+ LARGE_INTEGER ReadOperationCount;
+ LARGE_INTEGER WriteOperationCount;
+ LARGE_INTEGER OtherOperationCount;
+ LARGE_INTEGER ReadTransferCount;
+ LARGE_INTEGER WriteTransferCount;
+ LARGE_INTEGER OtherTransferCount;
+ ULONG CommitChargeLimit;
+ ULONG CommitChargePeak;
+ LIST_ENTRY ThreadListHead;
+ PRTL_BITMAP VadPhysicalPagesBitMap;
+ ULONG VadPhysicalPages;
+ KSPIN_LOCK AweLock;
+ ULONG Cookie;
+
+ /*
+ * FIXME - ReactOS specified - remove the following fields ASAP!!!
+ */
MADDRESS_SPACE AddressSpace;
- HANDLE_TABLE HandleTable;
LIST_ENTRY ProcessListEntry;
-
- /*
- * Added by Philip Susi for list of threads in process
- */
- LIST_ENTRY ThreadListHead;
-
- /* Added by Alex Ionescu (alex@relsoft.net)*/
- ULONG SessionId;
- struct _EPORT* SecurityPort;
+ PVOID TebBlock;
+ PVOID TebLastAllocated;
};
#define PROCESS_STATE_TERMINATED (1)
VOID PsInitThreadManagment(VOID);
VOID PsInitProcessManagment(VOID);
VOID PsInitIdleThread(VOID);
-VOID PsDispatchThreadNoLock(ULONG NewThreadStatus);
VOID PiTerminateProcessThreads(PEPROCESS Process, NTSTATUS ExitStatus);
+VOID PsTerminateCurrentThread(NTSTATUS ExitStatus);
VOID PsTerminateOtherThread(PETHREAD Thread, NTSTATUS ExitStatus);
VOID PsReleaseThread(PETHREAD Thread);
VOID PsBeginThread(PKSTART_ROUTINE StartRoutine, PVOID StartContext);
VOID PiInitApcManagement(VOID);
VOID STDCALL PiDeleteThread(PVOID ObjectBody);
VOID PsReapThreads(VOID);
+VOID PsInitializeThreadReaper(VOID);
+VOID PsQueueThreadReap(PETHREAD Thread);
NTSTATUS
-PsInitializeThread(HANDLE ProcessHandle,
+PsInitializeThread(PEPROCESS Process,
PETHREAD* ThreadPtr,
- PHANDLE ThreadHandle,
- ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
+ KPROCESSOR_MODE AccessMode,
BOOLEAN First);
-PACCESS_TOKEN PsReferenceEffectiveToken(PETHREAD Thread,
+PACCESS_TOKEN STDCALL PsReferenceEffectiveToken(PETHREAD Thread,
PTOKEN_TYPE TokenType,
PUCHAR b,
PSECURITY_IMPERSONATION_LEVEL Level);
-NTSTATUS PsOpenTokenOfProcess(HANDLE ProcessHandle,
+NTSTATUS STDCALL PsOpenTokenOfProcess(HANDLE ProcessHandle,
PACCESS_TOKEN* Token);
-
+VOID
+STDCALL
+PspTerminateProcessThreads(PEPROCESS Process,
+ NTSTATUS ExitStatus);
NTSTATUS PsSuspendThread(PETHREAD Thread, PULONG PreviousCount);
NTSTATUS PsResumeThread(PETHREAD Thread, PULONG PreviousCount);
-
+NTSTATUS
+STDCALL
+PspAssignPrimaryToken(PEPROCESS Process,
+ HANDLE TokenHandle);
+VOID STDCALL PsExitSpecialApc(PKAPC Apc,
+ PKNORMAL_ROUTINE *NormalRoutine,
+ PVOID *NormalContext,
+ PVOID *SystemArgument1,
+ PVOID *SystemArgument2);
#define THREAD_STATE_INITIALIZED (0)
#define THREAD_STATE_READY (1)
#define PROCESS_PRIO_RT 18
+VOID STDCALL PiDeleteProcess(PVOID ObjectBody);
+
VOID
-KeInitializeThread(PKPROCESS Process, PKTHREAD Thread, BOOLEAN First);
-NTSTATUS KeReleaseThread(PETHREAD Thread);
+STDCALL
+PspReapRoutine(PVOID Context);
-STDCALL
VOID
-KeStackAttachProcess (
- IN PKPROCESS Process,
- OUT PKAPC_STATE ApcState
- );
-
STDCALL
+PspExitThread(NTSTATUS ExitStatus);
+
+extern LIST_ENTRY PspReaperListHead;
+extern WORK_QUEUE_ITEM PspReaperWorkItem;
+extern BOOLEAN PspReaping;
+
VOID
-KeUnstackDetachProcess (
- IN PKAPC_STATE ApcState
- );
+STDCALL
+PspTerminateThreadByPointer(PETHREAD Thread,
+ NTSTATUS ExitStatus);
-VOID STDCALL PiDeleteProcess(PVOID ObjectBody);
-VOID PsReapThreads(VOID);
VOID PsUnfreezeOtherThread(PETHREAD Thread);
VOID PsFreezeOtherThread(PETHREAD Thread);
VOID PsFreezeProcessThreads(PEPROCESS Process);
ULONG PsEnumThreadsByProcess(PEPROCESS Process);
PEPROCESS PsGetNextProcess(PEPROCESS OldProcess);
VOID
-PsBlockThread(PNTSTATUS Status, UCHAR Alertable, ULONG WaitMode,
- BOOLEAN DispatcherLock, KIRQL WaitIrql, UCHAR WaitReason);
-VOID
-PsUnblockThread(PETHREAD Thread, PNTSTATUS WaitStatus);
-VOID
PsApplicationProcessorInit(VOID);
VOID
PsPrepareForApplicationProcessorInit(ULONG Id);
PiSuspendThreadNormalRoutine(PVOID NormalContext,
PVOID SystemArgument1,
PVOID SystemArgument2);
-VOID STDCALL
-PsDispatchThread(ULONG NewThreadStatus);
VOID
PsInitialiseSuspendImplementation(VOID);
+NTSTATUS
+STDCALL
+PspExitProcess(PEPROCESS Process);
-extern ULONG PiNrThreadsAwaitingReaping;
+VOID
+STDCALL
+PspDeleteProcess(PVOID ObjectBody);
+
+VOID
+STDCALL
+PspDeleteThread(PVOID ObjectBody);
+extern LONG PiNrThreadsAwaitingReaping;
NTSTATUS
PsInitWin32Thread (PETHREAD Thread);
STDCALL
PspRunCreateProcessNotifyRoutines(PEPROCESS, BOOLEAN);
+#include <pshpack1.h>
+typedef struct _PS_JOB_TOKEN_FILTER
+{
+ UINT CapturedSidCount;
+ PSID_AND_ATTRIBUTES CapturedSids;
+ UINT CapturedSidsLength;
+ UINT CapturedGroupCount;
+ PSID_AND_ATTRIBUTES CapturedGroups;
+ UINT CapturedGroupsLength;
+ UINT CapturedPrivilegeCount;
+ PLUID_AND_ATTRIBUTES CapturedPrivileges;
+ UINT CapturedPrivilegesLength;
+} PS_JOB_TOKEN_FILTER, *PPS_JOB_TOKEN_FILTER;
+#include <poppack.h>
+
+#include <pshpack1.h>
+typedef struct _EJOB
+{
+ KEVENT Event;
+ LIST_ENTRY JobLinks;
+ LIST_ENTRY ProcessListHead;
+ ERESOURCE JobLock;
+ LARGE_INTEGER TotalUserTime;
+ LARGE_INTEGER TotalKernelTime;
+ LARGE_INTEGER ThisPeriodTotalUserTime;
+ LARGE_INTEGER ThisPeriodTotalKernelTime;
+ UINT TotalPageFaultCount;
+ UINT TotalProcesses;
+ UINT ActiveProcesses;
+ UINT TotalTerminatedProcesses;
+ LARGE_INTEGER PerProcessUserTimeLimit;
+ LARGE_INTEGER PerJobUserTimeLimit;
+ UINT LimitFlags;
+ UINT MinimumWorkingSetSize;
+ UINT MaximumWorkingSetSize;
+ UINT ActiveProcessLimit;
+ UINT Affinity;
+ BYTE PriorityClass;
+ UINT UIRestrictionsClass;
+ UINT SecurityLimitFlags;
+ PVOID Token;
+ PPS_JOB_TOKEN_FILTER Filter;
+ UINT EndOfJobTimeAction;
+ PVOID CompletionPort;
+ PVOID CompletionKey;
+ UINT SessionId;
+ UINT SchedulingClass;
+ ULONGLONG ReadOperationCount;
+ ULONGLONG WriteOperationCount;
+ ULONGLONG OtherOperationCount;
+ ULONGLONG ReadTransferCount;
+ ULONGLONG WriteTransferCount;
+ ULONGLONG OtherTransferCount;
+ IO_COUNTERS IoInfo;
+ UINT ProcessMemoryLimit;
+ UINT JobMemoryLimit;
+ UINT PeakProcessMemoryUsed;
+ UINT PeakJobMemoryUsed;
+ UINT CurrentJobMemoryUsed;
+ FAST_MUTEX MemoryLimitsLock;
+} EJOB;
+#include <poppack.h>
+
+VOID INIT_FUNCTION PsInitJobManagment(VOID);
+
+/* CLIENT ID */
+
+NTSTATUS PsCreateCidHandle(PVOID Object, POBJECT_TYPE ObjectType, PHANDLE Handle);
+NTSTATUS PsDeleteCidHandle(HANDLE CidHandle, POBJECT_TYPE ObjectType);
+PHANDLE_TABLE_ENTRY PsLookupCidHandle(HANDLE CidHandle, POBJECT_TYPE ObjectType, PVOID *Object);
+VOID PsUnlockCidHandle(PHANDLE_TABLE_ENTRY CidEntry);
+NTSTATUS PsLockProcess(PEPROCESS Process, BOOLEAN Timeout);
+VOID PsUnlockProcess(PEPROCESS Process);
+
+#define ETHREAD_TO_KTHREAD(pEThread) (&(pEThread)->Tcb)
+#define KTHREAD_TO_ETHREAD(pKThread) (CONTAINING_RECORD((pKThread), ETHREAD, Tcb))
+#define EPROCESS_TO_KPROCESS(pEProcess) (&(pEProcess)->Pcb)
+#define KPROCESS_TO_EPROCESS(pKProcess) (CONTAINING_RECORD((pKProcess), EPROCESS, Pcb))
+
#endif /* ASSEMBLER */
#endif /* __INCLUDE_INTERNAL_PS_H */