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