ExpCovResetInformation

UINT8 __fastcall ExpCovResetInformation(
        _COVERAGE_MODULE_REQUEST *UserModuleInformation,
        UINT64 ModuleInformationLength,
        PS_PROTECTION TargetProtection){
  unsigned int v3; 
  int v6; 
  _ETHREAD *CurrentThread; 
  _UNICODE_STRING *i; 
  _UNICODE_STRING *v9; 
  _COVERAGE_REQUEST_CODES RequestType; 
  _UNICODE_STRING ModuleName; 
  char ModuleRequestInfo[24]; 
  _UNICODE_STRING v13[4]; 
  UINT8 MD5Hash[16]; 

  v3 = ModuleInformationLength;
  memset(v13, 0i64, sizeof(v13));
  ModuleName = 0i64;
  RequestType = CoverageAllModules;
  if( !ExCovMaxPagedPoolToUse )
    return 34;
  if( v3 < 0x18 )
    return 4;
  if( (unsigned __int64)UserModuleInformation >= 0x7FFFFFFF0000i64 )
    UserModuleInformation = (_COVERAGE_MODULE_REQUEST *)0x7FFFFFFF0000i64;
  *(_OWORD *)ModuleRequestInfo = *(_OWORD *)&UserModuleInformation->RequestType;
  *(_QWORD *)&ModuleRequestInfo[16] = *(_QWORD *)&UserModuleInformation->SearchInfo.ModuleName[12];
  v6 = ExpCovReadRequestBuffer((_COVERAGE_MODULE_REQUEST *)ModuleRequestInfo, &ModuleName, MD5Hash, &RequestType);
  if( v6 >= 0 )
  {
    *(_DWORD *)&v13[3].Length = RequestType;
    v13[2] = *(_UNICODE_STRING *)MD5Hash;
    if( !ModuleName.Buffer || (v6 = RtlDuplicateUnicodeString(1ui64, &ModuleName, &v13[1]), v6 >= 0) )
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --CurrentThread->Tcb.KernelApcDisable;
      v6 = MmEnumerateSystemImages((__int64(__fastcall *)(INT64 *, __int64))ExpCovResetInfoCallBack, (__int64)v13);
      if( v6 >= 0 )
      {
        ExfAcquirePushLockExclusive((UINT64 *)&WheapDeferredInternalLogsEventLock + 86);
        for( i = (_UNICODE_STRING *)*(&WheapDeferredInternalLogsEventLock + 84);
              i != (_UNICODE_STRING *)((char *)&WheapDeferredInternalLogsEventLock + 672);
              i = *(_UNICODE_STRING **)&i->Length )
        {
          v9 = i;
          if( i[3].Buffer
            && ExpCovIsUnLoadedModulePresent((_COVERAGE_UNLOADED_MODULE_ENTRY *)i, RequestType, &ModuleName, MD5Hash) == 1 )
          {
            i = (_UNICODE_STRING *)i->Buffer;
            ExpCovDeleteUnloadedModuleEntry(v9);
          }
        }
        ExfReleasePushLock((_EX_PUSH_LOCK *)&WheapDeferredInternalLogsEventLock + 86);
      }
      KeLeaveCriticalRegionThread(KeGetCurrentThread());
    }
  }
  if( ModuleName.Buffer )
    RtlFreeAnsiString(&ModuleName);
  if( v13[1].Buffer )
    RtlFreeAnsiString(&v13[1]);
  return v6;
}

Referenced by:

NtSetSystemInformation