NtGetDevicePowerState
NTSTATUS __stdcall NtGetDevicePowerState(VOID *Device, _DEVICE_POWER_STATE *State){
__int64 v3;
char PreviousMode;
NTSTATUS result;
int RelatedTargetDevice;
_DEVICE_OBJECT *v7;
PVOID Object;
_DEVICE_OBJECT *DeviceObject;
DeviceObject = 0i64;
if( KeGetCurrentThread()->PreviousMode )
{
v3 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)State < 0x7FFFFFFF0000i64 )
v3 = (__int64)State;
*(_DWORD *)v3 = *(_DWORD *)v3;
}
PreviousMode = KeGetCurrentThread()->PreviousMode;
Object = 0i64;
result = ObReferenceObjectByHandle(Device, 0i64, (_OBJECT_TYPE *)IoFileObjectType, PreviousMode, &Object, 0i64);
if( result >= 0 )
{
RelatedTargetDevice = IoGetRelatedTargetDevice((_FILE_OBJECT *)Object, &DeviceObject);
HalPutDmaAdapter((PADAPTER_OBJECT)Object);
if( RelatedTargetDevice >= 0 )
{
v7 = DeviceObject;
*State = PopLockGetDoDevicePowerState(DeviceObject->DeviceObjectExtension);
HalPutDmaAdapter((PADAPTER_OBJECT)v7);
}
return RelatedTargetDevice;
}
return result;
}Referenced by:
PfpVolumeOpenAndVerify