HalpIumSetVariable

NTSTATUS __stdcall HalpIumSetVariable(VOID *Src, VOID *a2){
  int v2; 
  VOID *v3; 
  VOID *v4; 
  int v5; 
  __int64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  VOID **PoolWithTag; 
  VOID **v13; 
  char *v14; 
  __int128 v15; 
  NTSTATUS v16; 
  VOID *Srca; 

  v4 = v3;
  v5 = v2;
  if( !qword_140C4A210 || KeGetCurrentIrql() > 2u )
    return 3;
  v8 = -1i64;
  do
    ++v8;
  while( *((_WORD *)Src + v8) );
  v9 = 2 * v8 + 2;
  v10 = ((unsigned __int64)v3 + v9 + 4151) & 0xFFFFFFFFFFFFF000ui64;
  if( v10 > 0x1FA000 )
    return 4;
  PoolWithTag = ExAllocatePoolWithTag(
                  0x200ui64,
                  ((unsigned __int64)v3 + v9 + 4151) & 0xFFFFFFFFFFFFF000ui64,
                  2001103699i64);
  v13 = PoolWithTag;
  if( !PoolWithTag )
    return 9;
  *((_DWORD *)PoolWithTag + 8) = v5;
  *PoolWithTag = PoolWithTag + 7;
  memmove(PoolWithTag + 7, Src, v9);
  v14 = (char *)*v13 + v9;
  v13[1] = (VOID *)v9;
  v15 = *(_OWORD *)a2;
  v13[6] = v14;
  *((_OWORD *)v13 + 1) = v15;
  memmove(v14, Srca, (size_t)v4);
  v13[5] = v4;
  v16 = ((__int64(__fastcall *)(__int64, VOID **, unsigned __int64))qword_140C4A210)(5i64, v13, v10);
  ExFreePoolWithTag(v13, 0);
  return v16;
}

Referenced by:

No references.