/*++ Copyright (c) Microsoft Corporation Module Name: FxCallback.hpp Abstract: This represents a delegate object base class for calling back into the driver. Author: Revision History: --*/ #ifndef _FXCALLBACK_H_ #define _FXCALLBACK_H_ extern "C" { #if defined(EVENT_TRACING) #include "FxCallback.hpp.tmh" #endif } class FxCallback { public: FxCallback( __in_opt PFX_DRIVER_GLOBALS FxDriverGlobals = NULL ) { UNREFERENCED_PARAMETER(FxDriverGlobals); } PVOID operator new( __in size_t Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals, __in POOL_TYPE PoolType = NonPagedPool ) { return FxPoolAllocate(FxDriverGlobals, PoolType, Size); } VOID operator delete( __in PVOID pointer ) { FxPoolFree(pointer); } protected: void __inline CallbackStart( VOID ) { // intentionally does nothing, visual place marker only for now DO_NOTHING(); } void __inline CallbackEnd( VOID ) { // intentionally does nothing, visual place marker only for now DO_NOTHING(); } }; class FxLockedCallback { private: FxCallbackLock* m_CallbackLock; public: FxLockedCallback( VOID ) { m_CallbackLock = NULL; } FxCallbackLock* GetCallbackLockPtr( VOID ) { return m_CallbackLock; } void SetCallbackLockPtr( FxCallbackLock* Lock ) { m_CallbackLock = Lock; } protected: __inline void CallbackStart( __out PKIRQL PreviousIrql ) { if (m_CallbackLock != NULL) { m_CallbackLock->Lock(PreviousIrql); } } __inline void CallbackEnd( __in KIRQL PreviousIrql ) { if (m_CallbackLock != NULL) { m_CallbackLock->Unlock(PreviousIrql); } } }; #endif // _FXCALLBACK_H_