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.4 KiB
198 lines
4.4 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
|