ExpCovResetInformation

INT64 __fastcall ExpCovResetInformation(UINT64 rcx0, UINT64 a2){
  unsigned int v2; 
  int v5; 
  _ETHREAD *CurrentThread; 
  UNICODE_STRING *i; 
  UNICODE_STRING *v8; 
  unsigned int a4; 
  UNICODE_STRING StringIn; 
  INT64 a1[2]; 
  __int64 v12; 
  char v13[16]; 
  struct _UNICODE_STRING StringOut; 
  __int128 v15; 
  unsigned int v16; 
  __int128 a3; 
  v2 = a2;
  memset((INT64)v13, 0i64);
  StringIn = 0i64;
  a4 = 0;
  if( !ExCovMaxPagedPoolToUse )
    return 3221225506i64;
  if( v2 < 0x18 )
    return 3221225476i64;
  if( rcx0 >= 0x7FFFFFFF0000i64 )
    rcx0 = 0x7FFFFFFF0000i64;
  *(_OWORD *)a1 = *(_OWORD *)rcx0;
  v12 = *(_QWORD *)(rcx0 + 16);
  v5 = ExpCovReadRequestBuffer(a1, &StringIn, &a3, &a4);
  if( v5 >= 0 )
  {
    v16 = a4;
    v15 = a3;
    if( !StringIn.Buffer || (v5 = RtlDuplicateUnicodeString(1ui64, &StringIn, &StringOut), v5 >= 0) )
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --*((_WORD *)CurrentThread + 242);
      v5 = MmEnumerateSystemImages((__int64(__fastcall *)(PVOID *, __int64))ExpCovResetInfoCallBack, (__int64)v13);
      if( v5 >= 0 )
      {
        ExfAcquirePushLockExclusive(&ExpCovPushLock);
        for( i = ExpCovUnloadedModuleList;
              i != (UNICODE_STRING *)&ExpCovUnloadedModuleList;
              i = *(UNICODE_STRING **)&i->Length )
        {
          v8 = i;
          if( i[3].Buffer && ExpCovIsUnLoadedModulePresent(i, a4, &StringIn, &a3) == 1 )
          {
            i = (UNICODE_STRING *)i->Buffer;
            ExpCovDeleteUnloadedModuleEntry(v8);
          }
        }
        ExfReleasePushLock((_EX_PUSH_LOCK *__ptr32)&ExpCovPushLock);
      }
      KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
    }
  }
  if( StringIn.Buffer )
    RtlFreeAnsiString(&StringIn);
  if( StringOut.Buffer )
    RtlFreeAnsiString(&StringOut);
  return(unsigned int)v5;
}

Referenced by:

NtSetSystemInformation