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.
|
|
// --------------------------------------------------------------------------
// Module Name: KernelResources.h
//
// Copyright (c) 1999-2000, Microsoft Corporation
//
// General class definitions that assist in resource management. These are
// typically stack based objects where constructors initialize to a known
// state. Member functions operate on that resource. Destructors release
// resources when the object goes out of scope.
//
// History: 1999-08-18 vtan created
// 1999-11-16 vtan separate file
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
#ifndef _KernelResources_
#define _KernelResources_
// --------------------------------------------------------------------------
// CHandle
//
// Purpose: This class manages any generic HANDLE to an object.
//
// History: 1999-08-18 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CHandle { private: CHandle (void); CHandle (const CHandle& copyObject); bool operator == (const CHandle& compareObject) const; const CHandle& operator = (const CHandle& assignObject); public: CHandle (HANDLE handle); ~CHandle (void);
operator HANDLE (void) const; private: HANDLE _handle; };
// --------------------------------------------------------------------------
// CEvent
//
// Purpose: This class manages a named or un-named event object. Using
// the default constructor will not create an event.
//
// History: 1999-08-18 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CEvent { private: bool operator == (const CEvent& compareObject) const; public: CEvent (void); CEvent (const CEvent& copyObject); CEvent (const TCHAR *pszName); ~CEvent (void);
const CEvent& operator = (const CEvent& assignObject); operator HANDLE (void) const;
NTSTATUS Open (const TCHAR *pszName, DWORD dwAccess); NTSTATUS Create (const TCHAR *pszName = NULL); NTSTATUS Set (void) const; NTSTATUS Reset (void) const; NTSTATUS Pulse (void) const; NTSTATUS Wait (DWORD dwMilliseconds, DWORD *pdwWaitResult) const; NTSTATUS WaitWithMessages (DWORD dwMilliseconds, DWORD *pdwWaitResult) const; bool IsSignaled (void) const; private: NTSTATUS Close (void); private: HANDLE _hEvent; };
// --------------------------------------------------------------------------
// CJob
//
// Purpose: This class manages a named or un-named job object. It hides
// Win32 APIs to manipulate the state of the job object.
//
// History: 1999-10-07 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CJob { private: CJob (const CJob& copyObject); bool operator == (const CJob& compareObject) const; const CJob& operator = (const CJob& assignObject); public: CJob (const TCHAR *pszName = NULL); ~CJob (void);
NTSTATUS AddProcess (HANDLE hProcess) const; NTSTATUS SetCompletionPort (HANDLE hCompletionPort) const; NTSTATUS SetActiveProcessLimit (DWORD dwActiveProcessLimit) const; NTSTATUS SetPriorityClass (DWORD dwPriorityClass) const; NTSTATUS RestrictAccessUIAll (void) const; private: HANDLE _hJob; };
// --------------------------------------------------------------------------
// CMutex
//
// Purpose: This class implements a mutex object management. It's not a
// static class but each class that uses this class should
// declare the member variable as static as only one mutex is
// required to protect a shared resource.
//
// History: 1999-10-13 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CMutex { public: NTSTATUS Initialize (const TCHAR *pszMutexName); NTSTATUS Terminate (void);
void Acquire (void); void Release (void); private: HANDLE _hMutex; };
// --------------------------------------------------------------------------
// CCriticalSection
//
// Purpose: This class implements a critical section object management.
//
// History: 1999-11-06 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CCriticalSection { public: CCriticalSection (void); ~CCriticalSection (void);
void Acquire (void); void Release (void); NTSTATUS Status (void) const; bool IsOwned (void) const; private: NTSTATUS _status; CRITICAL_SECTION _criticalSection; };
// --------------------------------------------------------------------------
// CModule
//
// Purpose: This class manages a loading an unloading of a dynamic link
// library. The scope of the object determines how long the
// library remains loaded.
//
// History: 1999-08-18 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CModule { private: CModule (void); CModule (const CModule& copyObject); bool operator == (const CModule& compareObject) const; const CModule& operator = (const CModule& assignObject); public: CModule (const TCHAR *pszModuleName); ~CModule (void);
operator HMODULE (void) const;
void* GetProcAddress (LPCSTR pszProcName) const; private: HMODULE _hModule; };
// --------------------------------------------------------------------------
// CFile
//
// Purpose: This class manages a HANDLE to a file object. It is specific
// for files and should not be abused.
//
// History: 1999-08-18 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CFile { private: CFile (const CFile& copyObject); bool operator == (const CFile& compareObject) const; const CFile& operator = (const CFile& assignObject); public: CFile (void); ~CFile (void);
LONG Open (const TCHAR *pszFilepath, DWORD dwDesiredAccess, DWORD dwShareMode); LONG GetSize (DWORD& dwLowSize, DWORD *pdwHighSize) const; LONG Read (void *pvBuffer, DWORD dwBytesToRead, DWORD *pdwBytesRead) const; private: HANDLE _hFile; };
// --------------------------------------------------------------------------
// CDesktop
//
// Purpose: This class manages an HDESK object.
//
// History: 2001-02-06 vtan created
// --------------------------------------------------------------------------
class CDesktop { public: CDesktop (void); ~CDesktop (void);
NTSTATUS Set (const TCHAR *pszName); NTSTATUS SetInput (void); private: NTSTATUS Set (void); private: HDESK _hDeskCurrent; HDESK _hDesk; };
#endif /* _KernelResources_ */
|