mirror of
https://github.com/reactos/reactos.git
synced 2025-04-20 20:36:35 +00:00
[NETCFGX] NetPropPageProvider: Store the parameters in the registry
This commit is contained in:
parent
7ad65a3773
commit
45cd6d5e4e
1 changed files with 171 additions and 17 deletions
|
@ -29,6 +29,7 @@ typedef struct _PARAMETER
|
||||||
PWSTR pszName;
|
PWSTR pszName;
|
||||||
PWSTR pszDescription;
|
PWSTR pszDescription;
|
||||||
PWSTR pszValue;
|
PWSTR pszValue;
|
||||||
|
DWORD cchValueLength;
|
||||||
PWSTR pszDefault;
|
PWSTR pszDefault;
|
||||||
BOOL bOptional;
|
BOOL bOptional;
|
||||||
BOOL bPresent;
|
BOOL bPresent;
|
||||||
|
@ -39,11 +40,12 @@ typedef struct _PARAMETER
|
||||||
|
|
||||||
BOOL bUpperCase;
|
BOOL bUpperCase;
|
||||||
INT iTextLimit;
|
INT iTextLimit;
|
||||||
|
|
||||||
} PARAMETER, *PPARAMETER;
|
} PARAMETER, *PPARAMETER;
|
||||||
|
|
||||||
typedef struct _PARAMETER_ARRAY
|
typedef struct _PARAMETER_ARRAY
|
||||||
{
|
{
|
||||||
|
HDEVINFO DeviceInfoSet;
|
||||||
|
PSP_DEVINFO_DATA DeviceInfoData;
|
||||||
PPARAMETER pCurrentParam;
|
PPARAMETER pCurrentParam;
|
||||||
DWORD dwCount;
|
DWORD dwCount;
|
||||||
PARAMETER Array[0];
|
PARAMETER Array[0];
|
||||||
|
@ -93,9 +95,10 @@ FreeParameterArray(
|
||||||
|
|
||||||
static DWORD
|
static DWORD
|
||||||
GetStringValue(
|
GetStringValue(
|
||||||
IN HKEY hKey,
|
_In_ HKEY hKey,
|
||||||
IN PWSTR pValueName,
|
_In_ PWSTR pValueName,
|
||||||
OUT PWSTR *pString)
|
_Out_ PWSTR *pString,
|
||||||
|
_Out_opt_ PDWORD pdwStringLength)
|
||||||
{
|
{
|
||||||
PWSTR pBuffer;
|
PWSTR pBuffer;
|
||||||
DWORD dwLength = 0;
|
DWORD dwLength = 0;
|
||||||
|
@ -123,6 +126,8 @@ GetStringValue(
|
||||||
pBuffer[dwLength / sizeof(WCHAR)] = UNICODE_NULL;
|
pBuffer[dwLength / sizeof(WCHAR)] = UNICODE_NULL;
|
||||||
|
|
||||||
*pString = pBuffer;
|
*pString = pBuffer;
|
||||||
|
if (pdwStringLength)
|
||||||
|
*pdwStringLength = dwLength;
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -385,7 +390,7 @@ BuildParameterArray(
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
FIXME("Sub keys: %lu\n", dwSubKeys);
|
TRACE("Sub keys: %lu\n", dwSubKeys);
|
||||||
|
|
||||||
if (dwSubKeys == 0)
|
if (dwSubKeys == 0)
|
||||||
{
|
{
|
||||||
|
@ -402,6 +407,8 @@ BuildParameterArray(
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ParamArray->DeviceInfoSet = DeviceInfoSet;
|
||||||
|
ParamArray->DeviceInfoData = DeviceInfoData;
|
||||||
ParamArray->dwCount = dwSubKeys;
|
ParamArray->dwCount = dwSubKeys;
|
||||||
|
|
||||||
dwMaxSubKeyLen++;
|
dwMaxSubKeyLen++;
|
||||||
|
@ -429,7 +436,7 @@ BuildParameterArray(
|
||||||
if (lError != ERROR_SUCCESS)
|
if (lError != ERROR_SUCCESS)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
FIXME("Sub key '%S'\n", ParamArray->Array[dwIndex].pszName);
|
TRACE("Sub key '%S'\n", ParamArray->Array[dwIndex].pszName);
|
||||||
|
|
||||||
lError = RegOpenKeyExW(hParamsKey,
|
lError = RegOpenKeyExW(hParamsKey,
|
||||||
ParamArray->Array[dwIndex].pszName,
|
ParamArray->Array[dwIndex].pszName,
|
||||||
|
@ -440,11 +447,13 @@ BuildParameterArray(
|
||||||
{
|
{
|
||||||
GetStringValue(hParamKey,
|
GetStringValue(hParamKey,
|
||||||
L"ParamDesc",
|
L"ParamDesc",
|
||||||
&ParamArray->Array[dwIndex].pszDescription);
|
&ParamArray->Array[dwIndex].pszDescription,
|
||||||
|
NULL);
|
||||||
|
|
||||||
GetStringValue(hParamKey,
|
GetStringValue(hParamKey,
|
||||||
L"Type",
|
L"Type",
|
||||||
&pszType);
|
&pszType,
|
||||||
|
NULL);
|
||||||
if (pszType != NULL)
|
if (pszType != NULL)
|
||||||
{
|
{
|
||||||
if (_wcsicmp(pszType, L"int") == 0)
|
if (_wcsicmp(pszType, L"int") == 0)
|
||||||
|
@ -468,7 +477,8 @@ BuildParameterArray(
|
||||||
|
|
||||||
GetStringValue(hParamKey,
|
GetStringValue(hParamKey,
|
||||||
L"Default",
|
L"Default",
|
||||||
&ParamArray->Array[dwIndex].pszDefault);
|
&ParamArray->Array[dwIndex].pszDefault,
|
||||||
|
NULL);
|
||||||
|
|
||||||
GetBooleanValue(hParamKey,
|
GetBooleanValue(hParamKey,
|
||||||
L"Optional",
|
L"Optional",
|
||||||
|
@ -505,7 +515,8 @@ BuildParameterArray(
|
||||||
|
|
||||||
lError = GetStringValue(hDriverKey,
|
lError = GetStringValue(hDriverKey,
|
||||||
ParamArray->Array[dwIndex].pszName,
|
ParamArray->Array[dwIndex].pszName,
|
||||||
&ParamArray->Array[dwIndex].pszValue);
|
&ParamArray->Array[dwIndex].pszValue,
|
||||||
|
&ParamArray->Array[dwIndex].cchValueLength);
|
||||||
if ((lError == ERROR_SUCCESS) ||
|
if ((lError == ERROR_SUCCESS) ||
|
||||||
(ParamArray->Array[dwIndex].pszDefault != NULL))
|
(ParamArray->Array[dwIndex].pszDefault != NULL))
|
||||||
{
|
{
|
||||||
|
@ -532,9 +543,117 @@ done:
|
||||||
|
|
||||||
static
|
static
|
||||||
VOID
|
VOID
|
||||||
DisplayParameter(
|
ReadParameterValue(
|
||||||
HWND hwnd,
|
HWND hwnd,
|
||||||
PPARAMETER Parameter)
|
PPARAMETER pParam)
|
||||||
|
{
|
||||||
|
INT iIndex, iLength;
|
||||||
|
|
||||||
|
if (pParam->Type == ENUM_TYPE)
|
||||||
|
{
|
||||||
|
iIndex = ComboBox_GetCurSel(GetDlgItem(hwnd, IDC_PROPERTY_VALUE_LIST));
|
||||||
|
if (iIndex != CB_ERR && iIndex < pParam->dwEnumOptions)
|
||||||
|
{
|
||||||
|
iLength = wcslen(pParam->pEnumOptions[iIndex].pszValue);
|
||||||
|
if (iLength > pParam->cchValueLength)
|
||||||
|
{
|
||||||
|
if (pParam->pszValue != NULL)
|
||||||
|
HeapFree(GetProcessHeap(), 0, pParam->pszValue);
|
||||||
|
|
||||||
|
pParam->pszValue = HeapAlloc(GetProcessHeap(), 0, (iLength + 1) * sizeof(WCHAR));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pParam->pszValue != NULL)
|
||||||
|
{
|
||||||
|
wcscpy(pParam->pszValue,
|
||||||
|
pParam->pEnumOptions[iIndex].pszValue);
|
||||||
|
pParam->cchValueLength = iLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iLength = Edit_GetTextLength(GetDlgItem(hwnd, IDC_PROPERTY_VALUE_EDIT));
|
||||||
|
if (iLength > pParam->cchValueLength)
|
||||||
|
{
|
||||||
|
if (pParam->pszValue != NULL)
|
||||||
|
HeapFree(GetProcessHeap(), 0, pParam->pszValue);
|
||||||
|
|
||||||
|
pParam->pszValue = HeapAlloc(GetProcessHeap(), 0, (iLength + 1) * sizeof(WCHAR));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pParam->pszValue != NULL)
|
||||||
|
{
|
||||||
|
Edit_GetText(GetDlgItem(hwnd, IDC_PROPERTY_VALUE_EDIT),
|
||||||
|
pParam->pszValue,
|
||||||
|
iLength + 1);
|
||||||
|
pParam->cchValueLength = iLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
WriteParameterArray(
|
||||||
|
_In_ HWND hwnd,
|
||||||
|
_In_ PPARAMETER_ARRAY ParamArray)
|
||||||
|
{
|
||||||
|
PPARAMETER Param;
|
||||||
|
HKEY hDriverKey;
|
||||||
|
INT i;
|
||||||
|
|
||||||
|
if (ParamArray == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hDriverKey = SetupDiOpenDevRegKey(ParamArray->DeviceInfoSet,
|
||||||
|
ParamArray->DeviceInfoData,
|
||||||
|
DICS_FLAG_GLOBAL,
|
||||||
|
0,
|
||||||
|
DIREG_DRV,
|
||||||
|
KEY_WRITE);
|
||||||
|
if (hDriverKey == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
ERR("SetupDiOpenDevRegKey() failed\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ParamArray->dwCount; i++)
|
||||||
|
{
|
||||||
|
Param = &ParamArray->Array[i];
|
||||||
|
|
||||||
|
if (Param == ParamArray->pCurrentParam)
|
||||||
|
{
|
||||||
|
ReadParameterValue(hwnd, Param);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Param->bPresent)
|
||||||
|
{
|
||||||
|
TRACE("Set '%S' --> '%S'\n", Param->pszName, Param->pszValue);
|
||||||
|
RegSetValueExW(hDriverKey,
|
||||||
|
Param->pszName,
|
||||||
|
0,
|
||||||
|
REG_SZ,
|
||||||
|
(LPBYTE)Param->pszValue,
|
||||||
|
(wcslen(Param->pszValue) + 1) * sizeof(WCHAR));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TRACE("Delete '%S'\n", Param->pszName);
|
||||||
|
RegDeleteValueW(hDriverKey,
|
||||||
|
Param->pszName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RegCloseKey(hDriverKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
DisplayParameter(
|
||||||
|
_In_ HWND hwnd,
|
||||||
|
_In_ PPARAMETER Parameter)
|
||||||
{
|
{
|
||||||
HWND hwndControl;
|
HWND hwndControl;
|
||||||
LONG_PTR Style;
|
LONG_PTR Style;
|
||||||
|
@ -653,7 +772,7 @@ OnInitDialog(
|
||||||
PWSTR pszText;
|
PWSTR pszText;
|
||||||
DWORD i;
|
DWORD i;
|
||||||
|
|
||||||
FIXME("OnInitDialog()\n");
|
TRACE("OnInitDialog()\n");
|
||||||
|
|
||||||
pParamArray = (PPARAMETER_ARRAY)((LPPROPSHEETPAGEW)lParam)->lParam;
|
pParamArray = (PPARAMETER_ARRAY)((LPPROPSHEETPAGEW)lParam)->lParam;
|
||||||
if (pParamArray == NULL)
|
if (pParamArray == NULL)
|
||||||
|
@ -710,6 +829,11 @@ OnCommand(
|
||||||
|
|
||||||
if ((LOWORD(wParam) == IDC_PROPERTY_NAME) && (HIWORD(wParam) == LBN_SELCHANGE))
|
if ((LOWORD(wParam) == IDC_PROPERTY_NAME) && (HIWORD(wParam) == LBN_SELCHANGE))
|
||||||
{
|
{
|
||||||
|
if (pParamArray->pCurrentParam != NULL)
|
||||||
|
{
|
||||||
|
ReadParameterValue(hwnd, pParamArray->pCurrentParam);
|
||||||
|
}
|
||||||
|
|
||||||
iIndex = ListBox_GetCurSel((HWND)lParam);
|
iIndex = ListBox_GetCurSel((HWND)lParam);
|
||||||
if (iIndex != LB_ERR && iIndex < pParamArray->dwCount)
|
if (iIndex != LB_ERR && iIndex < pParamArray->dwCount)
|
||||||
{
|
{
|
||||||
|
@ -734,6 +858,32 @@ OnCommand(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
OnNotify(
|
||||||
|
HWND hwnd,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
PPARAMETER_ARRAY pParamArray;
|
||||||
|
|
||||||
|
TRACE("OnNotify()\n");
|
||||||
|
|
||||||
|
pParamArray = (PPARAMETER_ARRAY)GetWindowLongPtr(hwnd, DWLP_USER);
|
||||||
|
if (pParamArray == NULL)
|
||||||
|
{
|
||||||
|
ERR("pParamArray is NULL\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY)
|
||||||
|
{
|
||||||
|
TRACE("PSN_APPLY!\n");
|
||||||
|
WriteParameterArray(hwnd, pParamArray);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
VOID
|
VOID
|
||||||
OnDestroy(
|
OnDestroy(
|
||||||
|
@ -741,7 +891,7 @@ OnDestroy(
|
||||||
{
|
{
|
||||||
PPARAMETER_ARRAY pParamArray;
|
PPARAMETER_ARRAY pParamArray;
|
||||||
|
|
||||||
FIXME("OnDestroy()\n");
|
TRACE("OnDestroy()\n");
|
||||||
|
|
||||||
pParamArray = (PPARAMETER_ARRAY)GetWindowLongPtr(hwnd, DWLP_USER);
|
pParamArray = (PPARAMETER_ARRAY)GetWindowLongPtr(hwnd, DWLP_USER);
|
||||||
if (pParamArray == NULL)
|
if (pParamArray == NULL)
|
||||||
|
@ -773,6 +923,10 @@ NetPropertyPageDlgProc(
|
||||||
OnCommand(hwnd, wParam, lParam);
|
OnCommand(hwnd, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_NOTIFY:
|
||||||
|
OnNotify(hwnd, wParam, lParam);
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
OnDestroy(hwnd);
|
OnDestroy(hwnd);
|
||||||
break;
|
break;
|
||||||
|
@ -796,7 +950,7 @@ NetPropPageProvider(
|
||||||
HPROPSHEETPAGE hPropSheetPage;
|
HPROPSHEETPAGE hPropSheetPage;
|
||||||
PPARAMETER_ARRAY ParameterArray = NULL;
|
PPARAMETER_ARRAY ParameterArray = NULL;
|
||||||
|
|
||||||
ERR("NetPropPageProvider(%p %p %lx)\n",
|
TRACE("NetPropPageProvider(%p %p %lx)\n",
|
||||||
lpPropSheetPageRequest, lpfnAddPropSheetPageProc, lParam);
|
lpPropSheetPageRequest, lpfnAddPropSheetPageProc, lParam);
|
||||||
|
|
||||||
if (!BuildParameterArray(lpPropSheetPageRequest->DeviceInfoSet,
|
if (!BuildParameterArray(lpPropSheetPageRequest->DeviceInfoSet,
|
||||||
|
@ -806,7 +960,7 @@ NetPropPageProvider(
|
||||||
|
|
||||||
if (lpPropSheetPageRequest->PageRequested == SPPSR_ENUM_ADV_DEVICE_PROPERTIES)
|
if (lpPropSheetPageRequest->PageRequested == SPPSR_ENUM_ADV_DEVICE_PROPERTIES)
|
||||||
{
|
{
|
||||||
ERR("SPPSR_ENUM_ADV_DEVICE_PROPERTIES\n");
|
TRACE("SPPSR_ENUM_ADV_DEVICE_PROPERTIES\n");
|
||||||
|
|
||||||
PropSheetPage.dwSize = sizeof(PROPSHEETPAGEW);
|
PropSheetPage.dwSize = sizeof(PROPSHEETPAGEW);
|
||||||
PropSheetPage.dwFlags = 0;
|
PropSheetPage.dwFlags = 0;
|
||||||
|
@ -831,7 +985,7 @@ NetPropPageProvider(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ERR("Done!\n");
|
TRACE("Done!\n");
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue