From 568f5a31a24fa11daf8f5ade758870553656610a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 27 Nov 2005 21:00:09 +0000 Subject: [PATCH] Write connection name at the right place in registry. Add PnpInstanceId and ShowIcon values svn path=/trunk/; revision=19699 --- reactos/lib/netcfgx/netcfgx.c | 51 ++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/reactos/lib/netcfgx/netcfgx.c b/reactos/lib/netcfgx/netcfgx.c index 378e0ad5423..821a8f9a628 100644 --- a/reactos/lib/netcfgx/netcfgx.c +++ b/reactos/lib/netcfgx/netcfgx.c @@ -100,11 +100,13 @@ NetClassInstaller( { RPC_STATUS RpcStatus; UUID Uuid; + LPWSTR InstanceId = NULL; LPWSTR UuidRpcString = NULL; LPWSTR UuidString = NULL; LPWSTR DeviceName = NULL; LPWSTR ExportName = NULL; LONG rc; + DWORD dwShowIcon, dwLength; HKEY hKey = INVALID_HANDLE_VALUE; HKEY hLinkageKey = INVALID_HANDLE_VALUE; HKEY hNetworkKey = INVALID_HANDLE_VALUE; @@ -115,6 +117,27 @@ NetClassInstaller( DPRINT("%lu %p %p\n", InstallFunction, DeviceInfoSet, DeviceInfoData); + /* Get Instance ID */ + if (SetupDiGetDeviceInstanceIdW(DeviceInfoSet, DeviceInfoData, NULL, 0, &dwLength)) + { + DPRINT("SetupDiGetDeviceInstanceIdW() returned TRUE. FALSE expected\n"); + rc = ERROR_GEN_FAILURE; + goto cleanup; + } + InstanceId = HeapAlloc(GetProcessHeap(), 0, dwLength); + if (!InstanceId) + { + DPRINT("HeapAlloc() failed\n"); + rc = ERROR_NOT_ENOUGH_MEMORY; + goto cleanup; + } + if (!SetupDiGetDeviceInstanceIdW(DeviceInfoSet, DeviceInfoData, InstanceId, dwLength, NULL)) + { + rc = GetLastError(); + DPRINT("SetupDiGetDeviceInstanceIdW() failed with error 0x%lx\n", rc); + goto cleanup; + } + /* Create a new UUID */ RpcStatus = UuidCreate(&Uuid); if (RpcStatus != RPC_S_OK && RpcStatus != RPC_S_UUID_LOCAL_ONLY) @@ -263,20 +286,39 @@ NetClassInstaller( DPRINT("RegCreateKeyExW() failed with error 0x%lx\n", rc); goto cleanup; } - rc = RegCreateKeyExW(hNetworkKey, UuidString, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hKey, NULL); + rc = RegCreateKeyExW(hNetworkKey, UuidString, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY, NULL, &hKey, NULL); if (rc != ERROR_SUCCESS) { DPRINT("RegCreateKeyExW() failed with error 0x%lx\n", rc); goto cleanup; } - rc = RegSetValueExW(hKey, L"Name", 0, REG_SZ, (const BYTE*)L"Network connection", (wcslen(L"Network connection") + 1) * sizeof(WCHAR)); + rc = RegCreateKeyExW(hKey, L"Connection", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hConnectionKey, NULL); + RegCloseKey(hKey); + hKey = INVALID_HANDLE_VALUE; + if (rc != ERROR_SUCCESS) + { + DPRINT("RegCreateKeyExW() failed with error 0x%lx\n", rc); + goto cleanup; + } + rc = RegSetValueExW(hConnectionKey, L"Name", 0, REG_SZ, (const BYTE*)L"Network connection", (wcslen(L"Network connection") + 1) * sizeof(WCHAR)); + if (rc != ERROR_SUCCESS) + { + DPRINT("RegSetValueExW() failed with error 0x%lx\n", rc); + goto cleanup; + } + rc = RegSetValueExW(hConnectionKey, L"PnpInstanceId", 0, REG_SZ, (const BYTE*)InstanceId, (wcslen(InstanceId) + 1) * sizeof(WCHAR)); + if (rc != ERROR_SUCCESS) + { + DPRINT("RegSetValueExW() failed with error 0x%lx\n", rc); + goto cleanup; + } + dwShowIcon = 1; + rc = RegSetValueExW(hConnectionKey, L"ShowIcon", 0, REG_DWORD, (const BYTE*)&dwShowIcon, sizeof(dwShowIcon)); if (rc != ERROR_SUCCESS) { DPRINT("RegSetValueExW() failed with error 0x%lx\n", rc); goto cleanup; } - RegCloseKey(hKey); - hKey = INVALID_HANDLE_VALUE; /* Write linkage information in Tcpip service */ rc = RegCreateKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Linkage", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_QUERY_VALUE | KEY_SET_VALUE, NULL, &hKey, NULL); @@ -309,6 +351,7 @@ NetClassInstaller( cleanup: if (UuidRpcString != NULL) RpcStringFreeW(&UuidRpcString); + HeapFree(GetProcessHeap(), 0, InstanceId); HeapFree(GetProcessHeap(), 0, UuidString); HeapFree(GetProcessHeap(), 0, DeviceName); HeapFree(GetProcessHeap(), 0, ExportName);