ReactOS 0.4.15-dev-8100-g1887773
propertypage.c File Reference
#include "precomp.h"
Include dependency graph for propertypage.c:

Go to the source code of this file.

Classes

struct  _ENUM_OPTION
 
struct  _PARAMETER
 
struct  _PARAMETER_ARRAY
 

Typedefs

typedef enum _PARAM_TYPE PARAM_TYPE
 
typedef enum _PARAM_TYPEPPARAM_TYPE
 
typedef struct _ENUM_OPTION ENUM_OPTION
 
typedef struct _ENUM_OPTIONPENUM_OPTION
 
typedef struct _PARAMETER PARAMETER
 
typedef struct _PARAMETERPPARAMETER
 
typedef struct _PARAMETER_ARRAY PARAMETER_ARRAY
 
typedef struct _PARAMETER_ARRAYPPARAMETER_ARRAY
 

Enumerations

enum  _PARAM_TYPE {
  NO_TYPE , INT_TYPE , LONG_TYPE , WORD_TYPE ,
  DWORD_TYPE , EDIT_TYPE , ENUM_TYPE
}
 

Functions

static VOID FreeParameterArray (_In_ PPARAMETER_ARRAY ParamArray)
 
static DWORD GetStringValue (_In_ HKEY hKey, _In_ PWSTR pValueName, _Out_ PWSTR *pString, _Out_opt_ PDWORD pdwStringLength)
 
static DWORD GetBooleanValue (_In_ HKEY hKey, _In_ PWSTR pValueName, _In_ BOOL bDefault, _Out_ PBOOL pValue)
 
static DWORD GetIntValue (_In_ HKEY hKey, _In_ PWSTR pValueName, _In_ INT iDefault, _Out_ PINT pValue)
 
static DWORD GetLongValue (_In_ HKEY hKey, _In_ PWSTR pValueName, _In_ LONG lDefault, _Out_ PLONG pValue)
 
static DWORD GetDWordValue (_In_ HKEY hKey, _In_ PWSTR pValueName, _In_ DWORD dwDefault, _Out_ PDWORD pValue)
 
static DWORD GetEnumOptions (_In_ HKEY hKey, _In_ PPARAMETER pParameter)
 
static INT FindEnumOption (_In_ PPARAMETER pParameter, _In_ PWSTR pszValue)
 
static BOOL BuildParameterArray (_In_ HDEVINFO DeviceInfoSet, _In_ PSP_DEVINFO_DATA DeviceInfoData, _Out_ PPARAMETER_ARRAY *ParameterArray)
 
static VOID ReadParameterValue (HWND hwnd, PPARAMETER pParam)
 
static VOID WriteParameterArray (_In_ HWND hwnd, _In_ PPARAMETER_ARRAY ParamArray)
 
static VOID DisplayParameter (_In_ HWND hwnd, _In_ PPARAMETER Parameter)
 
static BOOL OnInitDialog (HWND hwnd, WPARAM wParam, LPARAM lParam)
 
static VOID OnCommand (HWND hwnd, WPARAM wParam, LPARAM lParam)
 
static VOID OnNotify (HWND hwnd, WPARAM wParam, LPARAM lParam)
 
static VOID OnDestroy (HWND hwnd)
 
static INT_PTR CALLBACK NetPropertyPageDlgProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
BOOL WINAPI NetPropPageProvider (PSP_PROPSHEETPAGE_REQUEST lpPropSheetPageRequest, LPFNADDPROPSHEETPAGE lpfnAddPropSheetPageProc, LPARAM lParam)
 

Typedef Documentation

◆ ENUM_OPTION

◆ PARAM_TYPE

◆ PARAMETER

◆ PARAMETER_ARRAY

◆ PENUM_OPTION

◆ PPARAM_TYPE

◆ PPARAMETER

◆ PPARAMETER_ARRAY

Enumeration Type Documentation

◆ _PARAM_TYPE

Enumerator
NO_TYPE 
INT_TYPE 
LONG_TYPE 
WORD_TYPE 
DWORD_TYPE 
EDIT_TYPE 
ENUM_TYPE 

Definition at line 10 of file propertypage.c.

