PipClearDevNodeUserFlags
VOID __stdcall PipClearDevNodeUserFlags(_DEVICE_NODE *DeviceNode, UINT64 Flags){
unsigned int UserFlags;
int v3;
wchar_t *Buffer;
INT64 v6;
INT64 v7;
UserFlags = DeviceNode->UserFlags;
v3 = UserFlags & ~(_DWORD)Flags;
DeviceNode->UserFlags = v3;
if( (((unsigned __int16)UserFlags ^ (unsigned __int16)v3) & 0x347) != 0 )
{
Buffer = DeviceNode->InstancePath.Buffer;
if( Buffer )
{
PnpRaiseNtPlugPlayDevicePropertyChangeEvent((INT64)DeviceNode, Buffer, 11);
v6 = DeviceNode->UserFlags;
if( (((unsigned __int8)UserFlags ^ LOBYTE(DeviceNode->UserFlags)) & 0x40) != 0 )
{
PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v6, DeviceNode->InstancePath.Buffer, 29);
LODWORD(v6) = DeviceNode->UserFlags;
}
v7 = UserFlags ^ (unsigned int)v6;
if( (v7 & 4) != 0 )
PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v7, DeviceNode->InstancePath.Buffer, 30);
}
}
}Referenced by:
IopRemoveDevice
PiDevCfgProcessDevice
PiProcessNewDeviceNode
PiProcessQueryDeviceState
PnpProcessAssignResources
PnpQueryRemoveLockedDeviceNode
PnpRestartDeviceNode
PnpTrackQueryRemoveDevices