ExpGenuinePolicyPostProcess

INT64 __stdcall ExpGenuinePolicyPostProcess(
        UINT64 *Type,
        VOID *Data,
        UINT64 DataSize,
        UINT64 *ResultDataSize,
        UINT8 *QueryHandled){
  unsigned int v6; 
  int v8; 
  void *v9; 
  bool v10; 
  UNICODE_STRING *v11; 
  int v12; 
  VOID *PoolWithTag; 
  UNICODE_STRING *v14; 
  int v15; 
  INT64 a5; 
  UINT64 *a5a; 
  SIZE_T NumberOfBytes; 
  int v20; 
  UINT64 ResultDataSizea; 
  _DWORD *a4; 
  __int128 v23; 
  _BYTE *v24; 
  v6 = (unsigned int)ResultDataSize;
  a4 = QueryHandled;
  v20 = 0;
  *v24 = 0;
  v8 = 0;
  v9 = 0i64;
  LODWORD(ResultDataSizea) = 4;
  v23 = 0i64;
  NumberOfBytes = 0i64;
  if( *Type )
  {
    LODWORD(a5) = 2;
    v8 = sub_14094D46C(Data, (_DWORD *)DataSize, (unsigned int)ResultDataSize, QueryHandled, a5);
    *v24 = 1;
    return(unsigned int)v8;
  }
  if( DataSize )
  {
    if( (_DWORD)ResultDataSize == 1 )
    {
      v10 = *(_BYTE *)DataSize == 1;
    }
    else
    {
      if( (_DWORD)ResultDataSize != 2 )
      {
        if( *(_DWORD *)DataSize == 1 )
          return(unsigned int)v8;
        goto LABEL_11;
      }
      v10 = *(_WORD *)DataSize == 1;
    }
    if( v10 )
      return(unsigned int)v8;
  }
LABEL_11:
  v8 = ZwQueryLicenseValue((UNICODE_STRING *)&stru_1409841C8, 0i64, (char *)&NumberOfBytes + 4, 4ui64, &ResultDataSizea);
  if( v8 < 0 || HIDWORD(NumberOfBytes) != 1 )
  {
    v8 = qword_140D2C438 ? qword_140D2C438(&v20) : -1073741637;
    if( v8 >= 0 )
    {
      if( qword_140D2C3F8 )
      {
        LODWORD(a5a) = 0;
        v8 = ExpOsProductCacheProviderHelper(v11, (UINT64 *)&qword_140983950, 0i64, 0i64, a5a, (UINT8 *)&NumberOfBytes);
        if( v8 == -1073741789 )
        {
          v12 = NumberOfBytes;
          PoolWithTag = ExAllocatePoolWithTag(PagedPool, (unsigned int)NumberOfBytes, 0x20534C53ui64);
          v9 = PoolWithTag;
          if( !PoolWithTag )
            return(unsigned int)-1073741801;
          LODWORD(a5a) = v12;
          v8 = ExpOsProductCacheProviderHelper(
                 v14,
                 (UINT64 *)&qword_140983950,
                 0i64,
                 (UINT64)PoolWithTag,
                 a5a,
                 (UINT8 *)&NumberOfBytes);
        }
        if( v8 < 0 )
          goto LABEL_32;
        v15 = qword_140D2C3F8(3i64, v9, 0i64);
        v8 = v15;
        if( v15 >= 0 && (v23 & 0x40) != 0 || v15 == -1073741198 )
        {
          v8 = 0;
          goto LABEL_30;
        }
      }
      else
      {
        v8 = -1073741637;
      }
      if( v8 < 0 )
      {
LABEL_32:
        if( v9 )
          ExFreePoolWithTag(v9, 0);
        return(unsigned int)v8;
      }
LABEL_30:
      if( !v20 )
      {
        LODWORD(a5a) = 2;
        v8 = sub_14094D46C(Data, (_DWORD *)DataSize, v6, a4, (INT64)a5a);
        *v24 = 1;
      }
      goto LABEL_32;
    }
  }
  return(unsigned int)v8;
}

Referenced by:

No references.