#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