IoDisconnectInterruptEx

VOID __stdcall IoDisconnectInterruptEx(_IO_DISCONNECT_INTERRUPT_PARAMETERS *Parameters){
  _DWORD *Generic; 
  unsigned int j; 
  unsigned int i; 
  if( Parameters->Version == 1 )
    goto LABEL_5;
  if( Parameters->Version == 2 )
  {
    Generic = Parameters->ConnectionContext.Generic;
    for( i = 0; i < Generic[73]; ++i )
      IoDisconnectInterrupt((PKINTERRUPT)(*(_QWORD *)&Generic[2 * i + 74] + 112i64));
  }
  else
  {
    if( Parameters->Version != 3 )
    {
      if( Parameters->Version == 4 )
      {
LABEL_5:
        IoDisconnectInterrupt(Parameters->ConnectionContext.InterruptObject);
        return;
      }
      if( Parameters->Version != 5 )
        KeBugCheckEx(0xCAu, 9ui64, Parameters->Version, 0i64, 0i64);
    }
    Generic = Parameters->ConnectionContext.Generic;
    for( j = 0; j < Generic[1]; ++j )
      IoDisconnectInterrupt(*(PKINTERRUPT *)&Generic[12 * j + 6]);
  }
  ExFreePoolWithTag(Generic, 0);
}

Referenced by:

No references.