reactos/sdk/lib/drivers/wdf/shared/inc/private/common/fxwmiprovider.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

295 lines
5.1 KiB
C++

/*++
Copyright (c) Microsoft Corporation
Module Name:
FxWmiDataBlock.hpp
Abstract:
This module implements the WMI data block object
Author:
Environment:
Both kernel and user mode
Revision History:
--*/
#ifndef _FXWMIPROVIDER_H_
#define _FXWMIPROVIDER_H_
struct FxWmiProviderFunctionControlCallback : public FxCallback {
PFN_WDF_WMI_PROVIDER_FUNCTION_CONTROL m_Method;
FxWmiProviderFunctionControlCallback(
PFX_DRIVER_GLOBALS FxDriverGlobals
) :
FxCallback(FxDriverGlobals),
m_Method(NULL)
{
}
~FxWmiProviderFunctionControlCallback()
{
}
_Must_inspect_result_
NTSTATUS
Invoke(
__in WDFDEVICE Device,
__in WDFWMIPROVIDER WmiProvider,
__in WDF_WMI_PROVIDER_CONTROL Control,
__in BOOLEAN Enable
)
{
NTSTATUS status;
UNREFERENCED_PARAMETER(Device);
if (m_Method != NULL) {
CallbackStart();
status = m_Method(WmiProvider, Control, Enable);
CallbackEnd();
}
else {
status = STATUS_SUCCESS;
}
return status;
}
};
class FxWmiProvider : public FxNonPagedObject {
friend FxWmiIrpHandler;
public:
FxWmiProvider(
__in PFX_DRIVER_GLOBALS FxDriverGlobals,
__in PWDF_WMI_PROVIDER_CONFIG Config,
__in CfxDevice* Device
);
~FxWmiProvider();
static
_Must_inspect_result_
NTSTATUS
_Create(
__in PFX_DRIVER_GLOBALS CallersGlobals,
__in WDFDEVICE Device,
__in_opt PWDF_OBJECT_ATTRIBUTES ProviderAttributes,
__in PWDF_WMI_PROVIDER_CONFIG WmiProviderConfig,
__out WDFWMIPROVIDER* WmiProvider,
__out FxWmiProvider** Provider
);
CfxDevice*
GetDevice(
VOID
)
{
return m_Parent->GetDevice();
}
GUID*
GetGUID(
VOID
)
{
return &m_Guid;
}
ULONG
GetFlags(
VOID
)
{
return m_Flags;
}
ULONG
GetMinInstanceBufferSize(
VOID
)
{
return m_MinInstanceBufferSize;
}
ULONG
GetRegistrationFlagsLocked(
VOID
);
BOOLEAN
IsEventOnly(
VOID
)
{
return FLAG_TO_BOOL(m_Flags, WdfWmiProviderEventOnly);
}
BOOLEAN
IsEnabled(
__in WDF_WMI_PROVIDER_CONTROL Control
)
{
switch (Control) {
case WdfWmiEventControl: return m_EventControlEnabled;
case WdfWmiInstanceControl: return m_DataBlockControlEnabled;
default: ASSERT(FALSE); return FALSE;
}
}
ULONGLONG
GetTracingHandle(
VOID
)
{
return m_TracingHandle;
}
VOID
SetTracingHandle(
__in ULONGLONG TracingHandle
)
{
m_TracingHandle = TracingHandle;
}
WDFWMIPROVIDER
GetHandle(
VOID
)
{
return (WDFWMIPROVIDER) GetObjectHandle();
}
BOOLEAN
IsFunctionControlSupported(
VOID
)
{
return m_FunctionControl.m_Method != NULL;
}
_Must_inspect_result_
NTSTATUS
FunctionControl(
__in WDF_WMI_PROVIDER_CONTROL Control,
__in BOOLEAN Enable
);
_Must_inspect_result_
NTSTATUS
AddInstance(
__in FxWmiInstance* Instance,
__in BOOLEAN NoErrorIfPresent = FALSE
);
VOID
RemoveInstance(
__in FxWmiInstance* Instance
);
ULONG
GetInstanceIndex(
__in FxWmiInstance* Instance
);
_Must_inspect_result_
FxWmiInstance*
GetInstanceReferenced(
__in ULONG Index,
__in PVOID Tag
);
_Must_inspect_result_
FxWmiInstance*
GetInstanceReferencedLocked(
__in ULONG Index,
__in PVOID Tag
);
// begin FxObject overrides
virtual
BOOLEAN
Dispose(
VOID
);
// end FxObject overrides
protected:
enum AddInstanceAction {
AddInstanceToTail,
AddInstanceToHead
};
_Must_inspect_result_
NTSTATUS
AddInstanceLocked(
__in FxWmiInstance* Instance,
__in BOOLEAN NoErrorIfPresent,
__out PBOOLEAN Update,
__in AddInstanceAction Action = AddInstanceToTail
);
protected:
//
// List entry used by FxWmiIrpHandler to hold the list of WMI providers
//
LIST_ENTRY m_ListEntry;
LIST_ENTRY m_InstanceListHead;
ULONG m_NumInstances;
FxWmiIrpHandler* m_Parent;
GUID m_Guid;
ULONGLONG m_TracingHandle;
ULONG m_MinInstanceBufferSize;
union {
//
// Set with values from WDF_WMI_PROVIDER_FLAGS
//
ULONG m_Flags;
//
// Not used by the code, but by the debug extension
//
struct {
ULONG EventOnly : 1;
ULONG Expensive : 1;
ULONG Tracing : 1;
} m_FlagsByName;
};
FxWmiProviderFunctionControlCallback m_FunctionControl;
BOOLEAN m_EventControlEnabled;
BOOLEAN m_DataBlockControlEnabled;
BOOLEAN m_RemoveGuid;
};
#endif // _FXWMIPROVIDER_H_