ExpCovReadRequestBuffer

NTSTATUS __stdcall ExpCovReadRequestBuffer(
        _COVERAGE_MODULE_REQUEST *ModuleRequestInfo,
        _UNICODE_STRING *ModuleName,
        UINT8 *MD5Hash,
        _COVERAGE_REQUEST_CODES *RequestType){
  NTSTATUS v5; 
  _COVERAGE_REQUEST_CODES v6; 
  __int32 v7; 
  unsigned __int16 v8; 
  wchar_t *Buffer; 
  UINT64 v10; 
  wchar_t *v11; 
  VOID **PoolWithTag; 
  VOID **v13; 
  _UNICODE_STRING StringIn; 

  v5 = 0;
  v6 = ModuleRequestInfo->RequestType;
  *RequestType = ModuleRequestInfo->RequestType;
  if( v6 )
  {
    v7 = v6 - 1;
    if( v7 )
    {
      if( v7 == 1
        && (StringIn = *(_UNICODE_STRING *)((char *)&ModuleRequestInfo->SearchInfo + 4),
            (v8 = _mm_cvtsi128_si32((__m128i)StringIn)) != 0)
        && (v8 & 1) == 0 )
      {
        Buffer = StringIn.Buffer;
        if( ((__int64)StringIn.Buffer & 1) != 0 )
          ExRaiseDatatypeMisalignment();
        v10 = v8;
        v11 = (wchar_t *)((char *)StringIn.Buffer + v8);
        if( (unsigned __int64)v11 > 0x7FFFFFFF0000i64 || v11 < StringIn.Buffer )
          MEMORY[0x7FFFFFFF0000] = 0;
        PoolWithTag = ExAllocatePoolWithTag(1ui64, v10, 1920364355i64);
        v13 = PoolWithTag;
        StringIn.Buffer = (wchar_t *)PoolWithTag;
        if( PoolWithTag )
        {
          memset(PoolWithTag, 0i64, v10);
          memmove(v13, Buffer, v10);
          v5 = RtlDuplicateUnicodeString(1ui64, &StringIn, ModuleName);
          ExFreePoolWithTag(v13, 0);
        }
        else
        {
          return -1073741670;
        }
      }
      else
      {
        return -1073741811;
      }
    }
    else
    {
      *($44235BE70204DD86C27F5084799471BF *)MD5Hash = *($44235BE70204DD86C27F5084799471BF *)((char *)&ModuleRequestInfo->SearchInfo
                                                                                           + 4);
    }
  }
  return v5;
}

Referenced by:

ExpCovQueryInformation
ExpCovResetInformation