https://bugs.winehq.org/show_bug.cgi?id=39210
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords|regression | Status|NEEDINFO |NEW Component|-unknown |setupapi Version|unspecified |1.7.0 Summary|Dream Aquarium no longer |Dream Aquarium |starts |(screensaver) fails to read | |monitor power state | |('{4d36e96e-e325-11ce-bfc1- | |08002be10318}' device class | |GUID registry data missing)
--- Comment #7 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming. It's not a regression in Wine if the app vendor added new code to determine the monitor power state (previously not present).
At least two problems here.
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Dream Aquarium
$ WINEDEBUG=+tid,+seh,+relay,+setupapi wine ./Dream_Aquarium.scr -S >>log.txt 2>&1 ... 042:Call setupapi.SetupDiGetClassDevsW(007dfd34,00000000,00000000,00000002) ret=004158e4 0042:trace:setupapi:SetupDiGetClassDevsExW {4d36e96e-e325-11ce-bfc1-08002be10318} (null) (nil) 0x00000002 (nil) (null) (nil) 0042:warn:setupapi:SetupDiGetClassDevsExW unsupported flags 00000002 0042:trace:setupapi:SetupDiCreateDeviceInfoListExW {4d36e96e-e325-11ce-bfc1-08002be10318} (nil) (null) (nil) 0042:Call ntdll.RtlAllocateHeap(00110000,00000000,00000024) ret=7dd89d2e 0042:Ret ntdll.RtlAllocateHeap() retval=0014b830 ret=7dd89d2e 0042:trace:setupapi:SETUPDI_EnumerateDevices 0x14b830, {4d36e96e-e325-11ce-bfc1-08002be10318}, (null), 00000002 0042:Call advapi32.RegCreateKeyExW(80000002,7ddb2160 L"System\CurrentControlSet\Enum",00000000,00000000,00000000,00020019,00000000,007dfb3c,00000000) ret=7dd8c5f4 0042:Ret advapi32.RegCreateKeyExW() retval=00000000 ret=7dd8c5f4 0042:Call advapi32.RegEnumKeyExW(0000009c,00000000,007df928,007dfb34,00000000,00000000,00000000,00000000) ret=7dd8c6dd 0042:Ret advapi32.RegEnumKeyExW() retval=00000103 ret=7dd8c6dd 0042:Call advapi32.RegCloseKey(0000009c) ret=7dd8c779 0042:Ret advapi32.RegCloseKey() retval=00000000 ret=7dd8c779 0042:Ret setupapi.SetupDiGetClassDevsW() retval=0014b830 ret=004158e4 0042:Call setupapi.SetupDiEnumDeviceInfo(0014b830,00000000,007dfcc4) ret=0041594b 0042:trace:setupapi:SetupDiEnumDeviceInfo 0x14b830 0 0x7dfcc4 0042:Ret setupapi.SetupDiEnumDeviceInfo() retval=00000000 ret=0041594b 0042:Call KERNEL32.GetLastError() ret=004159ff 0042:Ret KERNEL32.GetLastError() retval=00000103 ret=004159ff 0042:Call setupapi.SetupDiDestroyDeviceInfoList(0014b830) ret=00415a5b 0042:trace:setupapi:SetupDiDestroyDeviceInfoList 0x14b830 ... 0042:Ret setupapi.SetupDiDestroyDeviceInfoList() retval=00000001 ret=00415a5b --- snip ---
'{4d36e96e-e325-11ce-bfc1-08002be10318}' device class instance(s) data is obviously missing.
MSDN:
--- quote --- System-Defined Device Setup Classes Available to Vendors
The following classes and GUIDs are defined by the operating system. Unless otherwise noted, these classes and GUIDs can be used to install devices (or drivers) on Windows 2000 and later versions of Windows: ... Monitor
Class = Monitor ClassGuid = {4d36e96e-e325-11ce-bfc1-08002be10318}
This class includes display monitors. An INF for a device of this class installs no device driver(s), but instead specifies the features of a particular monitor to be stored in the registry for use by drivers of video adapters. (Monitors are enumerated as the child devices of display adapters.)
... --- snip ---
Faking at least one monitor in registry allows to get it a bit further:
--- snip --- ... 0035:Call setupapi.SetupDiGetClassDevsW(007dfd34,00000000,00000000,00000002) ret=004158e4 0035:trace:setupapi:SetupDiGetClassDevsExW {4d36e96e-e325-11ce-bfc1-08002be10318} (null) (nil) 0x00000002 (nil) (null) (nil) 0035:warn:setupapi:SetupDiGetClassDevsExW unsupported flags 00000002 0035:trace:setupapi:SetupDiCreateDeviceInfoListExW {4d36e96e-e325-11ce-bfc1-08002be10318} (nil) (null) (nil) ... 0035:trace:setupapi:SETUPDI_EnumerateDevices 0x14c508, {4d36e96e-e325-11ce-bfc1-08002be10318}, (null), 00000002 ... 0035:trace:setupapi:SETUPDI_EnumerateMatchingDevices L"DISPLAY" 0035:Call advapi32.RegEnumKeyExW(000000a0,00000000,007df6b8,007df8c0,00000000,00000000,00000000,00000000) ret=7dcf9430 0035:Ret advapi32.RegEnumKeyExW() retval=00000000 ret=7dcf9430 0035:Call advapi32.RegOpenKeyExW(000000a0,007df6b8 L"Default_Monitor",00000000,00020019,007df6b4) ret=7dcf946f 0035:Ret advapi32.RegOpenKeyExW() retval=00000000 ret=7dcf946f 0035:trace:setupapi:SETUPDI_EnumerateMatchingDevices L"Default_Monitor" 0035:trace:setupapi:SETUPDI_EnumerateMatchingDeviceInstances L"DISPLAY" L"Default_Monitor" ... 0035:trace:setupapi:SETUPDI_AddDeviceToSet 0x14c508, {4d36e96e-e325-11ce-bfc1-08002be10318}, 0, L"DISPLAY\Default_Monitor\4&2abfaa30&0&00000001&00&02", 0 ... 0035:trace:setupapi:SetupDiSetDeviceRegistryPropertyW 0x14c508 0x14c620 8 0x7df352 76 0035:Call advapi32.RegSetValueExW(000000b0,7dd1efa4 L"ClassGUID",00000000,00000001,007df352,0000004c) ret=7dcfb8b1 0035:Ret advapi32.RegSetValueExW() retval=00000000 ret=7dcfb8b1 ... ... 0035:Ret setupapi.SetupDiGetClassDevsW() retval=0014c508 ret=004158e4 0035:Call setupapi.SetupDiEnumDeviceInfo(0014c508,00000000,007dfcc4) ret=0041594b 0035:trace:setupapi:SetupDiEnumDeviceInfo 0x14c508 0 0x7dfcc4 0035:Ret setupapi.SetupDiEnumDeviceInfo() retval=00000001 ret=0041594b 0035:Call setupapi.SetupDiGetDeviceRegistryPropertyW(0014c508,007dfcc4,00000000,00000000,00000000,00000000,007df828) ret=004151f9 0035:trace:setupapi:SetupDiGetDeviceRegistryPropertyW 14c508 0x7dfcc4 0 (nil) (nil) 0 0x7df828 0035:Call advapi32.RegQueryValueExW(000000b0,7dd1f19c L"DeviceDesc",00000000,00000000,00000000,007df75c) ret=7dcfb519 0035:Ret advapi32.RegQueryValueExW() retval=00000000 ret=7dcfb519 0035:Ret setupapi.SetupDiGetDeviceRegistryPropertyW() retval=00000000 ret=004151f9 ... 0035:Call setupapi.SetupDiGetDeviceRegistryPropertyW(0014c508,007dfcc4,00000000,00000000,007df84c,00000400,00000000) ret=004152b2 0035:trace:setupapi:SetupDiGetDeviceRegistryPropertyW 14c508 0x7dfcc4 0 (nil) 0x7df84c 1024 (nil) 0035:Call advapi32.RegQueryValueExW(000000b0,7dd1f19c L"DeviceDesc",00000000,00000000,007df84c,007df75c) ret=7dcfb519 0035:Ret advapi32.RegQueryValueExW() retval=00000000 ret=7dcfb519 0035:Ret setupapi.SetupDiGetDeviceRegistryPropertyW() retval=00000001 ret=004152b2 0035:Call KERNEL32.GetLastError() ret=004bdc45 0035:Ret KERNEL32.GetLastError() retval=0000007a ret=004bdc45 ... 0035:Call setupapi.SetupDiGetDeviceRegistryPropertyW(0014c508,007dfcc4,0000001e,00000000,007dfc8c,00000038,00000000) ret=00415839 0035:trace:setupapi:SetupDiGetDeviceRegistryPropertyW 14c508 0x7dfcc4 30 (nil) 0x7dfc8c 56 (nil) 0035:Ret setupapi.SetupDiGetDeviceRegistryPropertyW() retval=00000000 ret=00415839 ... 0035:Call setupapi.SetupDiEnumDeviceInfo(0014c508,00000001,007dfcc4) ret=004159ef 0035:trace:setupapi:SetupDiEnumDeviceInfo 0x14c508 1 0x7dfcc4 0035:Ret setupapi.SetupDiEnumDeviceInfo() retval=00000000 ret=004159ef 0035:Call KERNEL32.GetLastError() ret=004159ff 0035:Ret KERNEL32.GetLastError() retval=00000103 ret=004159ff 0035:Call setupapi.SetupDiDestroyDeviceInfoList(0014c508) ret=00415a5b 0035:trace:setupapi:SetupDiDestroyDeviceInfoList 0x14c508 ... --- snip ---
0x1e = SPDRP_DEVICE_POWER_DATA -> not handled
Source: https://source.winehq.org/git/wine.git/blob/ab92627e19f10d7ad23abb101b21ec7b...
--- snip --- 3047 static const struct PropertyMapEntry PropertyMap[] = { 3048 { REG_SZ, "DeviceDesc", DeviceDesc }, 3049 { REG_MULTI_SZ, "HardwareId", HardwareId }, 3050 { REG_MULTI_SZ, "CompatibleIDs", CompatibleIDs }, 3051 { 0, NULL, NULL }, /* SPDRP_UNUSED0 */ 3052 { REG_SZ, "Service", Service }, 3053 { 0, NULL, NULL }, /* SPDRP_UNUSED1 */ 3054 { 0, NULL, NULL }, /* SPDRP_UNUSED2 */ 3055 { REG_SZ, "Class", Class }, 3056 { REG_SZ, "ClassGUID", ClassGUID }, 3057 { REG_SZ, "Driver", Driver }, 3058 { REG_DWORD, "ConfigFlags", ConfigFlags }, 3059 { REG_SZ, "Mfg", Mfg }, 3060 { REG_SZ, "FriendlyName", FriendlyName }, 3061 { REG_SZ, "LocationInformation", LocationInformation }, 3062 { 0, NULL, NULL }, /* SPDRP_PHYSICAL_DEVICE_OBJECT_NAME */ 3063 { REG_DWORD, "Capabilities", Capabilities }, 3064 { REG_DWORD, "UINumber", UINumber }, 3065 { REG_MULTI_SZ, "UpperFilters", UpperFilters }, 3066 { REG_MULTI_SZ, "LowerFilters", LowerFilters }, 3067 }; --- snip ---
MSDN: https://msdn.microsoft.com/en-us/library/windows/hardware/ff551967%28v=vs.85...
--- quote --- The SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property.
BOOL SetupDiGetDeviceRegistryProperty( _In_ HDEVINFO DeviceInfoSet, _In_ PSP_DEVINFO_DATA DeviceInfoData, _In_ DWORD Property, _Out_opt_ PDWORD PropertyRegDataType, _Out_opt_ PBYTE PropertyBuffer, _In_ DWORD PropertyBufferSize, _Out_opt_ PDWORD RequiredSize );
Parameters
DeviceInfoSet [in]
A handle to a device information set that contains a device information element that represents the device for which to retrieve a Plug and Play property. DeviceInfoData [in]
A pointer to an SP_DEVINFO_DATA structure that specifies the device information element in DeviceInfoSet. Property [in]
One of the following values that specifies the property to be retrieved: ... SPDRP_DEVICE_POWER_DATA
(Windows XP and later) The function retrieves a CM_POWER_DATA structure that contains the device's power management information.
--- quote ---
ProtectionID for documentation:
--- snip --- -=[ ProtectionID v0.6.7.0 OCTOBER]=- (c) 2003-2015 CDKiLLER & TippeX Build 31/10/15-14:35:10 Ready... Scanning -> Z:\home\focht\Downloads\DreamAquariumXP.exe File Type : 32-Bit Exe (Subsystem : Win GUI / 2), Size : 8684083 (0848233h) Byte(s) | Machine: 0x14C (I386) Compilation TimeStamp : 0x4B1AE3CC -> Sat 05th Dec 2009 22:50:52 (GMT) [TimeStamp] 0x4B1AE3CC -> Sat 05th Dec 2009 22:50:52 (GMT) | PE Header | - | Offset: 0x000000E0 | VA: 0x004000E0 | - -> File has 8635955 (083C633h) bytes of appended data starting at offset 0BC00h [File Heuristics] -> Flag #1 : 00000000000001011100000000000100 (0x0005C004) [Entrypoint Section Entropy] : 6.51 (section #0) ".text " | Size : 0x5C4C (23628) byte(s) [DllCharacteristics] -> Flag : (0x8000) -> TSA [SectionCount] 5 (0x5) | ImageSize 0x3D000 (249856) byte(s) [-= Installer =-] Nullsoft SFX Setup v2.46 - Scan Took : 0.327 Second(s) [000000147h (327) tick(s)] [562 of 577 scan(s) done]
Scanning -> C:\Program Files\Dream Aquarium\Dream_Aquarium.scr File Type : 32-Bit Exe (Subsystem : Win GUI / 2), Size : 1887744 (01CCE00h) Byte(s) | Machine: 0x14C (I386) Compilation TimeStamp : 0x5269B2A9 -> Thu 24th Oct 2013 23:52:09 (GMT) [TimeStamp] 0x5269B2A9 -> Thu 24th Oct 2013 23:52:09 (GMT) | PE Header | - | Offset: 0x00000110 | VA: 0x00400110 | - [File Heuristics] -> Flag #1 : 00000000000001001100010000000000 (0x0004C400) [Entrypoint Section Entropy] : 6.75 (section #0) ".text " | Size : 0x174DBC (1527228) byte(s) [DllCharacteristics] -> Flag : (0x8000) -> TSA [SectionCount] 4 (0x4) | ImageSize 0x1DA000 (1941504) byte(s) [CdKeySerial] found "Trial version" @ VA: 0x00179980 / Offset: 0x00178B80 ... [CompilerDetect] -> Visual C++ 9.0 (Visual Studio 2008) [!] File appears to have no protection or is using an unknown protection - Scan Took : 0.747 Second(s) [0000002EBh (747) tick(s)] [503 of 577 scan(s) done] --- snip ---
Resource section present but no version resource at all. Software release/version management at its best.
$ sha1sum DreamAquariumXP.exe ac95161c1e675a8eb6102f339fcae52e02f5659b DreamAquariumXP.exe
$ du -sh DreamAquariumXP.exe 8.3M DreamAquariumXP.exe
$ wine --version wine-1.8-rc1-89-g4a315cd
Regards