mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 10:14:44 +00:00
89 lines
2.2 KiB
C++
89 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
|
||
|
|
||
|
|