IopWarmEjectDevice

VOID __fastcall IopWarmEjectDevice(_DEVICE_OBJECT *DeviceToEject, _SYSTEM_POWER_STATE LightestSleepState){
  __int64 v4; 
  NTSTATUS v5; 
  __int64 v6; 

  KeWaitForSingleObject((UINT64)&PnpReplaceEvent + 6624, 0, 0, 0, 0i64);
  PpDevNodeLockTree(PPL_TREEOP_ALLOW_READS);
  *(&PnpReplaceEvent + 824) = DeviceToEject;
  PpDevNodeUnlockTree(PPL_TREEOP_ALLOW_READS);
  v5 = NtInitiatePowerAction(PowerActionWarmEject, LightestSleepState, 3ui64, 0);
  if( v5 == -1073741727 )
    PnpSetPowerVetoEvent(7, v4, v6, DeviceToEject, 12, 0i64);
  PpDevNodeLockTree(PPL_TREEOP_ALLOW_READS);
  if( *(&PnpReplaceEvent + 824) )
    *(&PnpReplaceEvent + 824) = 0i64;
  PpDevNodeUnlockTree(PPL_TREEOP_ALLOW_READS);
  KeSetEvent((PRKEVENT)((char *)&PnpReplaceEvent + 6624), 0, 0);
}

Referenced by:

PnpProcessCompletedEject