HalpDpReplaceBegin
INT64 __fastcall HalpDpReplaceBegin(INT64 a1, CHAR **a2){
__int64 v2;
unsigned int v3;
__int64 v6;
__int64 v7;
int v8;
unsigned int *PoolWithTag;
unsigned int *v10;
CHAR a5;
char v12;
__int64 v13;
VOID *v14;
void *v15;
unsigned int a7;
v2 = *(_QWORD *)(a1 + 16);
v3 = 0;
a7 = 0;
v6 = *(unsigned int *)(v2 + 16);
v7 = *(unsigned int *)(*(_QWORD *)(a1 + 8) + 16i64);
if( (unsigned int)v6 < (unsigned int)v7 )
return(unsigned int)-1073741811;
PoolWithTag = (unsigned int *)ExAllocatePoolWithTag(
NonPagedPoolNx,
(unsigned int)(4 * (v6 + 2 * (v7 + 16))),
0x206C6148ui64);
v10 = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741670;
memset((INT64)PoolWithTag, 0i64);
*v10 = v7;
a5 = 1;
v12 = (*(_DWORD *)a1 & 2) != 0;
*((_BYTE *)v10 + 45) = v12;
if( !(_DWORD)v7 )
{
LABEL_11:
if( v12 )
{
if( (_DWORD)v7 )
{
v14 = ExAllocatePoolWithTag(NonPagedPoolNx, v3 * (unsigned int)v7, 0x206C6148ui64);
*((_QWORD *)v10 + 4) = v14;
if( !v14 )
{
v8 = -1073741670;
goto LABEL_15;
}
}
HalpBuildResumeStructures();
}
*a2 = (CHAR *)v10;
return 0;
}
*((_QWORD *)v10 + 1) = v10 + 32;
v13 = (__int64)&v10[v7 + 32];
*((_QWORD *)v10 + 2) = v13;
*((_QWORD *)v10 + 3) = v13 + 4 * v6;
memmove((UINT8 *)v10 + 128, (UINT8 *)(*(_QWORD *)(a1 + 8) + 20i64), 4 * v7);
memmove(*((UINT8 **)v10 + 2), (UINT8 *)(*(_QWORD *)(a1 + 16) + 20i64), 4 * v6);
HalpDpSortApicList(*((_QWORD *)v10 + 1), (unsigned int)v7);
HalpDpSortApicList(*((_QWORD *)v10 + 2), (unsigned int)v6);
if( (*(_DWORD *)a1 & 1) != 0 )
*((_BYTE *)v10 + 44) = 1;
else
a5 = *((_BYTE *)v10 + 44);
v8 = HalpInterruptDpReplaceBegin(
*((CHAR **)v10 + 1),
*((CHAR **)v10 + 2),
*((CHAR **)v10 + 3),
*v10,
a5,
*((_BYTE *)v10 + 45),
&a7);
if( v8 >= 0 )
{
v3 = a7;
v12 = *((_BYTE *)v10 + 45);
v10[10] = a7;
goto LABEL_11;
}
LABEL_15:
v15 = (void *)*((_QWORD *)v10 + 4);
if( v15 )
ExFreePoolWithTag(v15, 0x206C6148u);
ExFreePoolWithTag(v10, 0x206C6148u);
return(unsigned int)v8;
}Referenced by:
No references.