KseShimDatabaseBootInitialize
NTSTATUS __stdcall KseShimDatabaseBootInitialize(PVOID DbAddress, UINT64 DbSize){
VOID *v2;
size_t v3;
size_t v4;
VOID *v5;
size_t v6;
int v8;
__int64 v10;
__int64 v11;
__int64 v12;
v4 = v3;
v5 = v2;
v6 = DbSize;
if( KsepShimDbDuringBoot )
{
v10 = ((unsigned __int8)_InterlockedExchangeAdd(&KsepHistoryErrorsIndex, 1u) + 1) & 0x3F;
KsepHistoryErrors[2 * v10 + 1] = -1073740768;
KsepHistoryErrors[2 * v10] = 590051;
if( (KsepDebugFlag & 4) != 0 )
RtlAssert("KsepShimDbDuringBoot == FALSE", "minkernel\\ntos\\kshim\\ksesdb.c", 227i64, 0i64);
}
if( KsepShimDbHandle )
{
v11 = ((unsigned __int8)_InterlockedExchangeAdd(&KsepHistoryErrorsIndex, 1u) + 1) & 0x3F;
KsepHistoryErrors[2 * v11 + 1] = -1073740768;
KsepHistoryErrors[2 * v11] = 590052;
if( (KsepDebugFlag & 4) != 0 )
RtlAssert("KsepShimDbHandle == NULL", "minkernel\\ntos\\kshim\\ksesdb.c", 228i64, 0i64);
}
KsepShimDbLock._bf_0 = 0i64;
KsepShimDbHandle = 0i64;
KsepShimDbDuringBoot = 1;
memset(&KsepShimDb, 0i64, 0x70u);
if( !DbAddress || !v6 )
return -1073741823;
v8 = KsepSdbBootInitialize(DbAddress, v6);
if( v8 >= 0 )
{
if( v5 && v4 )
{
if( KsepSdbBootInitialize(v5, v4) < 0 )
{
v12 = ((unsigned __int8)_InterlockedExchangeAdd(&KsepHistoryErrorsIndex, 1u) + 1) & 0x3F;
KsepHistoryErrors[2 * v12 + 1] = v8;
KsepHistoryErrors[2 * v12] = 590110;
if( (KsepDebugFlag & 2) != 0 )
KsepDebugPrint(1i64, "KSE: KsepSdbBootInitialize failed for patch SDB!\n");
KsepLogError(1, "KSE: KsepSdbBootInitialize failed for patch SDB!\n");
}
else if( dword_140C2ACD0 >= (unsigned int)dword_140C2AD08 )
{
KsepSdbBootRelease((INT64)&qword_140C2ACD8);
}
}
++KsepShimDbRefCount;
v8 = 0;
KsepShimDbHandle = (__int64)&KsepShimDb;
}
return v8;
}Referenced by:
KseInitialize