SepSecureBootCorrectBcd
NTSTATUS __stdcall SepSecureBootCorrectBcd(){
VOID *v0;
NTSTATUS updated;
VOID **PoolWithTag;
unsigned int v3;
__int64 v4;
unsigned int v5;
VOID *v6;
_DWORD *v7;
VOID *v8;
UINT64 ObjectCount;
UINT64 BufferSize;
VOID *ObjectHandle;
VOID *StoreHandle;
ObjectHandle = 0i64;
v0 = 0i64;
LODWORD(ObjectCount) = 0;
LODWORD(BufferSize) = 0;
StoreHandle = 0i64;
updated = BiAcquireBcdSyncMutant(0);
if( updated >= 0 )
{
updated = BiOpenSystemStore(&StoreHandle, 0i64);
BiReleaseBcdSyncMutant(0);
v0 = StoreHandle;
}
else
{
BiLogMessage();
}
if( updated >= 0 )
{
StoreHandle = (VOID *)1;
updated = BcdEnumerateObjects(v0, (_BCD_OBJECT_DESCRIPTION *)&StoreHandle, 0i64, &BufferSize, &ObjectCount);
if( updated == -1073741789 )
{
PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)BufferSize, 1649632595i64);
if( PoolWithTag )
{
updated = BcdEnumerateObjects(
v0,
(_BCD_OBJECT_DESCRIPTION *)&StoreHandle,
(_BCD_OBJECT *)PoolWithTag,
&BufferSize,
&ObjectCount);
if( updated >= 0 )
{
v3 = 0;
if( (_DWORD)ObjectCount )
{
while( 1 )
{
BufferSize = (UINT64)&PoolWithTag[3 * v3];
updated = BcdOpenObject(v0, (_GUID *)BufferSize, &ObjectHandle);
if( updated < 0 )
break;
v4 = *(&stru_140CF2E80 + 911);
v5 = 0;
v6 = ObjectHandle;
if( *(_WORD *)(*(&stru_140CF2E80 + 911) + 36i64) )
{
do
{
v7 = (_DWORD *)(qword_140CF9DA8 + 12i64 * v5);
if( !*v7 || *v7 == *(_DWORD *)(*(_QWORD *)(BufferSize + 16) + 4i64) )
{
v8 = (VOID *)*(unsigned __int16 *)((unsigned int)v7[2] + qword_140CF9DA0);
if( (((unsigned __int8)v8 & 0x20) == 0 || (dword_140C54384 & 4) != 0)
&& (((unsigned __int8)v8 & 0x40) == 0 || (dword_140C54384 & 0x10) != 0) )
{
updated = SepSecureBootUpdateBcdDataForRule(qword_140CF9DA8 + 12i64 * v5, v6, v8);
if( updated < 0 )
goto LABEL_24;
v4 = *(&stru_140CF2E80 + 911);
}
}
++v5;
}
while( v5 < *(unsigned __int16 *)(v4 + 36) );
}
BcdCloseObject(v6);
v6 = 0i64;
++v3;
ObjectHandle = 0i64;
if( v3 >= (unsigned int)ObjectCount )
goto LABEL_24;
}
v6 = ObjectHandle;
LABEL_24:
if( v6 )
BcdCloseObject(v6);
}
}
ExFreePoolWithTag(PoolWithTag, 0x62536553u);
}
else
{
updated = -1073741801;
}
}
}
if( v0 )
BcdCloseStore(v0);
return updated;
}Referenced by:
NtFilterBootOption