reactos/sdk/lib/drivers/wdf/shared/inc/private/common/ifxhascallbacks.hpp
Victor Perevertkin 8a978a179f
[WDF] Add Windows Driver Framework files
Takern from Microsoft GitHub repo:
d9c6040fe9

Licensed under MIT
2020-11-03 00:06:26 +03:00

88 lines
2.2 KiB
C++

/*++
Copyright (c) Microsoft. All rights reserved.
Module Name:
IFxHasCallbacks.hpp
Abstract:
Interface that objects with device driver callbacks and
constraints implement
Author:
Environment:
Both kernel and user mode
Revision History:
--*/
#ifndef __IFX_HASCALLBACKS_HPP
#define __IFX_HASCALLBACKS_HPP
//
// Objects that have callbacks into the device driver
// (implemented by deriving a delegate from FxCallback), may
// have constraints specified by the device driver when the object
// or driver was created.
//
// These constraints control synchronization, and execution (IRQL) level
// on callbacks to the device driver.
//
// To provide synchronization an FxCallbackLock may be implemented, at
// either DISPATCH (spinlock) or PASSIVE (mutex lock) level depending
// on whether a passive level constraint is in effect.
//
// This interface allows the constraints, and any associated locks
// to be retrieved in a generic fashion from the object, such as
// for implementing the WdfObjectAcquireLock/WdfObjectReleaseLock APIs.
//
class IFxHasCallbacks {
public:
//
// Returns the constraints in effect for the object.
//
virtual
VOID
GetConstraints(
__out WDF_EXECUTION_LEVEL* ExecutionLevel,
__out WDF_SYNCHRONIZATION_SCOPE* SynchronizationScope
) = 0;
//
// This returns the callback lock in effect for the object that
// will serialize with its event callbacks to the device driver.
//
// If no callback locks are in effect, the return value is NULL.
//
// The type of FxCallbackLock returned may be a spinlock, or mutex
// type depending on whether the object has a passive level callback
// constraint in effect.
//
// In addition, optionally returns the object that contains the lock
// providing any serialization constraint. This allows reference counting
// the object who owns the lock, which may not be the target
// object. An example would be a child object sharing its parent
// FxDevice's synchronziation lock.
//
_Must_inspect_result_
virtual
FxCallbackLock*
GetCallbackLockPtr(
__out_opt FxObject** LockObject
) = 0;
};
#endif // __IFX_HASCALLBACKS_HPP