PiUEventHandleVetoEvent

NTSTATUS __stdcall PiUEventHandleVetoEvent(
        FILE_OBJECT *FileObject,
        PVOID Buffer,
        UINT64 InputBufferLength,
        IO_STATUS_BLOCK *IoStatus){
  char *FsContext2; 
  NTSTATUS AllocatedFullProcessImageName; 
  _EPROCESS *v6; 
  UNICODE_STRING *v7; 
  char v8; 
  __int64 v9; 
  FAST_MUTEX *v10; 
  INT64 *v11; 
  INT64 v13; 
  _DWORD *v14; 
  __int64 v15; 
  NTSTATUS v16; 
  UNICODE_STRING *v17; 
  const char *ProcessImageFileName; 
  INT8 v19; 
  PVOID P; 
  struct _STRING DestinationString; 
  UNICODE_STRING v22; 
  _EPROCESS *Process; 
  __int64 v24; 
  FsContext2 = (char *)FileObject->FsContext2;
  Process = 0i64;
  P = 0i64;
  AllocatedFullProcessImageName = 0;
  v6 = 0i64;
  v7 = 0i64;
  v8 = 0;
  v22 = 0i64;
  if( FsContext2 && Buffer && (_DWORD)InputBufferLength == 8 )
  {
    v9 = *(_QWORD *)Buffer;
    v10 = (FAST_MUTEX *)*((_QWORD *)FsContext2 + 2);
    *(_QWORD *)&DestinationString.Length = *(_QWORD *)Buffer;
    KeAcquireGuardedMutex(v10);
    v11 = (INT64 *)*((_QWORD *)FsContext2 + 12);
    if( v11 == (INT64 *)(FsContext2 + 96) )
    {
      AllocatedFullProcessImageName = -1073741811;
      KeReleaseGuardedMutex(*((_FAST_MUTEX **)FsContext2 + 2));
      goto LABEL_11;
    }
    if( *(_BYTE *)(v11[3] + 69) )
    {
      KeAcquireGuardedMutex(&PiUEventUsermodeEventQueueLock);
      v13 = v11[3];
      v14 = *(_DWORD **)(v13 + 32);
      if( v14 )
      {
        v15 = *(_QWORD *)(v13 + 40);
        if( v15 )
        {
          if( !*v14 )
          {
            if( (_BYTE)v9 )
            {
              *v14 = *(_DWORD *)(&DestinationString.MaximumLength + 1);
              v16 = PsLookupProcessByProcessId(*((HANDLE *)FsContext2 + 6), (PEPROCESS *)&Process);
              v6 = Process;
              if( v16 < 0
                || (AllocatedFullProcessImageName = PsGetAllocatedFullProcessImageName((__int64)Process, &P),
                    AllocatedFullProcessImageName < 0) )
              {
                v7 = &v22;
                RtlInitUnicodeString(&v22, &word_1407CF120, (WCHAR)v17);
                AllocatedFullProcessImageName = 0;
              }
              else
              {
                v7 = (UNICODE_STRING *)P;
                if( !*(_WORD *)P )
                {
                  v8 = 1;
                  DestinationString = 0i64;
                  ExFreePoolWithTag(P, 0);
                  v7 = &v22;
                  ProcessImageFileName = (const char *)PsGetProcessImageFileName((__int64)v6);
                  RtlInitAnsiString(&DestinationString, ProcessImageFileName, v19);
                  RtlAnsiStringToUnicodeString(&v22, &DestinationString, 1u);
                }
              }
              if( v7->Length > 0x400u )
              {
                AllocatedFullProcessImageName = RtlStringCchCopyNW(
                                                  *(WCHAR **)(*(_QWORD *)(v11[3] + 40) + 8i64),
                                                  0x200ui64,
                                                  v7->Buffer,
                                                  0x1FFui64);
                *(_WORD *)(*(_QWORD *)(*(_QWORD *)(v11[3] + 40) + 8i64) + 1022i64) = 0;
                **(_WORD **)(v11[3] + 40) = 1024;
              }
              else
              {
                RtlCopyUnicodeString(*(UNICODE_STRING **)(v11[3] + 40), v7, v17);
              }
              KeSetEvent(*(PRKEVENT *)(v11[3] + 24), 0);
            }
            else
            {
              **(_WORD **)(v15 + 8) = 0;
              **(_WORD **)(v13 + 40) = 0;
              **(_DWORD **)(v13 + 32) = 0;
            }
          }
        }
      }
      KeReleaseGuardedMutex(&PiUEventUsermodeEventQueueLock);
    }
    PiUEventDequeuePendingEventWorker((INT64)FsContext2, v11, 1);
    KeReleaseGuardedMutex(*((_FAST_MUTEX **)FsContext2 + 2));
  }
  else
  {
    AllocatedFullProcessImageName = -1073741811;
  }
  if( v8 )
  {
    RtlFreeAnsiString(v7);
  }
  else if( v7 && v7 != &v22 )
  {
    ExFreePoolWithTag(v7, 0);
  }
  if( v6 )
    ObfDereferenceObjectWithTag(v6, 0x746C6644ui64);
LABEL_11:
  *(_QWORD *)(v24 + 8) = 0i64;
  return AllocatedFullProcessImageName;
}

Referenced by:

PiUEventHandleIoctl