PnpSetDeviceRemovalSafe

__int64 __fastcall PnpSetDeviceRemovalSafe(PVOID Object){
  __int64 v3; 
  int v4; 
  VOID **DeviceEventEntry; 
  const VOID *v6; 

  if( *(&PnpReplaceEvent + 1665) )
    return 3221225865i64;
  if( Object )
    v3 = *(_QWORD *)(*((_QWORD *)Object + 39) + 40i64);
  else
    v3 = 0i64;
  v4 = *(unsigned __int16 *)(v3 + 40) + 82;
  DeviceEventEntry = PnpCreateDeviceEventEntry((unsigned int)*(unsigned __int16 *)(v3 + 40) + 194);
  if( !DeviceEventEntry )
    return 3221225626i64;
  ObfReferenceObjectWithTag(Object, 0x56706E50ui64);
  DeviceEventEntry[3] = 0i64;
  DeviceEventEntry[2] = 0i64;
  DeviceEventEntry[6] = 0i64;
  DeviceEventEntry[7] = 0i64;
  *((_DWORD *)DeviceEventEntry + 32) = 1;
  DeviceEventEntry[17] = 0i64;
  *((GUID *)DeviceEventEntry + 7) = GUID_DEVICE_SAFE_REMOVAL;
  *((_DWORD *)DeviceEventEntry + 36) = 0;
  *((_DWORD *)DeviceEventEntry + 37) = v4;
  DeviceEventEntry[19] = Object;
  v6 = *(const VOID **)(v3 + 48);
  if( v6 )
    memmove(DeviceEventEntry + 20, v6, *(unsigned __int16 *)(v3 + 40));
  *((_WORD *)DeviceEventEntry + ((unsigned __int64)*(unsigned __int16 *)(v3 + 40) >> 1) + 80) = 0;
  return PnpInsertEventInQueue((__int64)DeviceEventEntry);
}

Referenced by:

PnpProcessCompletedEject