PnpSetDeviceRemovalSafe

VOID __fastcall PnpSetDeviceRemovalSafe(_DEVICE_OBJECT *DeviceObject, _KEVENT *SyncEvent, UINT64 *Result){
  __int64 v4; 
  int v5; 
  _DWORD *DeviceEventEntry; 
  UINT8 *v7; 
  if( !PnpShutdownEvent.Header.SignalState )
  {
    v4 = DeviceObject ? *(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64) : 0i64;
    v5 = *(unsigned __int16 *)(v4 + 40) + 82;
    DeviceEventEntry = PnpCreateDeviceEventEntry((unsigned int)*(unsigned __int16 *)(v4 + 40) + 194);
    if( DeviceEventEntry )
    {
      ObfReferenceObjectWithTag(DeviceObject, 0x56706E50u);
      *((_QWORD *)DeviceEventEntry + 3) = 0i64;
      *((_QWORD *)DeviceEventEntry + 2) = 0i64;
      *((_QWORD *)DeviceEventEntry + 6) = 0i64;
      *((_QWORD *)DeviceEventEntry + 7) = 0i64;
      DeviceEventEntry[32] = 1;
      *((_QWORD *)DeviceEventEntry + 17) = 0i64;
      *((GUID *)DeviceEventEntry + 7) = GUID_DEVICE_SAFE_REMOVAL;
      DeviceEventEntry[36] = 0;
      DeviceEventEntry[37] = v5;
      *((_QWORD *)DeviceEventEntry + 19) = DeviceObject;
      v7 = *(UINT8 **)(v4 + 48);
      if( v7 )
        memmove((UINT8 *)DeviceEventEntry + 160, v7, *(unsigned __int16 *)(v4 + 40));
      *((_WORD *)DeviceEventEntry + ((unsigned __int64)*(unsigned __int16 *)(v4 + 40) >> 1) + 80) = 0;
      PnpInsertEventInQueue((__int64)DeviceEventEntry);
    }
  }
}

Referenced by:

PnpProcessCompletedEject