mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 18:24:02 +00:00
138 lines
2.5 KiB
C++
138 lines
2.5 KiB
C++
![]() |
/*++
|
||
|
|
||
|
Copyright (c) Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
FxQueryInterface.hpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module implements the "query" interface object.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
Both kernel and user mode
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _FXQUERYINTERFACE_H_
|
||
|
#define _FXQUERYINTERFACE_H_
|
||
|
|
||
|
class FxDeviceProcessQueryInterfaceRequest : public FxCallback {
|
||
|
|
||
|
public:
|
||
|
|
||
|
FxDeviceProcessQueryInterfaceRequest(
|
||
|
VOID
|
||
|
) :
|
||
|
m_Method(NULL)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
_Must_inspect_result_
|
||
|
NTSTATUS
|
||
|
Invoke(
|
||
|
__in WDFDEVICE Device,
|
||
|
__in LPGUID InterfacType,
|
||
|
__out PINTERFACE ExposedInterface,
|
||
|
__in_opt PVOID ExposedInterfaceSpecificData
|
||
|
)
|
||
|
{
|
||
|
if (m_Method != NULL) {
|
||
|
NTSTATUS status;
|
||
|
|
||
|
CallbackStart();
|
||
|
status = m_Method(Device,
|
||
|
InterfacType,
|
||
|
ExposedInterface,
|
||
|
ExposedInterfaceSpecificData);
|
||
|
CallbackEnd();
|
||
|
|
||
|
return status;
|
||
|
}
|
||
|
else {
|
||
|
return STATUS_SUCCESS;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public:
|
||
|
PFN_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST m_Method;
|
||
|
};
|
||
|
|
||
|
struct FxQueryInterface : public FxStump {
|
||
|
|
||
|
public:
|
||
|
FxQueryInterface(
|
||
|
__in CfxDevice* Device,
|
||
|
__in PWDF_QUERY_INTERFACE_CONFIG Config
|
||
|
);
|
||
|
|
||
|
~FxQueryInterface(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
SetEmbedded(
|
||
|
__in PWDF_QUERY_INTERFACE_CONFIG Config,
|
||
|
__in PINTERFACE Interface
|
||
|
);
|
||
|
|
||
|
static
|
||
|
FxQueryInterface*
|
||
|
_FromEntry(
|
||
|
__in PSINGLE_LIST_ENTRY Entry
|
||
|
)
|
||
|
{
|
||
|
return CONTAINING_RECORD(Entry, FxQueryInterface, m_Entry);
|
||
|
}
|
||
|
|
||
|
static
|
||
|
VOID
|
||
|
_FormatIrp(
|
||
|
__in PIRP Irp,
|
||
|
__in const GUID* InterfaceGuid,
|
||
|
__out PINTERFACE Interface,
|
||
|
__in USHORT InterfaceSize,
|
||
|
__in USHORT InterfaceVersion,
|
||
|
__in_opt PVOID InterfaceSpecificData = NULL
|
||
|
);
|
||
|
|
||
|
_Must_inspect_result_
|
||
|
static
|
||
|
NTSTATUS
|
||
|
_QueryForInterface(
|
||
|
__in PDEVICE_OBJECT TopOfStack,
|
||
|
__in const GUID* InterfaceType,
|
||
|
__out PINTERFACE Interface,
|
||
|
__in USHORT Size,
|
||
|
__in USHORT Version,
|
||
|
__in_opt PVOID InterfaceSpecificData
|
||
|
);
|
||
|
|
||
|
public:
|
||
|
GUID m_InterfaceType;
|
||
|
|
||
|
PINTERFACE m_Interface;
|
||
|
|
||
|
CfxDevice *m_Device;
|
||
|
|
||
|
FxDeviceProcessQueryInterfaceRequest m_ProcessRequest;
|
||
|
|
||
|
SINGLE_LIST_ENTRY m_Entry;
|
||
|
|
||
|
BOOLEAN m_ImportInterface;
|
||
|
|
||
|
BOOLEAN m_SendQueryToParentStack;
|
||
|
|
||
|
BOOLEAN m_EmbeddedInterface;
|
||
|
};
|
||
|
|
||
|
#endif // _FXQUERYINTERFACE_H_
|