mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 10:14:44 +00:00
253 lines
4.6 KiB
C++
253 lines
4.6 KiB
C++
/*++
|
|
|
|
Copyright (c) Microsoft. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
WudfDispatcher.h
|
|
|
|
Abstract:
|
|
|
|
This file contains the class definition of the WUDF dispatcher object.
|
|
|
|
Author:
|
|
|
|
|
|
|
|
Environment:
|
|
|
|
User mode only
|
|
|
|
Revision History:
|
|
|
|
|
|
|
|
--*/
|
|
#pragma once
|
|
|
|
extern const GUID IID_FxMessageDispatch;
|
|
extern const GUID IID_FxMessageDispatch2;
|
|
|
|
class FxMessageDispatch;
|
|
|
|
class FxMessageDispatch :
|
|
public FxStump,
|
|
public IFxMessageDispatch2
|
|
{
|
|
//
|
|
// Manager functions.
|
|
//
|
|
private:
|
|
FxMessageDispatch(
|
|
_In_ FxDevice* Device
|
|
) :
|
|
m_cRefs(1),
|
|
m_Device(Device)
|
|
{
|
|
}
|
|
|
|
public:
|
|
~FxMessageDispatch()
|
|
{
|
|
// SAFE_RELEASE(m_Device);
|
|
}
|
|
|
|
static
|
|
NTSTATUS
|
|
_CreateAndInitialize(
|
|
_In_ PFX_DRIVER_GLOBALS DriverGlobals,
|
|
_In_ FxDevice* Device,
|
|
_Out_ FxMessageDispatch ** ppWudfDispatcher
|
|
);
|
|
|
|
//
|
|
// IUnknown
|
|
//
|
|
public:
|
|
HRESULT
|
|
__stdcall
|
|
QueryInterface(
|
|
_In_ REFIID riid,
|
|
_Out_ LPVOID* ppvObject
|
|
);
|
|
|
|
ULONG
|
|
__stdcall
|
|
AddRef();
|
|
|
|
ULONG
|
|
__stdcall
|
|
Release();
|
|
|
|
//
|
|
// IFxMessageDispatch
|
|
//
|
|
public:
|
|
virtual void __stdcall
|
|
DispatchPnP(
|
|
_In_ IWudfIrp * pIrp
|
|
);
|
|
|
|
virtual void __stdcall
|
|
CreateFile(
|
|
_In_ IWudfIoIrp * pCreateIrp
|
|
);
|
|
|
|
virtual void __stdcall
|
|
DeviceControl(
|
|
_In_ IWudfIoIrp * pIrp,
|
|
_In_opt_ IUnknown * pFxContext
|
|
);
|
|
|
|
virtual void __stdcall
|
|
ReadFile(
|
|
_In_ IWudfIoIrp * pIrp,
|
|
_In_opt_ IUnknown * pFxContext
|
|
);
|
|
|
|
virtual void __stdcall
|
|
WriteFile(
|
|
_In_ IWudfIoIrp * pIrp,
|
|
_In_opt_ IUnknown * pFxContext
|
|
);
|
|
|
|
virtual void __stdcall
|
|
CleanupFile(
|
|
_In_ IWudfIoIrp * pIrp,
|
|
_In_ IUnknown * pFxContext
|
|
);
|
|
|
|
virtual void __stdcall
|
|
CloseFile(
|
|
_In_ IWudfIoIrp * pIrp,
|
|
_In_ IUnknown * pFxContext
|
|
);
|
|
|
|
virtual
|
|
VOID
|
|
__stdcall
|
|
GetPreferredTransferMode(
|
|
_Out_ UMINT::WDF_DEVICE_IO_BUFFER_RETRIEVAL *RetrievalMode,
|
|
_Out_ UMINT::WDF_DEVICE_IO_TYPE *RWPreference,
|
|
_Out_ UMINT::WDF_DEVICE_IO_TYPE *IoctlPreference
|
|
);
|
|
|
|
virtual void __stdcall
|
|
FlushBuffers(
|
|
_In_ IWudfIoIrp * pIrp,
|
|
_In_opt_ IUnknown * pFxContext
|
|
);
|
|
|
|
virtual void __stdcall
|
|
QueryInformationFile(
|
|
_In_ IWudfIoIrp * pIrp,
|
|
_In_opt_ IUnknown * pFxContext
|
|
);
|
|
|
|
virtual void __stdcall
|
|
SetInformationFile(
|
|
_In_ IWudfIoIrp * pIrp,
|
|
_In_opt_ IUnknown * pFxContext
|
|
);
|
|
|
|
virtual NTSTATUS __stdcall
|
|
ProcessWmiPowerQueryOrSetData(
|
|
_In_ RdWmiPowerAction Action,
|
|
_Out_ BOOLEAN *QueryResult
|
|
);
|
|
|
|
//
|
|
// We should remove these methods from this interface.
|
|
//
|
|
virtual WUDF_INTERFACE_CONTEXT __stdcall
|
|
RemoteInterfaceArrival(
|
|
_In_ LPCGUID pDeviceInterfaceGuid,
|
|
_In_ PCWSTR pSymbolicLink
|
|
);
|
|
|
|
virtual void __stdcall
|
|
RemoteInterfaceRemoval(
|
|
_In_ WUDF_INTERFACE_CONTEXT RemoteInterfaceID
|
|
);
|
|
|
|
virtual BOOL __stdcall
|
|
TransportQueryID(
|
|
_In_ DWORD Id,
|
|
_In_ PVOID DataBuffer,
|
|
_In_ SIZE_T cbDataBufferSize
|
|
);
|
|
|
|
virtual ULONG __stdcall
|
|
GetDirectTransferThreshold(
|
|
VOID
|
|
);
|
|
|
|
virtual void __stdcall
|
|
PoFxDevicePowerRequired(
|
|
VOID
|
|
);
|
|
|
|
virtual void __stdcall
|
|
PoFxDevicePowerNotRequired(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Additional public functions.
|
|
//
|
|
public:
|
|
//
|
|
// Returns the Dispatcher object from the given interface without
|
|
// incrementing the refcount.
|
|
//
|
|
static
|
|
FxMessageDispatch*
|
|
_GetObjFromItf(
|
|
_In_ IFxMessageDispatch* pIFxMessageDispatch
|
|
);
|
|
|
|
//
|
|
// Returns the specified interface from the given object without
|
|
// incrementing the refcount.
|
|
//
|
|
static
|
|
IFxMessageDispatch*
|
|
_GetDispatcherItf(
|
|
_In_ FxMessageDispatch* pWudfDispatcher
|
|
);
|
|
|
|
//
|
|
// Returns a weak ref to the embedded user-mode driver object.
|
|
//
|
|
PDRIVER_OBJECT_UM
|
|
GetDriverObject(
|
|
VOID
|
|
)
|
|
{
|
|
return m_Device->GetDriver()->GetDriverObject();
|
|
}
|
|
|
|
MdDeviceObject
|
|
GetDeviceObject(
|
|
VOID
|
|
)
|
|
{
|
|
return m_Device->GetDeviceObject();
|
|
}
|
|
|
|
//
|
|
// Data members.
|
|
//
|
|
private:
|
|
//
|
|
// Reference count for debugging purposes. The lifetime is managed by
|
|
// FxDevice.
|
|
//
|
|
LONG m_cRefs;
|
|
|
|
//
|
|
// Device object associated with this dispatcher object.
|
|
//
|
|
FxDevice * m_Device;
|
|
};
|
|
|