11{
12 NO_TYPE,
enum _PARAM_TYPE * PPARAM_TYPE
@ ENUM_TYPE
Definition: propertypage.c:18
@ EDIT_TYPE
Definition: propertypage.c:17
@ DWORD_TYPE
Definition: propertypage.c:16
@ WORD_TYPE
Definition: propertypage.c:15
@ INT_TYPE
Definition: propertypage.c:13
@ LONG_TYPE
Definition: propertypage.c:14
@ NO_TYPE
Definition: propertypage.c:12
enum _PARAM_TYPE PARAM_TYPE

Function Documentation

◆ BuildParameterArray()

static BOOL BuildParameterArray ( _In_ HDEVINFO  DeviceInfoSet,
_In_ PSP_DEVINFO_DATA  DeviceInfoData,
_Out_ PPARAMETER_ARRAY ParameterArray 
)
static

Definition at line 425 of file propertypage.c.

429{
430 HKEY hDriverKey = INVALID_HANDLE_VALUE;
431 HKEY hParamsKey = INVALID_HANDLE_VALUE;
432 HKEY hParamKey;
433 PPARAMETER_ARRAY ParamArray = NULL;
434 DWORD dwSubKeys, dwMaxSubKeyLen, dwKeyLen, dwIndex;
435 PWSTR pszType = NULL;
436 LONG lError;
437 LONG lDefaultMin, lDefaultMax;
438 DWORD dwDefaultMin, dwDefaultMax;
439 BOOL ret = FALSE;
440
444 0,
445 DIREG_DRV,
446 KEY_READ);
447 if (hDriverKey == INVALID_HANDLE_VALUE)
448 {
449 ERR("SetupDiOpenDevRegKey() failed\n");
450 return FALSE;
451 }
452
453 lError = RegOpenKeyExW(hDriverKey,
454 L"Ndi\\Params",
455 0,
456 KEY_READ,
457 &hParamsKey);
458 if (lError != ERROR_SUCCESS)
459 {
460 ERR("RegOpenKeyExW failed (Error %lu)\n", lError);
461 goto done;
462 }
463
464 lError = RegQueryInfoKeyW(hParamsKey,
465 NULL,
466 NULL,
467 NULL,
468 &dwSubKeys,
469 &dwMaxSubKeyLen,
470 NULL,
471 NULL,
472 NULL,
473 NULL,
474 NULL,
475 NULL);
476 if (lError != ERROR_SUCCESS)
477 {
478 ERR("RegOpenKeyExW failed (Error %lu)\n", lError);
479 goto done;
480 }
481
482 TRACE("Sub keys: %lu\n", dwSubKeys);
483
484 if (dwSubKeys == 0)
485 {
486 TRACE("No sub keys. Done!\n");
487 goto done;
488 }
489
490 ParamArray = HeapAlloc(GetProcessHeap(),
492 sizeof(PARAMETER_ARRAY) + (dwSubKeys * sizeof(PARAMETER)));
493 if (ParamArray == NULL)
494 {
495 ERR("Parameter array allocation failed!\n");
496 goto done;
497 }
498
499 ParamArray->DeviceInfoSet = DeviceInfoSet;
500 ParamArray->DeviceInfoData = DeviceInfoData;
501 ParamArray->dwCount = dwSubKeys;
502
503 dwMaxSubKeyLen++;
504
505 for (dwIndex = 0; dwIndex < dwSubKeys; dwIndex++)
506 {
507 ParamArray->Array[dwIndex].pszName = HeapAlloc(GetProcessHeap(),
508 0,
509 dwMaxSubKeyLen * sizeof(WCHAR));
510 if (ParamArray->Array[dwIndex].pszName == NULL)
511 {
512 ERR("Parameter array allocation failed!\n");
513 goto done;
514 }
515
516 dwKeyLen = dwMaxSubKeyLen;
517 lError = RegEnumKeyExW(hParamsKey,
518 dwIndex,
519 ParamArray->Array[dwIndex].pszName,
520 &dwKeyLen,
521 NULL,
522 NULL,
523 NULL,
524 NULL);
525 if (lError != ERROR_SUCCESS)
526 break;
527
528 TRACE("Sub key '%S'\n", ParamArray->Array[dwIndex].pszName);
529
530 lError = RegOpenKeyExW(hParamsKey,
531 ParamArray->Array[dwIndex].pszName,
532 0,
533 KEY_READ,
534 &hParamKey);
535 if (lError == ERROR_SUCCESS)
536 {
537 GetStringValue(hParamKey,
538 L"ParamDesc",
539 &ParamArray->Array[dwIndex].pszDescription,
540 NULL);
541
542 GetStringValue(hParamKey,
543 L"Type",
544 &pszType,
545 NULL);
546 if (pszType != NULL)
547 {
548 if (_wcsicmp(pszType, L"int") == 0)
549 ParamArray->Array[dwIndex].Type = INT_TYPE;
550 else if (_wcsicmp(pszType, L"long") == 0)
551 ParamArray->Array[dwIndex].Type = LONG_TYPE;
552 else if (_wcsicmp(pszType, L"word") == 0)
553 ParamArray->Array[dwIndex].Type = WORD_TYPE;
554 else if (_wcsicmp(pszType, L"dword") == 0)
555 ParamArray->Array[dwIndex].Type = DWORD_TYPE;
556 else if (_wcsicmp(pszType, L"edit") == 0)
557 ParamArray->Array[dwIndex].Type = EDIT_TYPE;
558 else if (_wcsicmp(pszType, L"enum") == 0)
559 ParamArray->Array[dwIndex].Type = ENUM_TYPE;
560 else
561 ParamArray->Array[dwIndex].Type = NO_TYPE;
562
563 HeapFree(GetProcessHeap(), 0, pszType);
564 pszType = NULL;
565 }
566
567 GetStringValue(hParamKey,
568 L"Default",
569 &ParamArray->Array[dwIndex].pszDefault,
570 NULL);
571
572 GetBooleanValue(hParamKey,
573 L"Optional",
574 FALSE,
575 &ParamArray->Array[dwIndex].bOptional);
576
577 if (ParamArray->Array[dwIndex].Type == INT_TYPE ||
578 ParamArray->Array[dwIndex].Type == LONG_TYPE ||
579 ParamArray->Array[dwIndex].Type == WORD_TYPE ||
580 ParamArray->Array[dwIndex].Type == DWORD_TYPE)
581 {
582 if (ParamArray->Array[dwIndex].Type == INT_TYPE)
583 {
584 lDefaultMin = -32768L; //MIN_SHORT;
585 lDefaultMax = 32767L; //MAX_SHORT;
586 }
587 else if (ParamArray->Array[dwIndex].Type == LONG_TYPE)
588 {
589 lDefaultMin = (-2147483647L - 1); // MIN_LONG;
590 lDefaultMax = 2147483647L; // MAX_LONG;
591 }
592 else if (ParamArray->Array[dwIndex].Type == WORD_TYPE)
593 {
594 dwDefaultMin = 0UL;
595 dwDefaultMax = 65535UL; // MAX_WORD;
596 }
597 else if (ParamArray->Array[dwIndex].Type == DWORD_TYPE)
598 {
599 dwDefaultMin = 0UL;
600 dwDefaultMax = 4294967295UL; //MAX_DWORD;
601 }
602
603 if (ParamArray->Array[dwIndex].Type == INT_TYPE ||
604 ParamArray->Array[dwIndex].Type == LONG_TYPE)
605 {
606 GetLongValue(hParamKey,
607 L"Min",
608 lDefaultMin,
609 &ParamArray->Array[dwIndex].u.l.lMin);
610
611 GetLongValue(hParamKey,
612 L"Max",
613 lDefaultMax,
614 &ParamArray->Array[dwIndex].u.l.lMax);
615 }
616 else if (ParamArray->Array[dwIndex].Type == WORD_TYPE ||
617 ParamArray->Array[dwIndex].Type == DWORD_TYPE)
618 {
619 GetDWordValue(hParamKey,
620 L"Min",
621 dwDefaultMin,
622 &ParamArray->Array[dwIndex].u.dw.dwMin);
623
624 GetDWordValue(hParamKey,
625 L"Max",
626 dwDefaultMax,
627 &ParamArray->Array[dwIndex].u.dw.dwMax);
628 }
629
630 GetIntValue(hParamKey,
631 L"Base",
632 10,
633 &ParamArray->Array[dwIndex].iBase);
634
635 GetIntValue(hParamKey,
636 L"Step",
637 1,
638 &ParamArray->Array[dwIndex].iStep);
639 }
640 else if (ParamArray->Array[dwIndex].Type == EDIT_TYPE)
641 {
642 GetBooleanValue(hParamKey,
643 L"UpperCase",
644 FALSE,
645 &ParamArray->Array[dwIndex].bUpperCase);
646
647 GetIntValue(hParamKey,
648 L"TextLimit",
649 0,
650 &ParamArray->Array[dwIndex].iTextLimit);
651 }
652 else if (ParamArray->Array[dwIndex].Type == ENUM_TYPE)
653 {
654 GetEnumOptions(hParamKey,
655 &ParamArray->Array[dwIndex]);
656 }
657
658 RegCloseKey(hParamKey);
659 }
660
661 lError = GetStringValue(hDriverKey,
662 ParamArray->Array[dwIndex].pszName,
663 &ParamArray->Array[dwIndex].pszValue,
664 &ParamArray->Array[dwIndex].cchValueLength);
665 if ((lError == ERROR_SUCCESS) ||
666 (ParamArray->Array[dwIndex].pszDefault != NULL))
667 {
668 ParamArray->Array[dwIndex].bPresent = TRUE;
669 }
670 }
671
672 *ParameterArray = ParamArray;
673 ret = TRUE;
674
675done:
676 if (ret == FALSE && ParamArray != NULL)
677 FreeParameterArray(ParamArray);
678
679 if (hParamsKey != INVALID_HANDLE_VALUE)
680 RegCloseKey(hParamsKey);
681
682 if (hDriverKey != INVALID_HANDLE_VALUE)
683 RegCloseKey(hDriverKey);
684
685 return ret;
686}
#define ERR(fmt,...)
Definition: debug.h:113
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2504
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
Definition: reg.c:3662
#define GetProcessHeap()
Definition: compat.h:736
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
HKEY WINAPI SetupDiOpenDevRegKey(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Scope, DWORD HwProfile, DWORD KeyType, REGSAM samDesired)
Definition: devinst.c:5934
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define KEY_READ
Definition: nt_native.h:1023
#define L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
static DWORD GetEnumOptions(_In_ HKEY hKey, _In_ PPARAMETER pParameter)
Definition: propertypage.c:288
static DWORD GetBooleanValue(_In_ HKEY hKey, _In_ PWSTR pValueName, _In_ BOOL bDefault, _Out_ PBOOL pValue)
Definition: propertypage.c:154
static DWORD GetStringValue(_In_ HKEY hKey, _In_ PWSTR pValueName, _Out_ PWSTR *pString, _Out_opt_ PDWORD pdwStringLength)
Definition: propertypage.c:114
static DWORD GetDWordValue(_In_ HKEY hKey, _In_ PWSTR pValueName, _In_ DWORD dwDefault, _Out_ PDWORD pValue)
Definition: propertypage.c:252
static DWORD GetIntValue(_In_ HKEY hKey, _In_ PWSTR pValueName, _In_ INT iDefault, _Out_ PINT pValue)
Definition: propertypage.c:187
static DWORD GetLongValue(_In_ HKEY hKey, _In_ PWSTR pValueName, _In_ LONG lDefault, _Out_ PLONG pValue)
Definition: propertypage.c:217
static VOID FreeParameterArray(_In_ PPARAMETER_ARRAY ParamArray)
Definition: propertypage.c:74
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define DIREG_DRV
Definition: setupapi.h:182
_In_opt_ PSP_DEVINFO_DATA DeviceInfoData
Definition: setupapi.h:1528
#define DICS_FLAG_GLOBAL
Definition: setupapi.h:113
#define TRACE(s)
Definition: solgame.cpp:4
HDEVINFO DeviceInfoSet
Definition: propertypage.c:64
PSP_DEVINFO_DATA DeviceInfoData
Definition: propertypage.c:65
PARAMETER Array[0]
Definition: propertypage.c:68
PWSTR pszDefault
Definition: propertypage.c:33
struct _PARAMETER::@524::@526 dw
union _PARAMETER::@524 u
PWSTR pszDescription
Definition: propertypage.c:30
BOOL bPresent
Definition: propertypage.c:35
BOOL bOptional
Definition: propertypage.c:34
DWORD cchValueLength
Definition: propertypage.c:32
INT iTextLimit
Definition: propertypage.c:42
BOOL bUpperCase
Definition: propertypage.c:41
PARAM_TYPE Type
Definition: propertypage.c:36
struct _PARAMETER::@524::@525 l
PWSTR pszName
Definition: propertypage.c:29
PWSTR pszValue
Definition: propertypage.c:31
#define UL
Definition: tui.h:165
uint16_t * PWSTR
Definition: typedefs.h:56
int ret
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by NetPropPageProvider().

