ExpParseAndUpdateLeapSecondData

INT64 __fastcall ExpParseAndUpdateLeapSecondData(INT64 a1, INT64 a2){
  UINT8 *v2; 
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  unsigned int v7; 
  unsigned int v8; 
  UINT8 *PoolWithTag; 
  int v11[14]; 
  v2 = 0i64;
  if( *(_DWORD *)(a1 + 4) == 3 && (v5 = *(unsigned int *)(a1 + 8), v5 == 12 * (v5 / 0xC)) )
  {
    v6 = v5 / 0xC;
    v7 = 8 * (*(_DWORD *)(a1 + 8) / 0xCu) + 8;
    if( v7 > 0x1000 )
      return 2;
    if( !(_DWORD)v6 )
      return 0;
    if( (unsigned int)v6 <= *(_DWORD *)(a2 + 4) )
      return(unsigned int)v6 < *(_DWORD *)(a2 + 4) ? 3 : 0;
    PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, v7, 0x6453704Cui64);
    v2 = PoolWithTag;
    if( !PoolWithTag )
      return 7;
    memset((INT64)PoolWithTag, 0i64);
    v8 = RtlParseLeapSecondData(a1 + 12, (unsigned int)v6, a2, (INT64)v2);
    if( !v8 )
    {
      memmove((UINT8 *)(a2 + 8), v2 + 8, 8i64 * (unsigned int)v6);
      _InterlockedOr(v11, 0);
      *(_DWORD *)(a2 + 4) = v6;
    }
  }
  else
  {
    v8 = 1;
  }
  if( v2 )
    ExFreePoolWithTag(v2, 0x6453704Cu);
  return v8;
}

Referenced by:

ExpReadLeapSecondData