NtCreateIoCompletion

NTSTATUS __stdcall NtCreateIoCompletion(
        PVOID *IoCompletionHandle,
        UINT64 DesiredAccess,
        OBJECT_ATTRIBUTES *ObjectAttributes,
        UINT64 a4){
  unsigned int v4; 
  unsigned int v5; 
  char v7; 
  __int64 v8; 
  NTSTATUS Object; 
  UINT64 v10; 
  _QWORD *v11; 
  __int64 v13; 
  __int64 v14; 
  PVOID Handle; 
  void *Queue[4]; 
  v4 = a4;
  v5 = DesiredAccess;
  Handle = 0i64;
  Queue[0] = 0i64;
  v7 = *((_BYTE *)KeGetCurrentThread() + 562);
  if( v7 )
  {
    v8 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)IoCompletionHandle < 0x7FFFFFFF0000i64 )
      v8 = (__int64)IoCompletionHandle;
    *(_QWORD *)v8 = *(_QWORD *)v8;
  }
  Object = ObCreateObjectEx(v7, IoCompletionObjectType, (__int64)ObjectAttributes, v7, v13, 80, 0, 0, Queue, 0i64);
  if( Object >= 0 )
  {
    v10 = v4;
    v11 = Queue[0];
    KeInitializeQueue((_KQUEUE *)Queue[0], v10);
    v11[8] = 0i64;
    *((_BYTE *)v11 + 72) = 0;
    LODWORD(v14) = 0;
    Object = ObInsertObjectEx(v11, 0i64, v5, 0i64, v14, 0i64, &Handle);
    if( Object >= 0 )
      *IoCompletionHandle = Handle;
  }
  return Object;
}

Referenced by:

No references.