◆ DisplayParameter()

static VOID DisplayParameter ( _In_ HWND  hwnd,
_In_ PPARAMETER  Parameter 
)
static

Definition at line 813 of file propertypage.c.

816{
817 HWND hwndControl;
819 INT idx;
820 DWORD i;
821
824 if (Parameter->bOptional)
825 {
826 if (Parameter->bPresent)
828 else
830 }
831
832 switch (Parameter->Type)
833 {
834 case INT_TYPE:
835 case LONG_TYPE:
836 case WORD_TYPE:
837 case DWORD_TYPE:
839
841
842 if (Parameter->Type != DWORD_TYPE)
843 {
844 EnableWindow(hwndControl, Parameter->bPresent);
845 ShowWindow(hwndControl, SW_SHOW);
846 }
847
848 if (Parameter->Type == WORD_TYPE || Parameter->Type == DWORD_TYPE)
849 SendMessage(hwndControl, UDM_SETBASE, Parameter->iBase, 0);
850 else
851 SendMessage(hwndControl, UDM_SETBASE, 10, 0);
852
853 if (Parameter->Type == INT_TYPE || Parameter->Type == LONG_TYPE)
854 {
855 TRACE("SetMin %ld SetMax %ld\n", Parameter->u.l.lMin, Parameter->u.l.lMax);
856 SendMessage(hwndControl, UDM_SETRANGE32, Parameter->u.l.lMin, Parameter->u.l.lMax);
857 }
858 else if (Parameter->Type == WORD_TYPE)
859 {
860 TRACE("SetMin %lu SetMax %lu\n", Parameter->u.dw.dwMin, Parameter->u.dw.dwMax);
861 SendMessage(hwndControl, UDM_SETRANGE32, (INT)Parameter->u.dw.dwMin, (INT)Parameter->u.dw.dwMax);
862 }
863
865 EnableWindow(hwndControl, Parameter->bPresent);
866 ShowWindow(hwndControl, SW_SHOW);
867
868 Style = GetWindowLongPtr(hwndControl, GWL_STYLE);
869 Style |= ES_NUMBER;
870 SetWindowLongPtr(hwndControl, GWL_STYLE, Style);
871
872 Edit_LimitText(hwndControl, 0);
873
874 if (Parameter->pszValue)
875 Edit_SetText(hwndControl, Parameter->pszValue);
876 else if (Parameter->pszDefault)
877 Edit_SetText(hwndControl, Parameter->pszDefault);
878 break;
879
880 case EDIT_TYPE:
883
885 EnableWindow(hwndControl, Parameter->bPresent);
886 ShowWindow(hwndControl, SW_SHOW);
887
888 Style = GetWindowLongPtr(hwndControl, GWL_STYLE);
889 Style &= ~ES_NUMBER;
890 if (Parameter->bUpperCase)
892 else
893 Style &= ~ES_UPPERCASE;
894 SetWindowLongPtr(hwndControl, GWL_STYLE, Style);
895
896 Edit_LimitText(hwndControl, Parameter->iTextLimit);
897
898 if (Parameter->pszValue)
899 Edit_SetText(hwndControl, Parameter->pszValue);
900 else if (Parameter->pszDefault)
901 Edit_SetText(hwndControl, Parameter->pszDefault);
902 break;
903
904 case ENUM_TYPE:
907
909 EnableWindow(hwndControl, Parameter->bPresent);
910 ShowWindow(hwndControl, SW_SHOW);
911
912 ComboBox_ResetContent(hwndControl);
913
914 if (Parameter->pEnumOptions != NULL && Parameter->dwEnumOptions != 0)
915 {
916 for (i = 0; i < Parameter->dwEnumOptions; i++)
917 {
918 ComboBox_AddString(hwndControl, Parameter->pEnumOptions[i].pszName);
919 }
920 }
921
922 if (Parameter->pszValue)
923 {
925 if (idx != CB_ERR)
926 ComboBox_SetCurSel(hwndControl, idx);
927 }
928 else if (Parameter->pszDefault)
929 {
930 idx = FindEnumOption(Parameter, Parameter->pszDefault);
931 if (idx != CB_ERR)
932 ComboBox_SetCurSel(hwndControl, idx);
933 }
934 break;
935
936 default:
937 break;
938 }
939}
const DWORD Style
Definition: appswitch.c:71
unsigned int idx
Definition: utils.c:41
#define IDC_PROPERTY_VALUE_UPDN
Definition: resource.h:92
#define IDC_PROPERTY_PRESENT
Definition: resource.h:94
#define IDC_PROPERTY_VALUE_LIST
Definition: resource.h:93
#define IDC_PROPERTY_VALUE_EDIT
Definition: resource.h:91
#define IDC_PROPERTY_NOT_PRESENT
Definition: resource.h:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define ES_UPPERCASE
Definition: pedump.c:668
static INT FindEnumOption(_In_ PPARAMETER pParameter, _In_ PWSTR pszValue)
Definition: propertypage.c:403
#define UDM_SETBASE
Definition: commctrl.h:2149
#define UDM_SETRANGE32
Definition: commctrl.h:2151
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
int32_t INT
Definition: typedefs.h:58
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define ComboBox_SetCurSel(hwndCtl, index)
Definition: windowsx.h:66
#define Edit_LimitText(hwndCtl, cchMax)
Definition: windowsx.h:97
#define ComboBox_AddString(hwndCtl, lpsz)
Definition: windowsx.h:41
#define ComboBox_ResetContent(hwndCtl)
Definition: windowsx.h:63
#define Edit_SetText(hwndCtl, lpsz)
Definition: windowsx.h:112
#define Button_SetCheck(hwndCtl, check)
Definition: windowsx.h:35
#define SW_HIDE
Definition: winuser.h:768
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define CB_ERR
Definition: winuser.h:2435
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define SendMessage
Definition: winuser.h:5843
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define ES_NUMBER
Definition: winuser.h:301
#define SW_SHOW
Definition: winuser.h:775
#define GWL_STYLE
Definition: winuser.h:852
#define BST_CHECKED
Definition: winuser.h:197
_Inout_opt_ PVOID Parameter
Definition: rtltypes.h:323

