239 lines
9.4 KiB
C++
239 lines
9.4 KiB
C++
// --------------------------------------------------------------------------
|
|
// 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_ */
|
|
|