mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 10:14:44 +00:00
137 lines
2 KiB
C++
137 lines
2 KiB
C++
![]() |
/*++
|
||
|
|
||
|
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_
|