Referenced by OnCommand(), and OnInitDialog().

◆ FindEnumOption()

static INT FindEnumOption ( _In_ PPARAMETER  pParameter,
_In_ PWSTR  pszValue 
)
static

Definition at line 403 of file propertypage.c.

406{
407 INT i;
408
409 if ((pParameter->pEnumOptions == NULL) ||
410 (pParameter->dwEnumOptions == 0))
411 return -1;
412
413 for (i = 0; i < pParameter->dwEnumOptions; i++)
414 {
415 if (_wcsicmp(pParameter->pEnumOptions[i].pszValue, pszValue) == 0)
416 return i;
417 }
418
419 return -1;
420}

Referenced by DisplayParameter().

◆ FreeParameterArray()

static VOID FreeParameterArray ( _In_ PPARAMETER_ARRAY  ParamArray)
static

Definition at line 74 of file propertypage.c.

76{
77 INT i, j;
78
79 if (ParamArray == NULL)
80 return;
81
82 for (i = 0; i < ParamArray->dwCount; i++)
83 {
84 if (ParamArray->Array[i].pszName != NULL)
85 HeapFree(GetProcessHeap(), 0, ParamArray->Array[i].pszName);
86
87 if (ParamArray->Array[i].pszDescription != NULL)
88 HeapFree(GetProcessHeap(), 0, ParamArray->Array[i].pszDescription);
89
90 if (ParamArray->Array[i].pszDefault != NULL)
91 HeapFree(GetProcessHeap(), 0, ParamArray->Array[i].pszDefault);
92
93
94 if (ParamArray->Array[i].pEnumOptions != NULL)
95 {
96 for (j = 0; j < ParamArray->Array[i].dwEnumOptions; j++)
97 {
98 if (ParamArray->Array[i].pEnumOptions[j].pszValue != NULL)
99 HeapFree(GetProcessHeap(), 0, ParamArray->Array[i].pEnumOptions[j].pszValue);
100
101 if (ParamArray->Array[i].pEnumOptions[j].pszName != NULL)
102 HeapFree(GetProcessHeap(), 0, ParamArray->Array[i].pEnumOptions[j].pszName);
103 }
104
105 HeapFree(GetProcessHeap(), 0, ParamArray->Array[i].pEnumOptions);
106 }
107 }
108
109 HeapFree(GetProcessHeap(), 0, ParamArray);
110}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250

