Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+----------------------------------------------------------------------------
//
// File: watchprocess.h
//
// Module: CMMON32.EXE
//
// Synopsis: Header and Implementation for the CWatchProcessList class.
//
// Copyright (c) 1998 Microsoft Corporation
//
// Author: quintinb Created Header 08/16/99
//
//+----------------------------------------------------------------------------
#include "ArrayPtr.h"
//+---------------------------------------------------------------------------
//
// class CWatchProcessList
//
// Description: Manage to list of process handle.
// Tell whether all the processes are terminated
//
// History: fengsun Created 10/30/97
//
//----------------------------------------------------------------------------
class CWatchProcessList { public: CWatchProcessList(); ~CWatchProcessList();
BOOL IsIdle(); void Add(HANDLE hProcess); void SetNotIdle() {m_fProcessAdded = FALSE;}; DWORD GetSize() const {return m_ProcessArray.GetSize();} HANDLE GetProcess(int i) {return m_ProcessArray[i];}
protected:
// an array of process handle
CPtrArray m_ProcessArray; BOOL m_fProcessAdded; };
inline CWatchProcessList::CWatchProcessList() { m_fProcessAdded = FALSE; }
inline CWatchProcessList::~CWatchProcessList() { for (int i=m_ProcessArray.GetSize()-1; i>=0; i--) { CloseHandle((HANDLE)m_ProcessArray[i]); } }
inline BOOL CWatchProcessList::IsIdle() { if (!m_fProcessAdded) { return FALSE; } for (int i=m_ProcessArray.GetSize()-1; i>=0; i--) { DWORD dwExitCode;
BOOL bRes = GetExitCodeProcess((HANDLE)m_ProcessArray[i],&dwExitCode);
if (!bRes || (dwExitCode != STILL_ACTIVE)) { CloseHandle((HANDLE)m_ProcessArray[i]); m_ProcessArray.RemoveAt(i); } }
return m_ProcessArray.GetSize() == 0; } inline void CWatchProcessList::Add(HANDLE hProcess) { //
// CMDIAL calls DuplicateHandle to get the hProcess
// CmMon is responsible to close the handle
//
MYDBGASSERT(hProcess);
//
// It is possible the auto application exited before this function is called
//
m_fProcessAdded = TRUE; if (hProcess) { m_ProcessArray.Add(hProcess); }
}
|