SmCreateEvent

NTSTATUS __stdcall SmCreateEvent(_KEVENT **EventOut){
  PVOID *v1; 
  PVOID *v2; 
  int Event; 
  NTSTATUS v4; 
  _ADAPTER_OBJECT *v5; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  void *EventHandle; 
  PVOID Object; 

  memset(&ObjectAttributes.Length + 1, 0, 20);
  memset(&ObjectAttributes.Attributes + 1, 0, 20);
  EventHandle = 0i64;
  v2 = v1;
  ObjectAttributes.Length = 48;
  ObjectAttributes.Attributes = 512;
  Event = ZwCreateEvent((UINT64)&EventHandle, 0x1F0003ui64, (INT64)&ObjectAttributes, 1ui64, 0);
  if( Event >= 0 )
  {
    Object = 0i64;
    v4 = ObReferenceObjectByHandle(EventHandle, 0x1F0003ui64, (_OBJECT_TYPE *)ExEventObjectType, 0, &Object, 0i64);
    v5 = (_ADAPTER_OBJECT *)Object;
    Event = v4;
    if( v4 >= 0 )
    {
      *v2 = Object;
      v5 = 0i64;
      Event = 0;
    }
    if( v5 )
      HalPutDmaAdapter(v5);
  }
  if( EventHandle )
    ZwClose((_HANDLE)EventHandle);
  return Event;
}

Referenced by:

SmRegistrationCtxStart