Referenced by BuildParameterArray(), and OnDestroy().

◆ GetBooleanValue()

static DWORD GetBooleanValue ( _In_ HKEY  hKey,
_In_ PWSTR  pValueName,
_In_ BOOL  bDefault,
_Out_ PBOOL  pValue 
)
static

Definition at line 154 of file propertypage.c.

159{
160 WCHAR szBuffer[16];
161 DWORD dwLength = 0;
162 DWORD dwRegType;
163
164 *pValue = bDefault;
165
166 dwLength = sizeof(szBuffer);
168 pValueName,
169 NULL,
170 &dwRegType,
171 (LPBYTE)szBuffer,
172 &dwLength);
173
174 if (dwRegType == REG_SZ && dwLength >= sizeof(WCHAR))
175 {
176 if (szBuffer[0] == L'0')
177 *pValue = FALSE;
178 else
179 *pValue = TRUE;
180 }
181
182 return ERROR_SUCCESS;
183}
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
static DWORD DWORD * dwLength
Definition: fusion.c:86
FxAutoRegKey hKey
PWCHAR pValue
#define REG_SZ
Definition: layer.c:22
unsigned char * LPBYTE
Definition: typedefs.h:53

Referenced by BuildParameterArray().

◆ GetDWordValue()

static DWORD GetDWordValue ( _In_ HKEY  hKey,
_In_ PWSTR  pValueName,
_In_ DWORD  dwDefault,
_Out_ PDWORD  pValue 
)
static

Definition at line 252 of file propertypage.c.

257{
258 WCHAR szBuffer[24];
259 DWORD dwLength = 0;
260 DWORD dwRegType;
261 PWSTR ptr = NULL;
262
263 dwLength = sizeof(szBuffer);
265 pValueName,
266 NULL,
267 &dwRegType,
268 (LPBYTE)szBuffer,
269 &dwLength);
270
271 if (dwRegType == REG_SZ && dwLength >= sizeof(WCHAR))
272 {
273 *pValue = wcstoul(szBuffer, &ptr, 10);
274 if (*pValue == 0 && ptr != NULL)
275 *pValue = dwDefault;
276 }
277 else
278 {
279 *pValue = dwDefault;
280 }
281
282 return ERROR_SUCCESS;
283}
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
static PVOID ptr
Definition: dispmode.c:27

Referenced by BuildParameterArray().

◆ GetEnumOptions()

static DWORD GetEnumOptions ( _In_ HKEY  hKey,
_In_ PPARAMETER  pParameter 
)
static

Definition at line 288 of file propertypage.c.

291{
293 PENUM_OPTION pOptions = NULL;
294 DWORD dwValues, dwMaxValueNameLen, dwMaxValueLen;
295 DWORD dwValueNameLength, dwValueLength;
296 DWORD i;
297 DWORD dwError;
298
299 dwError = RegOpenKeyExW(hKey,
300 L"enum",
301 0,
302 KEY_READ,
303 &hEnumKey);
304 if (dwError != ERROR_SUCCESS)
305 return dwError;
306
307 dwError = RegQueryInfoKeyW(hEnumKey,
308 NULL,
309 NULL,
310 NULL,
311 NULL,
312 NULL,
313 NULL,
314 &dwValues,
315 &dwMaxValueNameLen,
316 &dwMaxValueLen,
317 NULL,
318 NULL);
319 if (dwError != ERROR_SUCCESS)
320 {
321 ERR("RegQueryInfoKeyW failed (Error %lu)\n", dwError);
322 goto done;
323 }
324
325 pOptions = HeapAlloc(GetProcessHeap(),
327 dwValues * sizeof(ENUM_OPTION));
328 if (pOptions == NULL)
329 {
330 dwError = ERROR_OUTOFMEMORY;
331 goto done;
332 }
333
334 for (i = 0; i < dwValues; i++)
335 {
336 dwValueNameLength = dwMaxValueNameLen + sizeof(WCHAR);
337 pOptions[i].pszValue = HeapAlloc(GetProcessHeap(),
338 0,
339 dwValueNameLength * sizeof(WCHAR));
340 if (pOptions[i].pszValue == NULL)
341 {
342 dwError = ERROR_OUTOFMEMORY;
343 goto done;
344 }
345
346 dwValueLength = dwMaxValueLen;
347 pOptions[i].pszName = HeapAlloc(GetProcessHeap(),
348 0,
349 dwValueLength);
350 if (pOptions[i].pszName == NULL)
351 {
352 dwError = ERROR_OUTOFMEMORY;
353 goto done;
354 }
355
356 dwError = RegEnumValueW(hEnumKey,
357 i,
358 pOptions[i].pszValue,
359 &dwValueNameLength,
360 NULL,
361 NULL,
362 (PBYTE)pOptions[i].pszName,
363 &dwValueLength);
364 if (dwError == ERROR_NO_MORE_ITEMS)
365 {
366 dwError = ERROR_SUCCESS;
367 goto done;
368 }
369 else if (dwError != ERROR_SUCCESS)
370 {
371 goto done;
372 }
373 }
374
375 pParameter->pEnumOptions = pOptions;
376 pParameter->dwEnumOptions = dwValues;
377 pOptions = NULL;
378
379done:
380 if (pOptions != NULL)
381 {
382 for (i = 0; i < dwValues; i++)
383 {
384 if (pOptions[i].pszValue != NULL)
385 HeapFree(GetProcessHeap(), 0, pOptions[i].pszValue);
386
387 if (pOptions[i].pszName != NULL)
388 HeapFree(GetProcessHeap(), 0, pOptions[i].pszName);
389 }
390
391 HeapFree(GetProcessHeap(), 0, pOptions);
392 }
393
394 if (hEnumKey != NULL)
396
397 return dwError;
398}
HKEY hEnumKey
Definition: umpnpmgr.c:44
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
Definition: reg.c:2830
#define ERROR_NO_MORE_ITEMS
Definition: compat.h:105
BYTE * PBYTE
Definition: pedump.c:66
PWSTR pszValue
Definition: propertypage.c:23

