reactos/dll/win32/iphlpapi/registry.c
Amine Khaldi c424146e2c Create a branch for cmake bringup.
svn path=/branches/cmake-bringup/; revision=48236
2010-07-24 18:52:44 +00:00

91 lines
1.9 KiB
C

#include "iphlpapi_private.h"
#include "debug.h"
int GetLongestChildKeyName( HANDLE RegHandle ) {
LONG Status;
DWORD MaxAdapterName;
Status = RegQueryInfoKeyW(RegHandle,
NULL,
NULL,
NULL,
NULL,
&MaxAdapterName,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
if (Status == ERROR_SUCCESS)
return MaxAdapterName + 1;
else
return -1;
}
LONG OpenChildKeyRead( HANDLE RegHandle,
PWCHAR ChildKeyName,
PHKEY ReturnHandle ) {
return RegOpenKeyExW( RegHandle,
ChildKeyName,
0,
KEY_READ,
ReturnHandle );
}
/*
* Yields a malloced value that must be freed.
*/
PWCHAR GetNthChildKeyName( HANDLE RegHandle, DWORD n ) {
LONG Status;
int MaxAdapterName = GetLongestChildKeyName( RegHandle );
PWCHAR Value;
DWORD ValueLen;
if (MaxAdapterName == -1)
return 0;
ValueLen = MaxAdapterName;
Value = (PWCHAR)HeapAlloc( GetProcessHeap(), 0, MaxAdapterName * sizeof(WCHAR) );
if (!Value) return 0;
Status = RegEnumKeyExW( RegHandle, n, Value, &ValueLen,
NULL, NULL, NULL, NULL );
if (Status != ERROR_SUCCESS) {
HeapFree(GetProcessHeap(), 0, Value);
return 0;
} else {
Value[ValueLen] = 0;
return Value;
}
}
void ConsumeChildKeyName( PWCHAR Name ) {
if (Name) HeapFree( GetProcessHeap(), 0, Name );
}
PWCHAR QueryRegistryValueString( HANDLE RegHandle, PWCHAR ValueName ) {
PWCHAR Name;
DWORD ReturnedSize = 0;
if (RegQueryValueExW( RegHandle, ValueName, NULL, NULL, NULL,
&ReturnedSize ) != 0) {
return 0;
} else {
Name = malloc( ReturnedSize);
RegQueryValueExW( RegHandle, ValueName, NULL, NULL, (PVOID)Name,
&ReturnedSize );
return Name;
}
}
void ConsumeRegValueString( PWCHAR Value ) {
if (Value) free(Value);
}
PWCHAR *QueryRegistryValueStringMulti( HANDLE RegHandle, PWCHAR ValueName ) {
return 0; /* FIXME if needed */
}