SeSecureBootRegisterPolicy
NTSTATUS __stdcall SeSecureBootRegisterPolicy(
VOID *PolicyBlob,
ULONG_PTR PolicyBlobSize,
INT64 a3,
INT64 a4,
INT64 a5,
INT64 a6,
INT64 a7,
INT64 a8){
void *v8;
unsigned int v10;
unsigned int v11;
_WORD *v12;
int v13;
VOID **PoolWithTag;
VOID **v16;
UINT64 v17;
unsigned int v18;
VOID **v19;
unsigned int *v20;
unsigned int v21;
unsigned __int64 v22;
unsigned int v23;
unsigned int v24;
unsigned __int64 v25;
v8 = (void *)PolicyBlobSize;
if( PolicyBlobSize < 0x10
|| (v10 = *((_DWORD *)PolicyBlob + 2), v11 = *((_DWORD *)PolicyBlob + 3), (v10 == 0) != (v11 == 0))
|| v10 >= (unsigned int)v8
|| v11 >= (unsigned int)v8
|| v11 - 1 <= 0x3E
|| v11 + v10 > (unsigned int)v8 )
{
v13 = -1069350909;
goto LABEL_31;
}
v12 = 0i64;
g_SecureBootPolicyBlobHeader = *(_OWORD *)PolicyBlob;
qword_140C54390 = *((_QWORD *)PolicyBlob + 2);
if( *((_DWORD *)PolicyBlob + 3) )
v12 = (char *)PolicyBlob + *((unsigned int *)PolicyBlob + 2);
SepSecureBootSetRegistryKey((__int64)v12);
if( (dword_140C54384 & 8) != 0 )
SepSecureBootCheckForUpdates();
if( !v12 )
return 0;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, *((unsigned int *)PolicyBlob + 3), 1649632595i64);
v16 = PoolWithTag;
if( !PoolWithTag )
goto LABEL_35;
memmove(PoolWithTag, v12, *((_DWORD *)PolicyBlob + 3));
*(&stru_140CF2E80 + 911) = v16;
if( v12[18] || v12[19] )
{
qword_140CF9DA0 = (__int64)v16 + *((unsigned int *)v16 + 13) + 60;
v13 = SepSecureBootBuildRules();
if( v13 < 0 )
goto LABEL_32;
if( *(_DWORD *)PolicyBlob < 2u )
goto LABEL_31;
v17 = *((unsigned int *)PolicyBlob + 5);
if( !(_DWORD)v17 )
goto LABEL_31;
if( (unsigned int)v17 >= (unsigned int)v8 )
goto LABEL_36;
v18 = *((_DWORD *)PolicyBlob + 4);
if( v18 >= (unsigned int)v8 || v18 > (int)v8 - (int)v17 )
goto LABEL_36;
v19 = ExAllocatePoolWithTag(0x200ui64, v17, 1649632595i64);
v20 = (unsigned int *)v19;
if( v19 )
{
memmove(v19, (char *)PolicyBlob + *((unsigned int *)PolicyBlob + 4), *((_DWORD *)PolicyBlob + 5));
v21 = *((_DWORD *)PolicyBlob + 5);
if( v21 >= 0x18 )
{
v22 = 276i64 * *v20;
v23 = v21 - 24;
*((_QWORD *)v20 + 1) = v20 + 6;
if( v22 <= 0xFFFFFFFF && v23 >= (unsigned int)v22 )
{
v24 = v23 - v22;
v25 = 32i64 * v20[1];
if( v25 <= 0xFFFFFFFF )
{
v13 = 0;
if( v24 >= (unsigned int)v25 )
{
*((_QWORD *)v20 + 2) = (char *)v20 + (unsigned int)v22 + 24;
g_SecureBootActivePlatformManifestSize = *((_DWORD *)PolicyBlob + 5);
g_SecureBootActivePlatformManifest = v20;
LABEL_31:
if( v13 >= 0 )
return v13;
LABEL_32:
if( *(&stru_140CF2E80 + 911) )
{
ExFreePoolWithTag(*(&stru_140CF2E80 + 911), 0);
*(&stru_140CF2E80 + 911) = 0i64;
}
KeBugCheckEx(0x145u, (PVOID)v13, PolicyBlob, v8, 0i64);
}
}
}
}
LABEL_36:
v13 = -1069350909;
goto LABEL_32;
}
LABEL_35:
v13 = -1073741670;
goto LABEL_32;
}
return 0;
}Referenced by:
No references.