Referenced by BuildParameterArray().

◆ GetIntValue()

static DWORD GetIntValue ( _In_ HKEY  hKey,
_In_ PWSTR  pValueName,
_In_ INT  iDefault,
_Out_ PINT  pValue 
)
static

Definition at line 187 of file propertypage.c.

192{
193 WCHAR szBuffer[24];
194 DWORD dwLength = 0;
195 DWORD dwRegType;
196
197 *pValue = iDefault;
198
199 dwLength = sizeof(szBuffer);
201 pValueName,
202 NULL,
203 &dwRegType,
204 (LPBYTE)szBuffer,
205 &dwLength);
206
207 if (dwRegType == REG_SZ && dwLength >= sizeof(WCHAR))
208 {
209 *pValue = _wtoi(szBuffer);
210 }
211
212 return ERROR_SUCCESS;
213}
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)

Referenced by BuildParameterArray().

◆ GetLongValue()

static DWORD GetLongValue ( _In_ HKEY  hKey,
_In_ PWSTR  pValueName,
_In_ LONG  lDefault,
_Out_ PLONG  pValue 
)
static

Definition at line 217 of file propertypage.c.

222{
223 WCHAR szBuffer[24];
224 DWORD dwLength = 0;
225 DWORD dwRegType;
226 PWSTR ptr = NULL;
227
228 dwLength = sizeof(szBuffer);
230 pValueName,
231 NULL,
232 &dwRegType,
233 (LPBYTE)szBuffer,
234 &dwLength);
235
236 if (dwRegType == REG_SZ && dwLength >= sizeof(WCHAR))
237 {
238 *pValue = wcstol(szBuffer, &ptr, 10);
239 if (*pValue == 0 && ptr != NULL)
240 *pValue = lDefault;
241 }
242 else
243 {
244 *pValue = lDefault;
245 }
246
247 return ERROR_SUCCESS;
248}
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)

Referenced by BuildParameterArray().

◆ GetStringValue()

static DWORD GetStringValue ( _In_ HKEY  hKey,
_In_ PWSTR  pValueName,
_Out_ PWSTR pString,
_Out_opt_ PDWORD  pdwStringLength 
)
static

Definition at line 114 of file propertypage.c.

119{
121 DWORD dwLength = 0;
122 DWORD dwRegType;
123 DWORD dwError;
124
125 *pString = NULL;
126
127 RegQueryValueExW(hKey, pValueName, NULL, &dwRegType, NULL, &dwLength);
128
129 if (dwLength == 0 || dwRegType != REG_SZ)
131
132 pBuffer = HeapAlloc(GetProcessHeap(), 0, dwLength + sizeof(WCHAR));
133 if (pBuffer == NULL)
135
136 dwError = RegQueryValueExW(hKey, pValueName, NULL, NULL, (LPBYTE)pBuffer, &dwLength);
137 if (dwError != ERROR_SUCCESS)
138 {
140 return dwError;
141 }
142
143 pBuffer[dwLength / sizeof(WCHAR)] = UNICODE_NULL;
144
145 *pString = pBuffer;
146 if (pdwStringLength)
147 *pdwStringLength = dwLength;
148
149 return ERROR_SUCCESS;
150}
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
FxString * pString
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define UNICODE_NULL
PVOID pBuffer

Referenced by BuildParameterArray().

◆ NetPropertyPageDlgProc()

static INT_PTR CALLBACK NetPropertyPageDlgProc ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1098 of file propertypage.c.

1103{
1104 switch (uMsg)
1105 {
1106 case WM_INITDIALOG:
1107 return OnInitDialog(hwnd, wParam, lParam);
1108
1109 case WM_COMMAND:
1111 break;
1112
1113 case WM_NOTIFY:
1115 break;
1116
1117 case WM_DESTROY:
1118 OnDestroy(hwnd);
1119 break;
1120
1121 default:
1122 break;
1123 }
1124
1125 return FALSE;
1126}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static VOID OnDestroy(HWND hwnd)
static VOID OnNotify(HWND hwnd, WPARAM wParam, LPARAM lParam)
static VOID OnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
Definition: propertypage.c:995
static BOOL OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam)
Definition: propertypage.c:944
#define WM_NOTIFY
Definition: richedit.h:61
#define WM_COMMAND
Definition: winuser.h:1740
#define WM_INITDIALOG
Definition: winuser.h:1739
#define WM_DESTROY
Definition: winuser.h:1609

Referenced by NetPropPageProvider().

◆ NetPropPageProvider()

BOOL WINAPI NetPropPageProvider ( PSP_PROPSHEETPAGE_REQUEST  lpPropSheetPageRequest,
LPFNADDPROPSHEETPAGE  lpfnAddPropSheetPageProc,
LPARAM  lParam 
)

Definition at line 1131 of file propertypage.c.

