NtRemoveIoCompletion

NTSTATUS __stdcall NtRemoveIoCompletion(
        VOID *IoCompletionHandle,
        VOID **KeyContext,
        VOID **ApcContext,
        _IO_STATUS_BLOCK *IoStatusBlock,
        _LARGE_INTEGER *Timeout){
  char PreviousMode; 
  __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  _LARGE_INTEGER *v14; 
  NTSTATUS result; 
  NTSTATUS v16; 
  char NumEntriesRemoved[12]; 
  LONGLONG v18; 
  PVOID IoCompletionPtr; 
  __int128 IoCompletionInformation; 
  _IO_STATUS_BLOCK v21; 
  _LIST_ENTRY *EntryArray; 

  EntryArray = 0i64;
  IoCompletionInformation = 0i64;
  v21 = 0i64;
  memset(NumEntriesRemoved, 0, sizeof(NumEntriesRemoved));
  v18 = 0i64;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  if( PreviousMode )
  {
    v10 = (__int64)ApcContext;
    if( (unsigned __int64)ApcContext >= 0x7FFFFFFF0000i64 )
      v10 = 0x7FFFFFFF0000i64;
    *(_QWORD *)v10 = *(_QWORD *)v10;
    v11 = (__int64)KeyContext;
    if( (unsigned __int64)KeyContext >= 0x7FFFFFFF0000i64 )
      v11 = 0x7FFFFFFF0000i64;
    *(_QWORD *)v11 = *(_QWORD *)v11;
    v12 = (__int64)IoStatusBlock;
    if( (unsigned __int64)IoStatusBlock >= 0x7FFFFFFF0000i64 )
      v12 = 0x7FFFFFFF0000i64;
    *(_DWORD *)v12 = *(_DWORD *)v12;
    v13 = (__int64)Timeout;
    if( Timeout )
    {
      *(_QWORD *)&NumEntriesRemoved[4] = &v18;
      if( (unsigned __int64)Timeout >= 0x7FFFFFFF0000i64 )
        v13 = 0x7FFFFFFF0000i64;
      v18 = *(_QWORD *)v13;
    }
    v14 = *(_LARGE_INTEGER **)&NumEntriesRemoved[4];
  }
  else
  {
    v14 = *(_LARGE_INTEGER **)&NumEntriesRemoved[4];
    if( Timeout )
      v14 = Timeout;
  }
  IoCompletionPtr = 0i64;
  result = ObReferenceObjectByHandle(
             IoCompletionHandle,
             2ui64,
             IoCompletionObjectType,
             PreviousMode,
             &IoCompletionPtr,
             0i64);
  if( result >= 0 )
  {
    v16 = IoRemoveIoCompletion(
            (UINT64)IoCompletionPtr,
            (INT64)&IoCompletionInformation,
            (INT64 *)&EntryArray,
            1ui64,
            (UINT64 *)NumEntriesRemoved,
            PreviousMode,
            (INT64)v14,
            0);
    HalPutDmaAdapter((PADAPTER_OBJECT)IoCompletionPtr);
    if( !v16 )
    {
      *KeyContext = (VOID *)IoCompletionInformation;
      *ApcContext = (VOID *)*((_QWORD *)&IoCompletionInformation + 1);
      *IoStatusBlock = v21;
    }
    return v16;
  }
  return result;
}

Referenced by:

No references.