RtlUnlockBootStatusData
VOID __stdcall RtlUnlockBootStatusData(VOID *BootStatusDataHandle){
int v2;
char v3;
_IO_STATUS_BLOCK IoStatusBlock;
__int16 InputBuffer;
IoStatusBlock = 0i64;
InputBuffer = 0;
RtlpAcquireBootStatusLock();
if( !BootStatReferenceCount )
goto LABEL_14;
v2 = BootStatReferenceCount - 1;
v3 = 0;
--BootStatReferenceCount;
if( BootStatFileHandleAcquired )
{
if( !BootStatusDataHandle )
{
BootStatusDataHandle = *(VOID **)&BootStatFileHandle;
LABEL_8:
BootStatReferenceCount = 0;
v3 = 1;
*(_QWORD *)&BootStatFileHandle = 0i64;
BootStatFileHandleAcquired = 0;
goto LABEL_9;
}
if( !BootStatKeepHandleOpen && !v2 )
goto LABEL_8;
}
LABEL_9:
if( BootStatusDataHandle )
{
ZwFsControlFile((_HANDLE)BootStatusDataHandle, 0, 0i64, 0i64, &IoStatusBlock, 0x9C040u, &InputBuffer, 2u, 0i64, 0);
if( v3 )
{
if( BootStatDataCache )
{
ExFreePoolWithTag(BootStatDataCache, 0);
BootStatDataCache = 0i64;
}
BootStatFileHandleAcquired = 0;
ZwClose((_HANDLE)BootStatusDataHandle);
}
}
LABEL_14:
RtlpReleaseBootStatusLock();
}Referenced by:
PoClearTransitionMarker
PopBootStatCheckIntegrity
PopBootStatGet
PopBootStatSet
PopBootStatUnlock