1135{
1137 HPROPSHEETPAGE hPropSheetPage;
1138 PPARAMETER_ARRAY ParameterArray = NULL;
1139
1140 TRACE("NetPropPageProvider(%p %p %lx)\n",
1141 lpPropSheetPageRequest, lpfnAddPropSheetPageProc, lParam);
1142
1143 if (!BuildParameterArray(lpPropSheetPageRequest->DeviceInfoSet,
1144 lpPropSheetPageRequest->DeviceInfoData,
1145 &ParameterArray))
1146 return FALSE;
1147
1148 if (lpPropSheetPageRequest->PageRequested == SPPSR_ENUM_ADV_DEVICE_PROPERTIES)
1149 {
1150 TRACE("SPPSR_ENUM_ADV_DEVICE_PROPERTIES\n");
1151
1152 PropSheetPage.dwSize = sizeof(PROPSHEETPAGEW);
1153 PropSheetPage.dwFlags = 0;
1154 PropSheetPage.hInstance = netcfgx_hInstance;
1157 PropSheetPage.lParam = (LPARAM)ParameterArray;
1158 PropSheetPage.pfnCallback = NULL;
1159
1160 hPropSheetPage = CreatePropertySheetPageW(&PropSheetPage);
1161 if (hPropSheetPage == NULL)
1162 {
1163 ERR("CreatePropertySheetPageW() failed!\n");
1164 return FALSE;
1165 }
1166
1167 if (!(*lpfnAddPropSheetPageProc)(hPropSheetPage, lParam))
1168 {
1169 ERR("lpfnAddPropSheetPageProc() failed!\n");
1170 DestroyPropertySheetPage(hPropSheetPage);
1171 return FALSE;
1172 }
1173 }
1174
1175 TRACE("Done!\n");
1176
1177 return TRUE;
1178}
HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW lpPropSheetPage)
Definition: propsheet.c:3083
BOOL WINAPI DestroyPropertySheetPage(HPROPSHEETPAGE hPropPage)
Definition: propsheet.c:3152
HINSTANCE netcfgx_hInstance
Definition: netcfgx.c:15
#define IDD_NET_PROPERTY_DLG
Definition: resource.h:19
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
static BOOL BuildParameterArray(_In_ HDEVINFO DeviceInfoSet, _In_ PSP_DEVINFO_DATA DeviceInfoData, _Out_ PPARAMETER_ARRAY *ParameterArray)
Definition: propertypage.c:425
static INT_PTR CALLBACK NetPropertyPageDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
struct _PROPSHEETPAGEW PROPSHEETPAGEW
#define SPPSR_ENUM_ADV_DEVICE_PROPERTIES
Definition: setupapi.h:615
PSP_DEVINFO_DATA DeviceInfoData
Definition: setupapi.h:1104
LONG_PTR LPARAM
Definition: windef.h:208
#define MAKEINTRESOURCE
Definition: winuser.h:591

◆ OnCommand()

static VOID OnCommand ( HWND  hwnd,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 995 of file propertypage.c.

999{
1000 PPARAMETER_ARRAY pParamArray;
1001 INT iIndex;
1002
1003 TRACE("OnCommand()\n");
1004
1006 if (pParamArray == NULL)
1007 {
1008 ERR("pParamArray is NULL\n");
1009 return;
1010 }
1011
1013 {
1014 if (pParamArray->pCurrentParam != NULL)
1015 {
1016 ReadParameterValue(hwnd, pParamArray->pCurrentParam);
1017 }
1018
1019 iIndex = ListBox_GetCurSel((HWND)lParam);
1020 if (iIndex != LB_ERR && iIndex < pParamArray->dwCount)
1021 {
1022 pParamArray->pCurrentParam = (PPARAMETER)ListBox_GetItemData((HWND)lParam, iIndex);
1023 DisplayParameter(hwnd, pParamArray->pCurrentParam);
1024 }
1025 }
1026 else if ((LOWORD(wParam) == IDC_PROPERTY_PRESENT) && (HIWORD(wParam) == BN_CLICKED))
1027 {
1031 pParamArray->pCurrentParam->bPresent = TRUE;
1032 }
1034 {
1038 pParamArray->pCurrentParam->bPresent = FALSE;
1039 }
1040}
#define IDC_PROPERTY_NAME
Definition: resource.h:90
#define LOWORD(l)
Definition: pedump.c:82
static VOID ReadParameterValue(HWND hwnd, PPARAMETER pParam)
Definition: propertypage.c:691
static VOID DisplayParameter(_In_ HWND hwnd, _In_ PPARAMETER Parameter)
Definition: propertypage.c:813
struct _PARAMETER * PPARAMETER
struct _PARAMETER_ARRAY * PPARAMETER_ARRAY
PPARAMETER pCurrentParam
Definition: propertypage.c:66
#define HIWORD(l)
Definition: typedefs.h:247
#define ListBox_GetCurSel(hwndCtl)
Definition: windowsx.h:481
#define ListBox_GetItemData(hwndCtl, index)
Definition: windowsx.h:483
#define LB_ERR
Definition: winuser.h:2432
#define DWLP_USER
Definition: winuser.h:872
#define LBN_SELCHANGE
Definition: winuser.h:2075
#define BN_CLICKED
Definition: winuser.h:1925

Referenced by NetPropertyPageDlgProc().

◆ OnDestroy()

static VOID OnDestroy ( HWND  hwnd)
static

Definition at line 1076 of file propertypage.c.

1078{
1079 PPARAMETER_ARRAY pParamArray;
1080
1081 TRACE("OnDestroy()\n");
1082
1084 if (pParamArray == NULL)
1085 {
1086 ERR("pParamArray is NULL\n");
1087 return;
1088 }
1089
1090 FreeParameterArray(pParamArray);
1092}

Referenced by NetPropertyPageDlgProc().

◆ OnInitDialog()

static BOOL OnInitDialog ( HWND  hwnd,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 944 of file propertypage.c.

948{
949 PPARAMETER_ARRAY pParamArray;
950 HWND hwndControl;
951 PWSTR pszText;
952 DWORD i;
953 INT idx;
954
955 TRACE("OnInitDialog()\n");
956
958 if (pParamArray == NULL)
959 {
960 ERR("pParamArray is NULL\n");
961 return FALSE;
962 }
963
964 SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)pParamArray);
965
966 hwndControl = GetDlgItem(hwnd, IDC_PROPERTY_NAME);
967 if (hwndControl)
968 {
969 for (i = 0; i < pParamArray->dwCount; i++)
970 {
971 if (pParamArray->Array[i].pszDescription != NULL)
972 pszText = pParamArray->Array[i].pszDescription;
973 else
974 pszText = pParamArray->Array[i].pszName;
975
976 idx = ListBox_AddString(hwndControl, pszText);
977 if (idx != LB_ERR)
978 ListBox_SetItemData(hwndControl, idx, (LPARAM)&pParamArray->Array[i]);
979 }
980
981 if (pParamArray->dwCount > 0)
982 {
983 ListBox_SetCurSel(hwndControl, 0);
984 pParamArray->pCurrentParam = (PPARAMETER)ListBox_GetItemData(hwndControl, 0);
985 DisplayParameter(hwnd, pParamArray->pCurrentParam);
986 }
987 }
988
989 return TRUE;
990}
#define ListBox_SetCurSel(hwndCtl, index)
Definition: windowsx.h:500
#define ListBox_SetItemData(hwndCtl, index, data)
Definition: windowsx.h:502
#define ListBox_AddString(hwndCtl, lpsz)
Definition: windowsx.h:472

