5 #include "ipregprivate.h"
9 int GetLongestChildKeyName( HANDLE RegHandle
) {
13 Status
= RegQueryInfoKeyW(RegHandle
,
25 if (Status
== ERROR_SUCCESS
)
26 return MaxAdapterName
+ 1;
31 LONG
OpenChildKeyRead( HANDLE RegHandle
,
33 PHKEY ReturnHandle
) {
34 return RegOpenKeyExW( RegHandle
,
42 * Yields a malloced value that must be freed.
45 PWCHAR
GetNthChildKeyName( HANDLE RegHandle
, DWORD n
) {
47 int MaxAdapterName
= GetLongestChildKeyName( RegHandle
);
51 if (MaxAdapterName
== -1) {
52 RegCloseKey( RegHandle
);
56 ValueLen
= MaxAdapterName
;
57 Value
= (PWCHAR
)malloc( MaxAdapterName
* sizeof(WCHAR
) );
58 Status
= RegEnumKeyExW( RegHandle
, n
, Value
, &ValueLen
,
59 NULL
, NULL
, NULL
, NULL
);
60 if (Status
!= ERROR_SUCCESS
)
68 void ConsumeChildKeyName( PWCHAR Name
) {
69 if (Name
) free( Name
);
72 PWCHAR
QueryRegistryValueString( HANDLE RegHandle
, PWCHAR ValueName
) {
74 DWORD ReturnedSize
= 0;
76 if (RegQueryValueExW( RegHandle
, ValueName
, NULL
, NULL
, NULL
,
80 Name
= malloc( (ReturnedSize
+ 1) * sizeof(WCHAR
) );
81 RegQueryValueExW( RegHandle
, ValueName
, NULL
, NULL
, (PVOID
)Name
,
83 Name
[ReturnedSize
] = 0;
88 void ConsumeRegValueString( PWCHAR Value
) {
89 if (Value
) free(Value
);
92 PWCHAR
*QueryRegistryValueStringMulti( HANDLE RegHandle
, PWCHAR ValueName
) {
93 return 0; /* FIXME if needed */
96 void ConsumeRegValueStringMulti( PWCHAR
*Value
) {