IopStoreArcInformation
NTSTATUS __stdcall IopStoreArcInformation(_LOADER_PARAMETER_BLOCK *LoaderBlock){
__int64 **v1;
int v2;
NTSTATUS v3;
__int64 *i;
CHAR *Pool_1;
__int64 v6;
UINT64 v7;
CHAR *v8;
CHAR *v9;
CHAR **v10;
PVOID *j;
PVOID *m;
PVOID *v14;
__int64 v15;
int v16;
PVOID *k;
v1 = (__int64 **)*((_QWORD *)LoaderBlock + 29);
v2 = dword_140C19650;
v3 = 0;
qword_140D2D858 = (__int64)&IoArcTableListHead;
IoArcTableListHead = &IoArcTableListHead;
for( i = *v1; ; i = (__int64 *)*i )
{
if( i == (__int64 *)v1 )
{
for( j = (PVOID *)IoArcTableListHead; j != &IoArcTableListHead; j = (PVOID *)*j )
{
if( !*((_BYTE *)j + 36) && !*((_BYTE *)j + 72) )
{
v16 = *((_DWORD *)j + 8);
for( k = (PVOID *)*j; k != &IoArcTableListHead; k = (PVOID *)*k )
{
if( !*((_BYTE *)k + 36) && !*((_BYTE *)k + 72) && v16 == *((_DWORD *)k + 8) )
{
*((_BYTE *)j + 72) = 1;
*((_BYTE *)k + 72) = 1;
}
}
}
}
if( v2 == 1 )
{
for( m = (PVOID *)IoArcTableListHead; m != &IoArcTableListHead; m = (PVOID *)*m )
{
if( *((_BYTE *)m + 76) && *((_BYTE *)m + 72) )
IopAmbiguousSystemDisk = 1;
}
}
return v3;
}
Pool_1 = IopVerifierExAllocatePool_1(NonPagedPoolNx, 0x50ui64);
if( !Pool_1 )
goto LABEL_27;
v6 = -1i64;
do
++v6;
while( *(_BYTE *)(i[3] + v6) );
v7 = v6 + 1;
v8 = IopVerifierExAllocatePool_1(NonPagedPoolNx, v7);
v9 = Pool_1;
if( !v8 )
break;
memset((INT64)Pool_1, 0i64);
*(_OWORD *)Pool_1 = *(_OWORD *)i;
*((_OWORD *)Pool_1 + 1) = *((_OWORD *)i + 1);
*((_OWORD *)Pool_1 + 2) = *((_OWORD *)i + 2);
*((_OWORD *)Pool_1 + 3) = *((_OWORD *)i + 3);
RtlStringCbCopyA(v8, v7, (PSTR)i[3]);
*((_QWORD *)Pool_1 + 3) = v8;
if( v2 == 1 && v7 >= 9 && !strnicmp(&v8[v7 - 9], "rdisk(0)", 8ui64) )
Pool_1[76] = 1;
v10 = (CHAR **)qword_140D2D858;
if( *(PVOID **)qword_140D2D858 != &IoArcTableListHead )
LABEL_30:
__fastfail(3u);
*(_QWORD *)Pool_1 = &IoArcTableListHead;
*((_QWORD *)Pool_1 + 1) = v10;
*v10 = Pool_1;
qword_140D2D858 = (__int64)Pool_1;
}
while( 1 )
{
ExFreePoolWithTag(v9, 0);
LABEL_27:
v14 = (PVOID *)IoArcTableListHead;
if( IoArcTableListHead == &IoArcTableListHead )
return -1073741670;
if( *((PVOID **)IoArcTableListHead + 1) != &IoArcTableListHead )
goto LABEL_30;
v15 = *(_QWORD *)IoArcTableListHead;
if( *(PVOID *)(*(_QWORD *)IoArcTableListHead + 8i64) != IoArcTableListHead )
goto LABEL_30;
IoArcTableListHead = *(PVOID *)IoArcTableListHead;
*(_QWORD *)(v15 + 8) = &IoArcTableListHead;
ExFreePoolWithTag(v14[3], 0);
v9 = (CHAR *)v14;
}
}Referenced by:
IoInitSystemPreDrivers