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