IopDeleteDriver

VOID __stdcall IopDeleteDriver(PVOID Object){
  _QWORD *v2; 
  _QWORD *v3; 
  void *v4; 
  _QWORD *v5; 
  void *v6; 
  void *v7; 
  void *v8; 
  v2 = *(_QWORD **)(*((_QWORD *)Object + 6) + 40i64);
  if( v2 )
  {
    do
    {
      v3 = (_QWORD *)*v2;
      ExFreePoolWithTag(v2, 0);
      v2 = v3;
    }
    while( v3 );
  }
  if( (*((_DWORD *)Object + 4) & 0x200) != 0 )
    IoUnregisterPriorityCallback((_DRIVER_OBJECT *)Object);
  if( *((_QWORD *)Object + 5) )
  {
    KeFlushQueuedDpcs();
    MmUnloadSystemImage(*((VOID **)Object + 5));
    PnpRequestDeviceAction(*((_DEVICE_OBJECT **)IopRootDeviceNode + 4), ClearProblem, 0, 0x26ui64, 0i64, 0i64);
  }
  v4 = (void *)*((_QWORD *)Object + 8);
  if( v4 )
    ExFreePoolWithTag(v4, 0);
  v5 = (_QWORD *)*((_QWORD *)Object + 6);
  v6 = (void *)v5[4];
  if( v6 )
  {
    ExFreePoolWithTag(v6, 0);
    v5 = (_QWORD *)*((_QWORD *)Object + 6);
  }
  v7 = (void *)v5[6];
  if( v7 )
  {
    ExFreePoolWithTag(v7, 0);
    v5 = (_QWORD *)*((_QWORD *)Object + 6);
  }
  v8 = (void *)v5[7];
  if( v8 )
    ExFreePoolWithTag(v8, 0);
}

Referenced by:

No references.