windows-nt/Source/XPSP1/NT/shell/lib/generic/kernelresources.h
2020-09-26 16:20:57 +08:00

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_ */