EtwpLocateDbgIdForRegEntry

NTSTATUS __stdcall EtwpLocateDbgIdForRegEntry(CHAR a1, INT64 a2, _XSTATE_CONFIGURATION *a3, _XSTATE_CONFIGURATION *a4){
  VOID *v6; 
  _ETHREAD *CurrentThread; 
  NTSTATUS result; 
  UINT64 v9; 
  UINT64 ImageSize; 
  VOID *ImageBase; 
  __int64 v12; 
  int v13; 

  v13 = 0;
  v12 = 0i64;
  ImageBase = 0i64;
  ImageSize = 0i64;
  v6 = *(VOID **)(a2 + 88);
  if( !v6 )
    return -1073741503;
  if( !a1 )
  {
    RtlPcToFileHeader(v6, &ImageBase);
    if( !ImageBase )
      return -1073741275;
LABEL_5:
    result = RtlImageNtHeaderEx(1, (unsigned __int64)ImageBase & 0xFFFFFFFFFFFFFFFCui64, ImageSize, &v12);
    if( result >= 0 )
    {
      v9 = ImageSize;
      if( !ImageSize )
      {
        result = EtwpGetImageSize(v12, &ImageSize);
        v9 = ImageSize;
      }
      if( result >= 0 )
      {
        if( a1 == 1
          && v9
          && ((unsigned __int64)ImageBase + v9 > 0x7FFFFFFF0000i64 || (char *)ImageBase + v9 < ImageBase) )
        {
          MEMORY[0x7FFFFFFF0000] = 0;
          v9 = ImageSize;
        }
        return EtwpFindDebugId(ImageBase, v9, 0i64, &a3->EnabledFeatures);
      }
    }
    return result;
  }
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  if( (*(_BYTE *)&CurrentThread->Tcb.ApcState.Process->Pcb.SecureState & 1) != 0 )
    return VslGetEtwDebugId(
             (INT64)CurrentThread->Tcb.ApcState.Process,
             *(_QWORD *)(a2 + 88),
             (INT64 *)a3,
             &a4->EnabledFeatures);
  result = MmGetImageInformation(v6, &ImageBase, &ImageSize, &v13);
  if( result >= 0 )
    goto LABEL_5;
  return result;
}

Referenced by:

EtwpProviderArrivalCallback