|
|
//----------------------------------------------------------------------------
//
// Process and thread routines.
//
// Copyright (C) Microsoft Corporation, 1997-2000.
//
//----------------------------------------------------------------------------
#ifndef _PROCTHRD_H_
#define _PROCTHRD_H_
#define ANY_PROCESSES() \
(g_ProcessHead != NULL || g_ProcessPending != NULL)
#define SYSTEM_PROCESSES() \
(((g_AllProcessFlags | g_AllPendingFlags) & ENG_PROC_SYSTEM) != 0)
extern ULONG g_NextProcessUserId; extern ULONG g_AllProcessFlags; extern ULONG g_NumberProcesses; extern ULONG g_TotalNumberThreads; extern ULONG g_MaxThreadsInProcess; extern PTHREAD_INFO g_RegContextThread; extern ULONG g_RegContextProcessor; extern ULONG g_AllPendingFlags;
PPROCESS_INFO FindProcessByUserId(ULONG Id); PTHREAD_INFO FindThreadByUserId(PPROCESS_INFO Process, ULONG Id);
PPROCESS_INFO FindProcessBySystemId(ULONG Id); PTHREAD_INFO FindThreadBySystemId(PPROCESS_INFO Process, ULONG Id);
PPROCESS_INFO FindProcessByHandle(ULONG64 Handle); PTHREAD_INFO FindThreadByHandle(PPROCESS_INFO Process, ULONG64 Handle);
PPROCESS_INFO AddProcess( ULONG SystemId, ULONG64 Handle, ULONG InitialThreadSystemId, ULONG64 InitialThreadHandle, ULONG64 InitialThreadDataOffset, ULONG64 StartOffset, ULONG Flags, ULONG Options, ULONG InitialThreadFlags ); PTHREAD_INFO AddThread( PPROCESS_INFO Process, ULONG SystemId, ULONG64 Handle, ULONG64 DataOffset, ULONG64 StartOffset, ULONG Flags ); void RemoveAndDeleteProcess(PPROCESS_INFO Process, PPROCESS_INFO Prev); BOOL DeleteExitedInfos(void);
void OutputProcessInfo(PSTR Title);
void ChangeRegContext(PTHREAD_INFO Thread); void FlushRegContext(void);
void SetCurrentThread(PTHREAD_INFO Thread, BOOL Hidden); void SetCurrentProcessorThread(ULONG Processor, BOOL Hidden); void SaveSetCurrentProcessorThread(ULONG Processor); void RestoreCurrentProcessorThread(void);
void SuspendAllThreads(void); BOOL ResumeAllThreads(void);
void SuspendResumeThreads(PPROCESS_INFO Process, BOOL Susp, PTHREAD_INFO Match);
#define SPT_DEFAULT_OCI_FLAGS \
(OCI_SYMBOL | OCI_DISASM | OCI_FORCE_EA | OCI_ALLOW_SOURCE | \ OCI_ALLOW_REG) void SetPromptThread(PTHREAD_INFO pThread, ULONG uOciFlags);
void fnOutputProcessInfo(PPROCESS_INFO); void fnOutputThreadInfo(PTHREAD_INFO);
void parseThreadCmds(DebugClient* Client); void parseProcessCmds(void);
void AddPendingProcess(PPENDING_PROCESS Pending); void RemovePendingProcess(PPENDING_PROCESS Pending); void DiscardPendingProcess(PPENDING_PROCESS Pending); void DiscardPendingProcesses(void); PPENDING_PROCESS FindPendingProcessByFlags(ULONG Flags); PPENDING_PROCESS FindPendingProcessById(ULONG Id); void VerifyPendingProcesses(void); void AddExamineToPendingAttach(void);
HRESULT StartAttachProcess(ULONG ProcessId, ULONG AttachFlags, PPENDING_PROCESS* Pending); HRESULT StartCreateProcess(PSTR CommandLine, ULONG CreateFlags, PPENDING_PROCESS* Pending); HRESULT TerminateProcess(PPROCESS_INFO Process); HRESULT TerminateProcesses(void); HRESULT DetachProcess(PPROCESS_INFO Process); HRESULT DetachProcesses(void); HRESULT AbandonProcess(PPROCESS_INFO Process);
enum { SEP_TERMINATE, SEP_DETACH, SEP_ABANDON, };
HRESULT SeparateCurrentProcess(ULONG Mode, PSTR Description);
#endif // #ifndef _PROCTHRD_H_
|