Write connection name at the right place in registry.
authorHervé Poussineau <hpoussin@reactos.org>
Sun, 27 Nov 2005 21:00:09 +0000 (21:00 +0000)
committerHervé Poussineau <hpoussin@reactos.org>
Sun, 27 Nov 2005 21:00:09 +0000 (21:00 +0000)
Add PnpInstanceId and ShowIcon values

svn path=/trunk/; revision=19699

reactos/lib/netcfgx/netcfgx.c

index 378e0ad..821a8f9 100644 (file)
@@ -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);