Implement DuplicateString and QueryRegistryValue. Modified: trunk/reactos/include/wine/setupapi.h Modified: trunk/reactos/lib/setupapi/misc.c Modified: trunk/reactos/lib/setupapi/setupapi.spec _____
Modified: trunk/reactos/include/wine/setupapi.h --- trunk/reactos/include/wine/setupapi.h 2005-01-24 11:53:36 UTC (rev 13247) +++ trunk/reactos/include/wine/setupapi.h 2005-01-24 14:17:30 UTC (rev 13248) @@ -613,11 +613,12 @@
#define SPDRP_MAXIMUM_PROPERTY 0x00000023
-VOID WINAPI MyFree( LPVOID lpMem ); -LPVOID WINAPI MyMalloc( DWORD dwSize ); -LPVOID WINAPI MyRealloc( LPVOID lpSrc, DWORD dwSize ); +LPWSTR WINAPI DuplicateString(LPCWSTR lpSrc); +VOID WINAPI MyFree(LPVOID lpMem); +LPVOID WINAPI MyMalloc(DWORD dwSize); +LPVOID WINAPI MyRealloc(LPVOID lpSrc, DWORD dwSize);
-LONG WINAPI QueryRegistryValue( HKEY, LPCWSTR, LPBYTE *, LPDWORD, LPDWORD ); +LONG WINAPI QueryRegistryValue(HKEY, LPCWSTR, LPBYTE *, LPDWORD, LPDWORD);
void WINAPI InstallHinfSectionA( HWND hwnd, HINSTANCE handle, LPCSTR cmdline, INT show ); void WINAPI InstallHinfSectionW( HWND hwnd, HINSTANCE handle, LPCWSTR cmdline, INT show ); _____
Modified: trunk/reactos/lib/setupapi/misc.c --- trunk/reactos/lib/setupapi/misc.c 2005-01-24 11:53:36 UTC (rev 13247) +++ trunk/reactos/lib/setupapi/misc.c 2005-01-24 14:17:30 UTC (rev 13248) @@ -91,3 +91,82 @@
return HeapReAlloc(GetProcessHeap(), 0, lpSrc, dwSize); } + + +/********************************************************************** **** + * DuplicateString [SETUPAPI.@] + * + * Duplicates a unicode string. + * + * PARAMS + * lpSrc [I] pointer to the unicode string that will be duplicated + * + * RETURNS + * Success: pointer to the duplicated unicode string + * Failure: NULL + * + * NOTES + * Call MyFree() to release the duplicated string. + */ + +LPWSTR WINAPI DuplicateString(LPCWSTR lpSrc) +{ + LPWSTR lpDst; + + lpDst = MyMalloc((lstrlenW(lpSrc) + 1) * sizeof(WCHAR)); + if (lpDst == NULL) + return NULL; + + wcscpy(lpDst, lpSrc); + + return lpDst; +} + + +/********************************************************************** **** + * QueryRegistryValue [SETUPAPI.@] + * + * Retrieves value data from the registry and allocates memory for the + * value data. + * + * PARAMS + * hKey [I] Handle of the key to query + * lpValueName [I] Name of value under hkey to query + * lpData [O] Destination for the values contents, + * lpType [O] Destination for the value type + * lpcbData [O] Destination for the size of data + * + * RETURNS + * Success: ERROR_SUCCESS + * Failure: Otherwise + * + * NOTES + * Use MyFree to release the lpData buffer. + */ + +LONG WINAPI QueryRegistryValue(HKEY hKey, + LPCWSTR lpValueName, + LPBYTE *lpData, + LPDWORD lpType, + LPDWORD lpcbData) +{ + LONG lError; + + /* Get required buffer size */ + *lpcbData = 0; + lError = RegQueryValueExW(hKey, lpValueName, 0, lpType, NULL, lpcbData); + if (lError != ERROR_SUCCESS) + return lError; + + /* Allocate buffer */ + *lpData = MyMalloc(*lpcbData); + if (*lpData == NULL) + return ERROR_NOT_ENOUGH_MEMORY; + + /* Query registry value */ + lError = RegQueryValueExW(hKey, lpValueName, 0, lpType, *lpData, lpcbData); + if (lError != ERROR_SUCCESS) + MyFree(*lpData); + + return lError; +} _____
Modified: trunk/reactos/lib/setupapi/setupapi.spec --- trunk/reactos/lib/setupapi/setupapi.spec 2005-01-24 11:53:36 UTC (rev 13247) +++ trunk/reactos/lib/setupapi/setupapi.spec 2005-01-24 14:17:30 UTC (rev 13248) @@ -21,7 +21,7 @@
@ stub DelimStringToMultiSz @ stub DestroyTextFileReadBuffer @ stub DoesUserHavePrivilege -@ stub DuplicateString +@ stdcall DuplicateString(wstr) @ stub EnablePrivilege @ stub ExtensionPropSheetPageProc @ stub FileExists @@ -46,7 +46,7 @@ @ stub OpenAndMapFileForRead @ stub OutOfMemory @ stub QueryMultiSzValueToArray -@ stub QueryRegistryValue +@ stdcall QueryRegistryValue(long wstr ptr ptr ptr) @ stub ReadAsciiOrUnicodeTextFile @ stub RegistryDelnode @ stub RetreiveFileSecurity