mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 18:24:02 +00:00
172 lines
3.7 KiB
C++
172 lines
3.7 KiB
C++
![]() |
/*++
|
||
|
|
||
|
Copyright (c) Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
FxDeviceKM.hpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This is the definition of the FxDevice object KM specific
|
||
|
|
||
|
Author:
|
||
|
|
||
|
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
Kernel mode only
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _FXDEVICEKM_H_
|
||
|
#define _FXDEVICEKM_H_
|
||
|
|
||
|
__inline
|
||
|
FxWdmDeviceExtension*
|
||
|
FxDevice::_GetFxWdmExtension(
|
||
|
__in MdDeviceObject DeviceObject
|
||
|
)
|
||
|
{
|
||
|
//
|
||
|
// DeviceObject->DeviceExtension points to our FxDevice allocation. We
|
||
|
// get the underlying DeviceExtension allocated as part of the
|
||
|
// PDEVICE_OBJECT by adding the sizeof(DEVICE_OBJECT) to get the start
|
||
|
// of the DeviceExtension. This is documented behavior on how the
|
||
|
// DeviceExtension can be found.
|
||
|
//
|
||
|
return (FxWdmDeviceExtension*) WDF_PTR_ADD_OFFSET(DeviceObject,
|
||
|
sizeof(*DeviceObject));
|
||
|
}
|
||
|
|
||
|
__inline
|
||
|
MdRemoveLock
|
||
|
FxDevice::GetRemoveLock(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
return &FxDevice::_GetFxWdmExtension(
|
||
|
GetDeviceObject())->IoRemoveLock;
|
||
|
}
|
||
|
|
||
|
__inline
|
||
|
BOOLEAN
|
||
|
FxDevice::IsRemoveLockEnabledForIo(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
if (m_DeviceObject.GetObject() != NULL) {
|
||
|
return (_GetFxWdmExtension(m_DeviceObject.GetObject())->RemoveLockOptionFlags &
|
||
|
WDF_REMOVE_LOCK_OPTION_ACQUIRE_FOR_IO) ? TRUE : FALSE;
|
||
|
}
|
||
|
else {
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
__inline
|
||
|
FxDevice*
|
||
|
FxDevice::GetFxDevice(
|
||
|
__in MdDeviceObject DeviceObject
|
||
|
)
|
||
|
{
|
||
|
MxDeviceObject deviceObject((MdDeviceObject)DeviceObject);
|
||
|
|
||
|
//
|
||
|
// DeviceExtension points to the start of the first context assigned to
|
||
|
// WDFDEVICE. We walk backwards from the context to the FxDevice*.
|
||
|
//
|
||
|
return (FxDevice*) CONTAINING_RECORD(deviceObject.GetDeviceExtension(),
|
||
|
FxContextHeader,
|
||
|
Context)->Object;
|
||
|
}
|
||
|
|
||
|
__inline
|
||
|
VOID
|
||
|
FxDevice::DetachDevice(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
if (m_AttachedDevice.GetObject() != NULL) {
|
||
|
Mx::MxDetachDevice(m_AttachedDevice.GetObject());
|
||
|
m_AttachedDevice.SetObject(NULL);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
__inline
|
||
|
VOID
|
||
|
FxDevice::InvalidateDeviceState(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
PDEVICE_OBJECT pdo;
|
||
|
|
||
|
//
|
||
|
// If the PDO is not yet reported to pnp, do not call the API. In this
|
||
|
// case, the PDO will soon be reported and started and the state that
|
||
|
// was just set will be queried for automatically by pnp as a part of
|
||
|
// start.
|
||
|
//
|
||
|
pdo = GetSafePhysicalDevice();
|
||
|
|
||
|
if (pdo != NULL) {
|
||
|
IoInvalidateDeviceState(pdo);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
VOID
|
||
|
__inline
|
||
|
FxDevice::DeleteSymbolicLink(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
if (m_SymbolicLinkName.Buffer != NULL) {
|
||
|
//
|
||
|
// Must be at PASSIVE_LEVEL for this call
|
||
|
//
|
||
|
if (m_SymbolicLinkName.Length) {
|
||
|
Mx::MxDeleteSymbolicLink(&m_SymbolicLinkName);
|
||
|
}
|
||
|
|
||
|
FxPoolFree(m_SymbolicLinkName.Buffer);
|
||
|
RtlZeroMemory(&m_SymbolicLinkName, sizeof(m_SymbolicLinkName));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
__inline
|
||
|
NTSTATUS
|
||
|
FxDevice::_OpenDeviceRegistryKey(
|
||
|
_In_ MdDeviceObject DeviceObject,
|
||
|
_In_ ULONG DevInstKeyType,
|
||
|
_In_ ACCESS_MASK DesiredAccess,
|
||
|
_Out_ PHANDLE DevInstRegKey
|
||
|
)
|
||
|
{
|
||
|
return IoOpenDeviceRegistryKey(DeviceObject,
|
||
|
DevInstKeyType,
|
||
|
DesiredAccess,
|
||
|
DevInstRegKey);
|
||
|
}
|
||
|
|
||
|
__inline
|
||
|
NTSTATUS
|
||
|
FxDevice::_GetDeviceProperty(
|
||
|
_In_ MdDeviceObject DeviceObject,
|
||
|
_In_ DEVICE_REGISTRY_PROPERTY DeviceProperty,
|
||
|
_In_ ULONG BufferLength,
|
||
|
_Out_opt_ PVOID PropertyBuffer,
|
||
|
_Out_ PULONG ResultLength
|
||
|
)
|
||
|
{
|
||
|
return IoGetDeviceProperty(DeviceObject,
|
||
|
DeviceProperty,
|
||
|
BufferLength,
|
||
|
PropertyBuffer,
|
||
|
ResultLength);
|
||
|
}
|
||
|
|
||
|
#endif //_FXDEVICEKM_H_
|