Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

198 lines
4.2 KiB

#ifndef _DRVCLASS_H
#define _DRVCLASS_H
/*
* title: drvclass.h
*
* purpose: header for wdm kernel device support class
*
*/
#define FALSE 0
#define BOOL BOOLEAN
#define BYTE unsigned char
#define PBYTE unsigned char *
//
// CPacket
//
// A ringbuffer "node" class
//
class CPacket
{
// Methods
public:
USHORT& Function() { return m_Function; }
USHORT& Socket() { return m_Socket; }
// Instance variables
private:
USHORT m_Function;
USHORT m_Socket;
};
//
// CRingBuffer
//
// A ringbuffer class
//
class CRingBuffer
{
// Construction
public:
CRingBuffer( ULONG dwSize = 32, POOL_TYPE PoolType = PagedPool );
~CRingBuffer();
// Methods
public:
void Insert( CPacket& APacket );
BOOL Remove( CPacket* APacket );
BOOL IsEmpty();
BOOL IsValid() const { return ( m_pBuffer && m_pListMutex ); }
// Restricted Access Methods
protected:
void Lock();
void Unlock();
// Instance Variables
private:
ULONG m_Producer;
ULONG m_Consumer;
CPacket* m_pBuffer;
PKMUTEX m_pListMutex;
ULONG m_dwSize;
};
//
// CUString
//
// A class that encapsulates the functionality of
// unicode strings.
//
// Revised on 03-May-96 - JohnT
//
#define OK_ALLOCATED(obj) \
((obj!=(void *)0) && NT_SUCCESS((obj)->m_status))
void * __cdecl operator new(size_t nSize, POOL_TYPE iType, ULONG iPoolTag);
void __cdecl operator delete(void* p);
class CUString
{
// Construction
public:
// new CUString()
CUString();
// new CUString( ExistingCUString )
CUString( CUString * );
// new CUString( ExistingUnicodeString )
CUString( UNICODE_STRING *);
// new CUString( L"String" );
CUString( PWCHAR );
// new CUString( nNewLength );
CUString( int );
// new CUString( 105, 10 );
CUString( int, int );
// Standard destructor
~CUString();
// Methods
public:
// String appending. Argument is appended to object
void Append( CUString * );
void Append( UNICODE_STRING* );
void CopyTo( CUString* pTarget );
BOOL operator == ( CUString& );
void operator = ( CUString );
int GetLength() const { return m_String.Length; }
PWCHAR GetString() { return m_String.Buffer; }
void SetLength( USHORT i ) { m_String.Length = i; }
NTSTATUS ToCString( char** );
static ULONG Length( PWCHAR );
void Dump();
// Class Methods
protected:
void NullTerminate()
{ m_String.Buffer[ m_String.Length / sizeof( WCHAR ) ] = ( WCHAR )NULL; }
void ZeroBuffer()
{ ASSERT( m_String.Buffer ); RtlZeroMemory( m_String.Buffer, m_String.MaximumLength ); }
// Enums
public:
enum
{
TYPE_SYSTEM_ALLOCATED = 0,
TYPE_CLASS_ALLOCATED,
};
// Instance Variables
public:
UNICODE_STRING m_String;
NTSTATUS m_status;
unsigned char m_bType;
};
class CRegistry
{
private: PRTL_QUERY_REGISTRY_TABLE m_pTable;
public: NTSTATUS m_status;
signed long m_lDisposition;
public: CRegistry(int iSize);
~CRegistry();
BOOL QueryDirect(CUString *location,CUString *key, void **pReceiveBuffer, ULONG uType);
BOOL QueryWithCallback(PRTL_QUERY_REGISTRY_ROUTINE callback,ULONG RelativeTo,PWSTR Path,PVOID Context, PVOID Environment);
BOOL WriteString(ULONG relativeTo, CUString *pBuffer, CUString *pPath, CUString *pKey);
BOOL WriteDWord(ULONG relativeTo, void *pBuffer,CUString *pPath,CUString *pKey);
NTSTATUS zwCreateKey(HANDLE * pKeyHandle,HANDLE root,ACCESS_MASK DesiredAccess,CUString * pPath,ULONG CreateOptions);
NTSTATUS zwOpenKey(HANDLE * pKeyHandle, HANDLE root, ACCESS_MASK DesiredAccess,CUString * pPath);
BOOL zwCloseKey(HANDLE KeyHandle);
NTSTATUS zwWriteValue(HANDLE hTheKey,CUString * ValueName,ULONG lType,PVOID pData,ULONG lSize);
NTSTATUS CheckKey(ULONG RelativePath,PUNICODE_STRING path);
};
class CErrorLogEntry
{
private: PIO_ERROR_LOG_PACKET m_pPacket;
public: CErrorLogEntry(PVOID,ULONG,USHORT,ULONG,NTSTATUS,ULONG *,UCHAR);
~CErrorLogEntry();
};
#endif //drvclass.h