Referenced by NetPropertyPageDlgProc().

◆ OnNotify()

static VOID OnNotify ( HWND  hwnd,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1045 of file propertypage.c.

1049{
1050 PPARAMETER_ARRAY pParamArray;
1051
1052 TRACE("OnNotify()\n");
1053
1055 if (pParamArray == NULL)
1056 {
1057 ERR("pParamArray is NULL\n");
1058 return;
1059 }
1060
1061 if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY)
1062 {
1063 TRACE("PSN_APPLY!\n");
1064 WriteParameterArray(hwnd, pParamArray);
1065 }
1066 else if (((LPNMHDR)lParam)->code == (UINT)UDN_DELTAPOS)
1067 {
1068 LPNMUPDOWN pUpDown = (LPNMUPDOWN)lParam;
1069 pUpDown->iDelta *= pParamArray->pCurrentParam->iStep;
1070 }
1071}
unsigned int UINT
Definition: ndis.h:50
static VOID WriteParameterArray(_In_ HWND hwnd, _In_ PPARAMETER_ARRAY ParamArray)
Definition: propertypage.c:743
#define PSN_APPLY
Definition: prsht.h:117
struct _NM_UPDOWN * LPNMUPDOWN
#define UDN_DELTAPOS
Definition: commctrl.h:2169
int iDelta
Definition: commctrl.h:2166
Definition: inflate.c:139

Referenced by NetPropertyPageDlgProc().

◆ ReadParameterValue()

static VOID ReadParameterValue ( HWND  hwnd,
PPARAMETER  pParam 
)
static

Definition at line 691 of file propertypage.c.

694{
695 INT iIndex, iLength;
696
697 if (pParam->Type == ENUM_TYPE)
698 {
700 if (iIndex != CB_ERR && iIndex < pParam->dwEnumOptions)
701 {
702 iLength = wcslen(pParam->pEnumOptions[iIndex].pszValue);
703 if (iLength > pParam->cchValueLength)
704 {
705 if (pParam->pszValue != NULL)
706 HeapFree(GetProcessHeap(), 0, pParam->pszValue);
707
708 pParam->pszValue = HeapAlloc(GetProcessHeap(), 0, (iLength + 1) * sizeof(WCHAR));
709 }
710
711 if (pParam->pszValue != NULL)
712 {
713 wcscpy(pParam->pszValue,
714 pParam->pEnumOptions[iIndex].pszValue);
715 pParam->cchValueLength = iLength;
716 }
717 }
718 }
719 else
720 {
722 if (iLength > pParam->cchValueLength)
723 {
724 if (pParam->pszValue != NULL)
725 HeapFree(GetProcessHeap(), 0, pParam->pszValue);
726
727 pParam->pszValue = HeapAlloc(GetProcessHeap(), 0, (iLength + 1) * sizeof(WCHAR));
728 }
729
730 if (pParam->pszValue != NULL)
731 {
733 pParam->pszValue,
734 iLength + 1);
735 pParam->cchValueLength = iLength;
736 }
737 }
738}
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
PENUM_OPTION pEnumOptions
Definition: propertypage.c:39
#define ComboBox_GetCurSel(hwndCtl)
Definition: windowsx.h:49
#define Edit_GetTextLength(hwndCtl)
Definition: windowsx.h:95
#define Edit_GetText(hwndCtl, lpch, cchMax)
Definition: windowsx.h:94

Referenced by OnCommand(), and WriteParameterArray().

◆ WriteParameterArray()

static VOID WriteParameterArray ( _In_ HWND  hwnd,
_In_ PPARAMETER_ARRAY  ParamArray 
)
static

Definition at line 743 of file propertypage.c.

746{
747 SP_DEVINSTALL_PARAMS_W InstallParams;
748 PPARAMETER Param;
749 HKEY hDriverKey;
750 INT i;
751
752 if (ParamArray == NULL)
753 return;
754
755 hDriverKey = SetupDiOpenDevRegKey(ParamArray->DeviceInfoSet,
756 ParamArray->DeviceInfoData,
758 0,
759 DIREG_DRV,
760 KEY_WRITE);
761 if (hDriverKey == INVALID_HANDLE_VALUE)
762 {
763 ERR("SetupDiOpenDevRegKey() failed\n");
764 return;
765 }
766
767 for (i = 0; i < ParamArray->dwCount; i++)
768 {
769 Param = &ParamArray->Array[i];
770
771 if (Param == ParamArray->pCurrentParam)
772 {
773 ReadParameterValue(hwnd, Param);
774 }
775
776 if (Param->bPresent)
777 {
778 TRACE("Set '%S' --> '%S'\n", Param->pszName, Param->pszValue);
779 RegSetValueExW(hDriverKey,
780 Param->pszName,
781 0,
782 REG_SZ,
783 (LPBYTE)Param->pszValue,
784 (wcslen(Param->pszValue) + 1) * sizeof(WCHAR));
785 }
786 else
787 {
788 TRACE("Delete '%S'\n", Param->pszName);
789 RegDeleteValueW(hDriverKey,
790 Param->pszName);
791 }
792 }
793
794 RegCloseKey(hDriverKey);
795
796 /* Notify the installer of changes to the properties */
797 InstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS_W);
798 if (SetupDiGetDeviceInstallParamsW(ParamArray->DeviceInfoSet,
799 ParamArray->DeviceInfoData,
800 &InstallParams))
801 {
802 InstallParams.FlagsEx |= DI_FLAGSEX_PROPCHANGE_PENDING;
803
804 SetupDiSetDeviceInstallParamsW(ParamArray->DeviceInfoSet,
805 ParamArray->DeviceInfoData,
806 &InstallParams);
807 }
808}
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
Definition: reg.c:2330
BOOL WINAPI SetupDiSetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
Definition: devinst.c:4558
BOOL WINAPI SetupDiGetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
Definition: devinst.c:4451
#define KEY_WRITE
Definition: nt_native.h:1031
struct _SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS_W
#define DI_FLAGSEX_PROPCHANGE_PENDING
Definition: setupapi.h:86

Referenced by OnNotify().