Add patch to populate HKEY_DYN_DATA.

This commit is contained in:
Michael Müller 2014-07-26 03:22:25 +02:00
parent d270fde97f
commit b04636aa97
4 changed files with 161 additions and 0 deletions

View File

@ -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)"))

View File

@ -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:

View File

@ -0,0 +1,137 @@
From bbd182f920565d0aa58cd1524810bd11c535a965 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
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

View File

@ -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