ExpSaBinaryArrayInsert
UINT64 __stdcall ExpSaBinaryArrayInsert(_EX_SA_BINARY_ARRAY *Array, VOID *Element){
unsigned __int16 v2;
unsigned int v3;
unsigned int v6;
__int64 *v7;
unsigned int v8;
UINT64 v9;
__int64 *PoolWithTagFromNode;
__int64 v11;
__int64 i;
unsigned int v13;
INT64 v15;
v3 = v2;
v6 = 0;
while( 1 )
{
v7 = *(__int64 **)Array;
v8 = 1 << (v6 + 2);
if( !*(_QWORD *)Array )
{
LODWORD(v15) = 0;
v9 = v3;
LODWORD(v9) = v3 | 0x80000000;
PoolWithTagFromNode = (__int64 *)ExpAllocatePoolWithTagFromNode(0x200ui64, 8 * v8 + 8, 0x61537845ui64, v9, v15);
v7 = PoolWithTagFromNode;
if( PoolWithTagFromNode )
memset(PoolWithTagFromNode, 0i64, 8 * v8 + 8);
if( !v7 )
return(unsigned int)-1;
*(_QWORD *)Array = v7;
}
v11 = *v7;
if( *v7 < (unsigned __int64)v8 )
break;
++v6;
Array += 2;
if( v6 >= 0x10 )
return(unsigned int)-1;
}
for( i = (unsigned int)v11; v7[i + 1]; i = (v8 - 1) & ((_DWORD)i + 1) )
;
v13 = i | v8;
*v7 = v11 + 1;
v7[i + 1] = (__int64)Element;
return v13;
}Referenced by:
ExpSaPageGroupDescriptorAllocate