NtQueryEvent

INT64 __fastcall NtQueryEvent(
        VOID *EventHandle,
        _EVENT_INFORMATION_CLASS EventInformationClass,
        VOID *EventInformation,
        UINT64 EventInformationLength,
        UINT64 *ReturnLength){
  KPROCESSOR_MODE v7; 
  UINT64 *v8; 
  __int64 v9; 
  NTSTATUS v10; 
  int CrossVmEvent; 
  struct _DMA_ADAPTER *v12; 
  INT64 v14; 
  PVOID Object; 
  PVOID v16; 
  PVOID v17; 
  INT64 v18; 
  LODWORD(v18) = 0;
  LODWORD(v14) = 0;
  if( EventInformationClass )
    return 3221225475i64;
  if( (_DWORD)EventInformationLength != 8 )
    return 3221225476i64;
  v7 = *((_BYTE *)KeGetCurrentThread() + 562);
  if( v7 )
  {
    ProbeForWrite(EventInformation, 8ui64, 4ui64);
    v8 = ReturnLength;
    if( ReturnLength )
    {
      v9 = 0x7FFFFFFF0000i64;
      if( (unsigned __int64)ReturnLength < 0x7FFFFFFF0000i64 )
        v9 = (__int64)ReturnLength;
      *(_DWORD *)v9 = *(_DWORD *)v9;
    }
  }
  else
  {
    v8 = ReturnLength;
  }
  Object = 0i64;
  v10 = ObReferenceObjectByHandle(EventHandle, 1u, (POBJECT_TYPE)ExEventObjectType, v7, &Object, 0i64);
  CrossVmEvent = v10;
  v12 = (struct _DMA_ADAPTER *)Object;
  v17 = Object;
  LODWORD(Object) = v10;
  if( v10 < 0 )
  {
    if( v10 == -1073741788 )
    {
      if( ExCrossVmEventObjectType )
      {
        v16 = 0i64;
        CrossVmEvent = ObReferenceObjectByHandle(EventHandle, 1u, ExCrossVmEventObjectType, v7, &v16, 0i64);
        v12 = (struct _DMA_ADAPTER *)v16;
        v17 = v16;
        LODWORD(Object) = CrossVmEvent;
        if( CrossVmEvent >= 0 )
        {
          CrossVmEvent = ExpQueryCrossVmEvent((INT64)v16, (INT64)&v18, (INT64)&v14);
          LODWORD(Object) = CrossVmEvent;
        }
      }
    }
  }
  else
  {
    LODWORD(v14) = *(_DWORD *)(&v12->Size + 1);
    LODWORD(v18) = v12->Version & 0x7F;
  }
  if( CrossVmEvent >= 0 )
  {
    if( v7 )
    {
      *(_DWORD *)EventInformation = v18;
      *((_DWORD *)EventInformation + 1) = v14;
      if( v8 )
        *(_DWORD *)v8 = 8;
    }
    else
    {
      *(_DWORD *)EventInformation = v18;
      *((_DWORD *)EventInformation + 1) = v14;
      if( v8 )
        *(_DWORD *)v8 = 8;
    }
  }
  if( v12 )
    HalPutDmaAdapter(v12);
  return(unsigned int)CrossVmEvent;
}

Referenced by:

No references.