RtlStdInitializeStackDatabase
INT64 __stdcall RtlStdInitializeStackDatabase(
PVOID Base,
UINT64 CommitSize,
UINT64 ReserveSize,
_STACK_TRACE_DATABASE **OutputDatabase){
UINT64 v6;
__int64 v7;
unsigned __int64 v8;
_SLIST_HEADER *v9;
char *v10;
__int64 v11;
__int64 v12;
if( CommitSize && (CommitSize != ReserveSize || !Base) )
return 3221225485i64;
v6 = 24i64 * (ReserveSize < 0x1000000 ? 5569 : 9551) + 752;
if( ReserveSize <= v6 || !Base || CommitSize != ReserveSize )
return 3221225485i64;
*((_DWORD *)Base + 180) = ReserveSize < 0x1000000 ? 5569 : 9551;
*((_QWORD *)Base + 21) = (char *)Base + ReserveSize;
*((_QWORD *)Base + 23) = (char *)Base + ReserveSize;
*((_BYTE *)Base + 128) = 1;
*((_QWORD *)Base + 17) = Base;
memset((INT64)Base + 728, 0i64);
v7 = 32i64;
v8 = (v6 + 15) & 0xFFFFFFFFFFFFFFF0ui64;
v9 = (_SLIST_HEADER *)((char *)Base + 208);
v10 = (char *)Base + v8;
*((_QWORD *)Base + 20) = v10;
*((_QWORD *)Base + 15) = v10;
do
{
InitializeSListHead(v9);
v9 = (_SLIST_HEADER *)((char *)v9 + 16);
--v7;
}
while( v7 );
*(_QWORD *)Base = 0i64;
v11 = 0i64;
for( *((_BYTE *)Base + 8) = 0; (unsigned int)v11 < *((_DWORD *)Base + 180); *((_BYTE *)Base + 8 * v12 + 744) = 0 )
{
v12 = 3 * v11;
v11 = (unsigned int)(v11 + 1);
*((_QWORD *)Base + v12 + 92) = 0i64;
}
*OutputDatabase = (_STACK_TRACE_DATABASE *)Base;
return 0i64;
}Referenced by:
RtlpInitializeStackTraceDatabase