[NETCFGX] Set the ComponentId value when a NIC is installed.

This commit is contained in:
Eric Kohl 2019-06-16 23:55:31 +02:00
parent f3d1d38041
commit 9bf78b6a95

View file

@ -100,6 +100,7 @@ InstallNetDevice(
LPCWSTR BusType) LPCWSTR BusType)
{ {
LPWSTR InstanceId = NULL; LPWSTR InstanceId = NULL;
LPWSTR ComponentId = NULL;
LPWSTR DeviceName = NULL; LPWSTR DeviceName = NULL;
LPWSTR ExportName = NULL; LPWSTR ExportName = NULL;
LONG rc; LONG rc;
@ -109,6 +110,7 @@ InstallNetDevice(
HKEY hConnectionKey = NULL; HKEY hConnectionKey = NULL;
DWORD dwShowIcon, dwLength, dwValue; DWORD dwShowIcon, dwLength, dwValue;
WCHAR szBuffer[300]; WCHAR szBuffer[300];
PWSTR ptr;
/* Install the adapter */ /* Install the adapter */
if (!SetupDiInstallDevice(DeviceInfoSet, DeviceInfoData)) if (!SetupDiInstallDevice(DeviceInfoSet, DeviceInfoData))
@ -141,6 +143,19 @@ InstallNetDevice(
goto cleanup; goto cleanup;
} }
ComponentId = HeapAlloc(GetProcessHeap(), 0, dwLength * sizeof(WCHAR));
if (!ComponentId)
{
ERR("HeapAlloc() failed\n");
rc = ERROR_NOT_ENOUGH_MEMORY;
goto cleanup;
}
wcscpy(ComponentId, InstanceId);
ptr = wcsrchr(ComponentId, L'\\');
if (ptr != NULL)
*ptr = UNICODE_NULL;
/* Create device name */ /* Create device name */
DeviceName = HeapAlloc(GetProcessHeap(), 0, (wcslen(L"\\Device\\") + wcslen(UuidString)) * sizeof(WCHAR) + sizeof(UNICODE_NULL)); DeviceName = HeapAlloc(GetProcessHeap(), 0, (wcslen(L"\\Device\\") + wcslen(UuidString)) * sizeof(WCHAR) + sizeof(UNICODE_NULL));
if (!DeviceName) if (!DeviceName)
@ -250,6 +265,13 @@ InstallNetDevice(
goto cleanup; goto cleanup;
} }
rc = RegSetValueExW(hKey, L"ComponentId", 0, REG_SZ, (const BYTE*)ComponentId, (wcslen(ComponentId) + 1) * sizeof(WCHAR));
if (rc != ERROR_SUCCESS)
{
ERR("RegSetValueExW() failed with error 0x%lx\n", rc);
goto cleanup;
}
if (BusType) if (BusType)
{ {
rc = RegSetValueExW(hKey, L"BusType", 0, REG_SZ, (const BYTE*)BusType, (wcslen(BusType) + 1) * sizeof(WCHAR)); rc = RegSetValueExW(hKey, L"BusType", 0, REG_SZ, (const BYTE*)BusType, (wcslen(BusType) + 1) * sizeof(WCHAR));
@ -326,7 +348,7 @@ InstallNetDevice(
goto cleanup; goto cleanup;
} }
rc = RegSetValueExW(hConnectionKey, L"PnpInstanceId", 0, REG_SZ, (const BYTE*)InstanceId, (wcslen(InstanceId) + 1) * sizeof(WCHAR)); rc = RegSetValueExW(hConnectionKey, L"PnpInstanceID", 0, REG_SZ, (const BYTE*)InstanceId, (wcslen(InstanceId) + 1) * sizeof(WCHAR));
if (rc != ERROR_SUCCESS) if (rc != ERROR_SUCCESS)
{ {
ERR("RegSetValueExW() failed with error 0x%lx\n", rc); ERR("RegSetValueExW() failed with error 0x%lx\n", rc);
@ -371,6 +393,7 @@ InstallNetDevice(
cleanup: cleanup:
HeapFree(GetProcessHeap(), 0, InstanceId); HeapFree(GetProcessHeap(), 0, InstanceId);
HeapFree(GetProcessHeap(), 0, ComponentId);
HeapFree(GetProcessHeap(), 0, DeviceName); HeapFree(GetProcessHeap(), 0, DeviceName);
HeapFree(GetProcessHeap(), 0, ExportName); HeapFree(GetProcessHeap(), 0, ExportName);
if (hKey != NULL) if (hKey != NULL)