197 lines
3.9 KiB
C
197 lines
3.9 KiB
C
/*++ BUILD Version: 0009 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 1989 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ps.h
|
|
|
|
Abstract:
|
|
|
|
This module contains the process structure public data structures and
|
|
procedure prototypes to be used within the NT system.
|
|
|
|
Author:
|
|
|
|
Mark Lucovsky 16-Feb-1989
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _PS_
|
|
#define _PS_
|
|
|
|
//
|
|
// Specifies the base address of XBOXKRNL.EXE.
|
|
//
|
|
|
|
#define PsNtosImageBase ((PVOID)0x80010000)
|
|
|
|
//
|
|
// Thread Object
|
|
//
|
|
// Thread object body. A pointer to this structure is returned when a handle
|
|
// to a thread object is referenced. This structure contains a thread control
|
|
// block (TCB) which is the kernel's representation of a thread.
|
|
//
|
|
// If you remove a field from this structure, please also
|
|
// remove the reference to it from within the kernel debugger
|
|
// (nt\private\sdktools\ntsd\ntkext.c)
|
|
//
|
|
|
|
typedef struct _ETHREAD {
|
|
KTHREAD Tcb;
|
|
LARGE_INTEGER CreateTime;
|
|
LARGE_INTEGER ExitTime;
|
|
|
|
union {
|
|
NTSTATUS ExitStatus;
|
|
PVOID OfsChain; // needed for the nt build of the C runtime
|
|
};
|
|
union {
|
|
LIST_ENTRY ReaperListEntry;
|
|
LIST_ENTRY ActiveTimerListHead;
|
|
};
|
|
HANDLE UniqueThread;
|
|
PVOID StartAddress;
|
|
|
|
//
|
|
// Io
|
|
//
|
|
|
|
LIST_ENTRY IrpList;
|
|
|
|
#ifdef DEVKIT
|
|
//
|
|
// Dm
|
|
//
|
|
// keep this at the end so kd exts don't get confused
|
|
//
|
|
|
|
PVOID DebugData;
|
|
#endif
|
|
} ETHREAD, *PETHREAD;
|
|
|
|
//
|
|
// Global Variables
|
|
//
|
|
|
|
extern LIST_ENTRY PsReaperListHead;
|
|
extern KDPC PsReaperDpc;
|
|
|
|
BOOLEAN
|
|
PsInitSystem (
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Get Gurrent Prototypes
|
|
//
|
|
|
|
#define THREAD_TO_PROCESS(thread) ((thread)->Tcb.ApcState.Process)
|
|
|
|
#define PsGetCurrentProcess() (KeGetCurrentThread()->ApcState.Process)
|
|
|
|
#define PsGetCurrentThread() (CONTAINING_RECORD((KeGetCurrentThread()),ETHREAD,Tcb))
|
|
|
|
#define PsGetCurrentThreadId() (PsGetCurrentThread()->UniqueThread)
|
|
|
|
// begin_ntddk begin_wdm
|
|
//
|
|
// System Thread and Process Creation and Termination
|
|
//
|
|
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
PsCreateSystemThread(
|
|
OUT PHANDLE ThreadHandle,
|
|
OUT PHANDLE ThreadId OPTIONAL,
|
|
IN PKSTART_ROUTINE StartRoutine,
|
|
IN PVOID StartContext,
|
|
IN BOOLEAN DebuggerThread
|
|
);
|
|
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
PsCreateSystemThreadEx(
|
|
OUT PHANDLE ThreadHandle,
|
|
IN SIZE_T ThreadExtensionSize,
|
|
IN SIZE_T KernelStackSize,
|
|
IN SIZE_T TlsDataSize,
|
|
OUT PHANDLE ThreadId OPTIONAL,
|
|
IN PKSTART_ROUTINE StartRoutine,
|
|
IN PVOID StartContext,
|
|
IN BOOLEAN CreateSuspended,
|
|
IN BOOLEAN DebuggerThread,
|
|
IN PKSYSTEM_ROUTINE SystemRoutine OPTIONAL
|
|
);
|
|
|
|
DECLSPEC_NORETURN
|
|
NTKERNELAPI
|
|
VOID
|
|
PsTerminateSystemThread(
|
|
IN NTSTATUS ExitStatus
|
|
);
|
|
|
|
// end_ntddk end_wdm
|
|
|
|
// begin_ntddk
|
|
|
|
typedef
|
|
VOID
|
|
(*PCREATE_THREAD_NOTIFY_ROUTINE)(
|
|
IN PETHREAD Thread,
|
|
IN HANDLE ThreadId,
|
|
IN BOOLEAN Create
|
|
);
|
|
|
|
NTSTATUS
|
|
PsSetCreateThreadNotifyRoutine(
|
|
IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
|
|
);
|
|
|
|
// end_ntddk
|
|
|
|
//
|
|
// BOOLEAN
|
|
// PsIsThreadTerminating(
|
|
// IN PETHREAD Thread
|
|
// )
|
|
//
|
|
// Returns TRUE if thread is in the process of terminating.
|
|
//
|
|
|
|
#define PsIsThreadTerminating(T) \
|
|
(T)->Tcb.HasTerminated
|
|
|
|
//
|
|
// Cid
|
|
//
|
|
|
|
#if !defined(_NTSYSTEM_)
|
|
#define PsLookupThreadByThreadId(ThreadId, Thread) \
|
|
ObReferenceObjectByHandle(ThreadId, PsThreadObjectType, Thread);
|
|
#else
|
|
#define PsLookupThreadByThreadId(ThreadId, Thread) \
|
|
ObReferenceObjectByHandle(ThreadId, &PsThreadObjectType, Thread);
|
|
#endif
|
|
|
|
//
|
|
// Process statistics.
|
|
//
|
|
|
|
typedef struct _PS_STATISTICS {
|
|
ULONG Length;
|
|
ULONG ThreadCount;
|
|
ULONG HandleCount;
|
|
} PS_STATISTICS, *PPS_STATISTICS;
|
|
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
PsQueryStatistics(
|
|
IN OUT PPS_STATISTICS ProcessStatistics
|
|
);
|
|
|
|
#endif // _PS_
|