IopGetMountFlag
UINT8 __stdcall IopGetMountFlag(_DEVICE_OBJECT *DeviceObject){
UINT8 v2;
unsigned __int8 CurrentIrql;
volatile __int64 **v4;
_VPB *Vpb;
_KSPIN_LOCK_QUEUE *v6;
_KSPIN_LOCK_QUEUE *Next;
v2 = 0;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v4 = (volatile __int64 **)((char *)KeGetPcr()->NtTib.ArbitraryUserPointer + 144);
if( _InterlockedExchange64(v4[1], (__int64)v4) )
KxWaitForLockOwnerShip((INT64)v4);
Vpb = DeviceObject->Vpb;
if( Vpb && (Vpb->Flags & 1) != 0 )
v2 = 1;
v6 = (_KSPIN_LOCK_QUEUE *)((char *)KeGetPcr()->NtTib.ArbitraryUserPointer + 144);
_m_prefetchw(v6);
Next = v6->Next;
if( v6->Next )
goto LABEL_10;
if( v6 != (_KSPIN_LOCK_QUEUE *)_InterlockedCompareExchange64(
(volatile signed __int64 *)v6->Lock,
0i64,
(signed __int64)v6) )
{
Next = KxWaitForLockChainValid(v6);
LABEL_10:
v6->Next = 0i64;
_InterlockedXor64((volatile signed __int64 *)&Next->Lock, 1ui64);
}
__writecr8(CurrentIrql);
return v2;
}Referenced by:
NtQueryVolumeInformationFile