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