ObpCreateTypeArray
VOID __stdcall ObpCreateTypeArray(){
_QWORD **v0;
_ETHREAD *CurrentThread;
_QWORD **v2;
UINT64 v3;
_QWORD *v4;
unsigned int v5;
__int64 v6;
_DWORD *PoolWithTag;
_DWORD *v8;
__int64 v9;
_QWORD *v10;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = v0;
--*((_WORD *)CurrentThread + 243);
v3 = (UINT64)(v0 + 23);
ExAcquirePushLockExclusiveEx((UINT64)(v0 + 23), 0i64);
v4 = *v2;
v5 = 0;
if( *v2 != v2 )
{
do
{
v4 = (_QWORD *)*v4;
v6 = v5++;
}
while( v4 != v2 );
if( v5 )
{
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 8 * v6 + 16, 0x7241624Fui64);
v8 = PoolWithTag;
if( PoolWithTag )
{
*PoolWithTag = v5;
v9 = 0i64;
v10 = *v2;
while( v10 != v2 )
{
*(_QWORD *)&v8[2 * v9 + 2] = v10;
if( !ObReferenceObjectSafe(v10 + 10) )
*(_QWORD *)&v8[2 * v9 + 2] = 0i64;
v10 = (_QWORD *)*v10;
v9 = (unsigned int)(v9 + 1);
}
}
}
}
ExReleasePushLockEx(v3, 0i64);
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}Referenced by:
ObEnumerateObjectsByType
ObGetObjectInformation