From b04636aa97d36683064c548c7df0521563c987b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 26 Jul 2014 03:22:25 +0200 Subject: [PATCH] Add patch to populate HKEY_DYN_DATA. --- README.md | 1 + patches/Makefile | 19 +++ ...e-generic-hardware-in-HKEY_DYN_DATA-.patch | 137 ++++++++++++++++++ patches/wineboot-HKEY_DYN_DATA/definition | 4 + 4 files changed, 161 insertions(+) create mode 100644 patches/wineboot-HKEY_DYN_DATA/0001-wineboot-Add-some-generic-hardware-in-HKEY_DYN_DATA-.patch create mode 100644 patches/wineboot-HKEY_DYN_DATA/definition diff --git a/README.md b/README.md index 276a0ac1..cbab4e9b 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Wine to run common Windows applications under Linux. These patches fix the following Wine bugs: * Support for TransmitFile ([Wine Bug #5048](http://bugs.winehq.org/show_bug.cgi?id=5048 "Multiple applications and games need support for ws2_32 SIO_GET_EXTENSION_FUNCTION_POINTER TransmitFile (WSAID_TRANSMITFILE)")) +* Need for Speed 3 installer requires devices in HKEY_DYN_DATA ([Wine Bug #7115](http://bugs.winehq.org/show_bug.cgi?id=7115 "Need for Speed III installer fails in Win9X mode, reporting "Could not get 'HardWareKey' value" (active PnP device keys in 'HKEY_DYN_DATA\\Config Manager\\Enum' missing)")) * Support for Junction Points ([Wine Bug #12401](http://bugs.winehq.org/show_bug.cgi?id=12401 "Support junction points, i.e. DeviceIoCtl(FSCTL_SET_REPARSE_POINT/FSCTL_GET_REPARSE_POINT)")) * GetSecurityInfo returns NULL DACL for process object ([Wine Bug #15980](http://bugs.winehq.org/show_bug.cgi?id=15980 "Rhapsody 2 crashes on startup (GetSecurityInfo returns NULL DACL for process object)")) * Workaround for TransactNamedPipe not being supported ([Wine Bug #17273](http://bugs.winehq.org/show_bug.cgi?id=17273 "Many apps and games need SetNamedPipeHandleState implementation (support for named pipe message mode)(FireFox+Flash, Win8/NET 4.x SDK/vcrun2012, WiX installers)")) diff --git a/patches/Makefile b/patches/Makefile index 649211a4..ff4c03b1 100644 --- a/patches/Makefile +++ b/patches/Makefile @@ -24,6 +24,7 @@ PATCHLIST := Miscellaneous.ok \ shell32-Default_Folder_ACLs.ok \ shlwapi-UrlCombine.ok \ strmbase-Lock_Race_Conditions.ok \ + wineboot-HKEY_DYN_DATA.ok \ winepulse-PulseAudio_Support.ok \ winex11-XEMBED.ok \ ws2_32-TransmitFile.ok \ @@ -404,6 +405,24 @@ strmbase-Lock_Race_Conditions.ok: echo "+ { \"strmbase-Lock_Race_Conditions\", \"Erich E. Hoover\", \"Fix possible race conditions in strmbase/quartz.\" },"; \ ) > strmbase-Lock_Race_Conditions.ok +# Patchset wineboot-HKEY_DYN_DATA +# | +# | Included patches: +# | * Add some generic hardware in HKEY_DYN_DATA\Config Manager\Enum. [by Michael Müller] +# | +# | This patchset fixes the following Wine bugs: +# | * [#7115] Need for Speed III installer fails in Win9X mode, reporting "Could not get 'HardWareKey' value" (active PnP +# | device keys in 'HKEY_DYN_DATA\\Config Manager\\Enum' missing) +# | +# | Modified files: +# | * programs/wineboot/wineboot.c +# | +wineboot-HKEY_DYN_DATA.ok: + $(PATCH) < wineboot-HKEY_DYN_DATA/0001-wineboot-Add-some-generic-hardware-in-HKEY_DYN_DATA-.patch + ( \ + echo "+ { \"wineboot-HKEY_DYN_DATA\", \"Michael Müller\", \"Add some generic hardware in HKEY_DYN_DATA\Config Manager\Enum.\" },"; \ + ) > wineboot-HKEY_DYN_DATA.ok + # Patchset winepulse-PulseAudio_Support # | # | Included patches: diff --git a/patches/wineboot-HKEY_DYN_DATA/0001-wineboot-Add-some-generic-hardware-in-HKEY_DYN_DATA-.patch b/patches/wineboot-HKEY_DYN_DATA/0001-wineboot-Add-some-generic-hardware-in-HKEY_DYN_DATA-.patch new file mode 100644 index 00000000..a36cd3a8 --- /dev/null +++ b/patches/wineboot-HKEY_DYN_DATA/0001-wineboot-Add-some-generic-hardware-in-HKEY_DYN_DATA-.patch @@ -0,0 +1,137 @@ +From bbd182f920565d0aa58cd1524810bd11c535a965 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michael=20M=C3=BCller?= +Date: Sun, 16 Mar 2014 03:19:39 +0100 +Subject: wineboot: Add some generic hardware in HKEY_DYN_DATA\Config + Manager\Enum + +--- + programs/wineboot/wineboot.c | 101 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 101 insertions(+) + +diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c +index a20b4e1..db58e40 100644 +--- a/programs/wineboot/wineboot.c ++++ b/programs/wineboot/wineboot.c +@@ -272,6 +272,100 @@ static void create_hardware_registry_keys(void) + HeapFree( GetProcessHeap(), 0, power_info ); + } + ++struct dyndata_enum_key{ ++ WCHAR id[9]; ++ WCHAR hardwarekey[64]; ++ char problem[4]; ++ char status[4]; ++ char allocation[12]; ++ char child[4]; ++ char sibling[4]; ++ char parent[4]; ++}; ++ ++static struct dyndata_enum_key predefined_enums[] = ++{ ++ { ++ {'C','2','9','A','2','3','D','0',0}, ++ {'H','T','R','E','E','\\','R','O','O','T','\\','0',0}, ++ {0x00, 0x00, 0x00, 0x00}, ++ {0x4e, 0x08, 0x08, 0x1a}, ++ {0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ++ {0x40, 0x5a, 0x9a, 0xc2}, ++ {0x00, 0x00, 0x00, 0x00}, ++ {0x00, 0x00, 0x00, 0x00} ++ }, ++ { ++ {'C','2','9','A','5','A','4','0',0}, ++ {'H','T','R','E','E','\\','R','E','S','E','R','V','E','D','\\','0',0}, ++ {0x00, 0x00, 0x00, 0x00}, ++ {0x4e, 0x08, 0x08, 0x18}, ++ {0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ++ {0x00, 0x00, 0x00, 0x00}, ++ {0x60, 0x5c, 0x9a, 0xc2}, ++ {0xd0, 0x23, 0x9a, 0xc2} ++ }, ++ { ++ {'C','2','9','A','5','C','6','0',0}, ++ {'R','O','O','T','\\','N','E','T','\\','0','0','0','0',0}, ++ {0x00, 0x00, 0x00, 0x00}, ++ {0x4f, 0x6a, 0x08, 0x18}, ++ {0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ++ {0xf0, 0x93, 0x9b, 0xc2}, ++ {0xc0, 0x5d, 0x9a, 0xc2}, ++ {0xd0, 0x23, 0x9a, 0xc2} ++ }, ++ { ++ {'C','2','9','A','5','D','C','0',0}, ++ {'R','O','O','T','\\','P','R','O','C','E','S','S','O','R','_','U','P','D','A','T','E','\\','0','0','0','0',0}, ++ {0x00, 0x00, 0x00, 0x00}, ++ {0xcf, 0x6a, 0x88, 0x19}, ++ {0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ++ {0x00, 0x00, 0x00, 0x00}, ++ {0x20, 0x5f, 0x9a, 0xc2}, ++ {0xd0, 0x23, 0x9a, 0xc2} ++ }, ++ { ++ {'C','2','9','A','5','F','2','0',0}, ++ {'R','O','O','T','\\','S','W','E','N','U','M','\\','0','0','0','0',0}, ++ {0x00, 0x00, 0x00, 0x00}, ++ {0xcf, 0x6a, 0x88, 0x19}, ++ {0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ++ {0x00, 0x00, 0x00, 0x00}, ++ {0x20, 0x5f, 0x9a, 0xc2}, ++ {0xd0, 0x23, 0x9a, 0xc2} ++ } ++}; ++ ++/* add entry to HKEY_DYN_DATA\Config Manager\Enum */ ++static void add_dynamic_enum_keys(HKEY key, struct dyndata_enum_key *entry) ++{ ++ static const WCHAR HardWareKeyW[] = {'H','a','r','d','W','a','r','e','K','e','y',0}; ++ static const WCHAR ProblemW[] = {'P','r','o','b','l','e','m',0}; ++ static const WCHAR StatusW[] = {'S','t','a','t','u','s',0}; ++ static const WCHAR AllocationW[] = {'A','l','l','o','c','a','t','i','o','n',0}; ++ static const WCHAR ChildW[] = {'C','h','i','l','d',0}; ++ static const WCHAR SiblingW[] = {'S','i','b','l','i','n','g',0}; ++ static const WCHAR ParentW[] = {'P','a','r','e','n','t',0}; ++ ++ HKEY subkey; ++ ++ if (!entry) ++ return; ++ ++ if (RegCreateKeyExW( key, entry->id, 0, NULL, 0, KEY_WRITE, NULL, &subkey, NULL )) ++ return; ++ ++ set_reg_value( subkey, HardWareKeyW, entry->hardwarekey ); ++ RegSetValueExW( subkey, ProblemW, 0, REG_BINARY, (const BYTE *)entry->problem, sizeof(entry->problem) ); ++ RegSetValueExW( subkey, StatusW, 0, REG_BINARY, (const BYTE *)entry->status, sizeof(entry->status) ); ++ RegSetValueExW( subkey, AllocationW, 0, REG_BINARY, (const BYTE *)entry->allocation, sizeof(entry->allocation) ); ++ RegSetValueExW( subkey, ChildW, 0, REG_BINARY, (const BYTE *)entry->child, sizeof(entry->child) ); ++ RegSetValueExW( subkey, SiblingW, 0, REG_BINARY, (const BYTE *)entry->sibling, sizeof(entry->sibling) ); ++ RegSetValueExW( subkey, ParentW, 0, REG_BINARY, (const BYTE *)entry->parent, sizeof(entry->parent) ); ++ ++ RegCloseKey( subkey ); ++} + + /* create the DynData registry keys */ + static void create_dynamic_registry_keys(void) +@@ -281,11 +375,18 @@ static void create_dynamic_registry_keys(void) + static const WCHAR ConfigManagerW[] = {'C','o','n','f','i','g',' ','M','a','n','a','g','e','r','\\', + 'E','n','u','m',0}; + HKEY key; ++ int entry; + + if (!RegCreateKeyExW( HKEY_DYN_DATA, StatDataW, 0, NULL, 0, KEY_WRITE, NULL, &key, NULL )) + RegCloseKey( key ); ++ + if (!RegCreateKeyExW( HKEY_DYN_DATA, ConfigManagerW, 0, NULL, 0, KEY_WRITE, NULL, &key, NULL )) ++ { ++ for (entry = 0; entry < sizeof(predefined_enums) / sizeof(predefined_enums[0]); entry++) ++ add_dynamic_enum_keys( key, &predefined_enums[entry] ); ++ + RegCloseKey( key ); ++ } + } + + /* create the platform-specific environment registry keys */ +-- +1.8.3.2 + diff --git a/patches/wineboot-HKEY_DYN_DATA/definition b/patches/wineboot-HKEY_DYN_DATA/definition new file mode 100644 index 00000000..437e77e0 --- /dev/null +++ b/patches/wineboot-HKEY_DYN_DATA/definition @@ -0,0 +1,4 @@ +Author: Michael Müller +Subject: Add some generic hardware in HKEY_DYN_DATA\Config Manager\Enum. +Revision: 1 +Fixes: [7115] Need for Speed 3 installer requires devices in HKEY_DYN_DATA