NtQueryEvent

__int64 __fastcall NtQueryEvent(VOID *Handle, int a2, _DWORD *a3, _KPROCESSOR_MODE a4, __int64 a5){
  char PreviousMode; 
  _DWORD *v8; 
  __int64 v9; 
  NTSTATUS v10; 
  NTSTATUS CrossVmEvent; 
  _ADAPTER_OBJECT *v12; 
  INT64 v14; 
  PVOID Object; 
  PVOID v16; 
  PVOID v17; 
  INT64 v18; 

  LODWORD(v18) = 0;
  LODWORD(v14) = 0;
  if( a2 )
    return 3221225475i64;
  if( a4 != 8 )
    return 3221225476i64;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  if( PreviousMode )
  {
    ProbeForWrite((UINT64)a3, 8i64, 4i64);
    v8 = (_DWORD *)a5;
    if( a5 )
    {
      v9 = 0x7FFFFFFF0000i64;
      if( (unsigned __int64)a5 < 0x7FFFFFFF0000i64 )
        v9 = a5;
      *(_DWORD *)v9 = *(_DWORD *)v9;
    }
  }
  else
  {
    v8 = (_DWORD *)a5;
  }
  Object = 0i64;
  v10 = ObReferenceObjectByHandle(Handle, 1ui64, (_OBJECT_TYPE *)ExEventObjectType, PreviousMode, &Object, 0i64);
  CrossVmEvent = v10;
  v12 = (_ADAPTER_OBJECT *)Object;
  v17 = Object;
  LODWORD(Object) = v10;
  if( v10 < 0 )
  {
    if( v10 == -1073741788 )
    {
      if( *(&WheapDeferredInternalLogsEventLock + 55) )
      {
        v16 = 0i64;
        CrossVmEvent = ObReferenceObjectByHandle(
                         Handle,
                         1ui64,
                         *(&WheapDeferredInternalLogsEventLock + 55),
                         PreviousMode,
                         &v16,
                         0i64);
        v12 = (_ADAPTER_OBJECT *)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->AdapterObject.DmaHeader.Size + 1);
    LODWORD(v18) = v12->AdapterObject.DmaHeader.Version & 0x7F;
  }
  if( CrossVmEvent >= 0 )
  {
    if( PreviousMode )
    {
      *a3 = v18;
      a3[1] = v14;
      if( v8 )
        *v8 = 8;
    }
    else
    {
      *a3 = v18;
      a3[1] = v14;
      if( v8 )
        *v8 = 8;
    }
  }
  if( v12 )
    HalPutDmaAdapter(v12);
  return(unsigned int)CrossVmEvent;
}

Referenced by:

No references.