"Tony Lambregts" tony_lambregts@telusplanet.net wrote:
-IMPORTS = kernel32 ntdll +IMPORTS = kernel32 ntdll user32
I'm not sure Alexandre will like it. Until for now, creation of the circular dependencies were prohibitted. Probably it's better to use swprintf from ntdll, or a set of calls strcpyW/ntdll._ultow/strcatW.
-LONG WINAPI RegSaveKeyW( HKEY hkey, LPCWSTR file, LPSECURITY_ATTRIBUTES sa ) +LONG WINAPI RegSaveKeyA( HKEY hkey, LPCSTR file, LPSECURITY_ATTRIBUTES sa ) {
- LPSTR fileA = HEAP_strdupWtoA( GetProcessHeap(), 0, file );
- DWORD ret = RegSaveKeyA( hkey, fileA, sa );
- if (fileA) HeapFree( GetProcessHeap(), 0, fileA );
- return ret;
- UNICODE_STRING *fileW = &NtCurrentTeb()->StaticUnicodeString;
- STRING fileA;
- if (!file || !*file)
- {
SetLastError(ERROR_PATH_NOT_FOUND);
return FALSE;
As Alexandre has already pointed out, registry APIs are supposed to not change last error value.
- }
- RtlInitAnsiString(&fileA, file);
- RtlAnsiStringToUnicodeString(fileW, &fileA, FALSE);
- if (fileW) return RegSaveKeyW(hkey, fileW->Buffer, sa);
- return FALSE;
fileW is always not NULL, so, there is no need to check it. What you really need to check is a return value of RtlAnsiStringToUnicodeString.