Alexander Morozov : setupapi: Create device interface keys in registry as in Windows XP.
Alexandre Julliard
julliard at winehq.org
Wed Apr 2 06:55:40 CDT 2008
Module: wine
Branch: master
Commit: 6a5c1ca25bd77fde9e825e31dca4d4cc0d1fea8a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6a5c1ca25bd77fde9e825e31dca4d4cc0d1fea8a
Author: Alexander Morozov <amorozov at etersoft.ru>
Date: Tue Apr 1 14:25:01 2008 +0300
setupapi: Create device interface keys in registry as in Windows XP.
---
dlls/setupapi/devinst.c | 43 +++++++++++++++++++++++++++++++++----------
1 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index e9c8124..ebfeee0 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -2631,21 +2631,44 @@ HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyW(
struct InterfaceInfo *ifaceInfo =
(struct InterfaceInfo *)DeviceInterfaceData->Reserved;
PWSTR instancePath = SETUPDI_GetInstancePath(ifaceInfo);
+ PWSTR interfKeyName = HeapAlloc(GetProcessHeap(), 0,
+ (lstrlenW(ifaceInfo->symbolicLink) + 1) * sizeof(WCHAR));
+ HKEY interfKey;
+ WCHAR *ptr;
- if (instancePath)
+ lstrcpyW(interfKeyName, ifaceInfo->symbolicLink);
+ if (lstrlenW(ifaceInfo->symbolicLink) > 3)
{
- LONG l;
-
- l = RegCreateKeyExW(parent, instancePath, 0, NULL, 0,
- samDesired, NULL, &key, NULL);
- if (l)
+ interfKeyName[0] = '#';
+ interfKeyName[1] = '#';
+ interfKeyName[3] = '#';
+ }
+ ptr = strchrW(interfKeyName, '\\');
+ if (ptr)
+ *ptr = 0;
+ l = RegCreateKeyExW(parent, interfKeyName, 0, NULL, 0,
+ samDesired, NULL, &interfKey, NULL);
+ if (!l)
+ {
+ if (instancePath)
{
- SetLastError(l);
- key = INVALID_HANDLE_VALUE;
+ LONG l;
+
+ l = RegCreateKeyExW(interfKey, instancePath, 0, NULL, 0,
+ samDesired, NULL, &key, NULL);
+ if (l)
+ {
+ SetLastError(l);
+ key = INVALID_HANDLE_VALUE;
+ }
+ else if (InfHandle)
+ FIXME("INF section installation unsupported\n");
}
- else if (InfHandle)
- FIXME("INF section installation unsupported\n");
+ RegCloseKey(interfKey);
}
+ else
+ SetLastError(l);
+ HeapFree(GetProcessHeap(), 0, interfKeyName);
HeapFree(GetProcessHeap(), 0, instancePath);
RegCloseKey(parent);
}
More information about the wine-cvs
mailing list