HalpIumSetVariable

INT64 __stdcall HalpIumSetVariable(VOID *Src, VOID *a2){
  int v2; 
  UINT64 v3; 
  UINT64 v4; 
  int v5; 
  __int64 v8; 
  UINT64 v9; 
  unsigned __int64 v10; 
  UINT8 *PoolWithTag; 
  UINT8 *v13; 
  UINT8 *v14; 
  __int128 v15; 
  INT64 v16; 
  UINT8 *Srca; 
  v4 = v3;
  v5 = v2;
  if( !qword_140C4A210 || KeGetCurrentIrql() > 2u )
    return 0x8000000000000003ui64;
  v8 = -1i64;
  do
    ++v8;
  while( *((_WORD *)Src + v8) );
  v9 = 2 * v8 + 2;
  v10 = (v9 + v3 + 4151) & 0xFFFFFFFFFFFFF000ui64;
  if( v10 > 0x1FA000 )
    return 0x8000000000000004ui64;
  PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(
                           NonPagedPoolNx,
                           (v9 + v3 + 4151) & 0xFFFFFFFFFFFFF000ui64,
                           0x77466B53ui64);
  v13 = PoolWithTag;
  if( !PoolWithTag )
    return 0x8000000000000009ui64;
  *((_DWORD *)PoolWithTag + 8) = v5;
  *(_QWORD *)PoolWithTag = PoolWithTag + 56;
  memmove(PoolWithTag + 56, (UINT8 *)Src, v9);
  v14 = (UINT8 *)(v9 + *(_QWORD *)v13);
  *((_QWORD *)v13 + 1) = v9;
  v15 = *(_OWORD *)a2;
  *((_QWORD *)v13 + 6) = v14;
  *((_OWORD *)v13 + 1) = v15;
  memmove(v14, Srca, v4);
  *((_QWORD *)v13 + 5) = v4;
  v16 = ((__int64(__fastcall *)(__int64, UINT8 *, unsigned __int64))qword_140C4A210)(5i64, v13, v10);
  ExFreePoolWithTag(v13, 0);
  return v16;
}

Referenced by:

No references.