ntoskrnl.exe: Do not send IRP to get device instance ID.
As it is demonstrated with tests added in MR 7889 Io functions in Windows do not send IRP for getting a device instance ID. To conform to this behavior a device instance ID is saved in struct wine_device for all PDOs. The root_pnp_device field intended for storing a device instance ID is removed.
IoGetDevicePropertyData, IoGetDeviceProperty, IoSetDevicePropertyData, IoRegisterDeviceInterface and IoOpenDeviceRegistryKey are now using saved device instance ID value. If there is no saved ID than it means they are called not with PDO and an error is returned as documented in MSDN. IoGetDevicePropertyData and IoSetDevicePropertyData crash on Windows when are called not with PDO. But I also return an error in this case.
Edited by Alexander Morozov