Remove some calls to HEAP_strdupAtoW from advapi32.

diff --git a/dlls/advapi32/registry.c b/dlls/advapi32/registry.c
index fddba70..9d71c9c 100644
--- a/dlls/advapi32/registry.c
+++ b/dlls/advapi32/registry.c
@@ -36,6 +36,7 @@
 #include "heap.h"
 #include "wine/server.h"
 #include "wine/debug.h"
+#include "winternl.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(reg);
 
@@ -1636,9 +1637,12 @@
  */
 LONG WINAPI RegRestoreKeyA( HKEY hkey, LPCSTR lpFile, DWORD dwFlags )
 {
-    LPWSTR lpFileW = HEAP_strdupAtoW( GetProcessHeap(), 0, lpFile );
-    LONG ret = RegRestoreKeyW( hkey, lpFileW, dwFlags );
-    HeapFree( GetProcessHeap(), 0, lpFileW );
+    UNICODE_STRING lpFileW;
+    LONG ret;
+
+    RtlCreateUnicodeStringFromAsciiz( &lpFileW, lpFile );
+    ret = RegRestoreKeyW( hkey, lpFileW.Buffer, dwFlags );
+    RtlFreeUnicodeString( &lpFileW );
     return ret;
 }
 
@@ -1662,9 +1666,12 @@
  */
 LONG WINAPI RegUnLoadKeyA( HKEY hkey, LPCSTR lpSubKey )
 {
-    LPWSTR lpSubKeyW = HEAP_strdupAtoW( GetProcessHeap(), 0, lpSubKey );
-    LONG ret = RegUnLoadKeyW( hkey, lpSubKeyW );
-    if(lpSubKeyW) HeapFree( GetProcessHeap(), 0, lpSubKeyW);
+    UNICODE_STRING lpSubKeyW;
+    LONG ret;
+
+    RtlCreateUnicodeStringFromAsciiz( &lpSubKeyW, lpSubKey );
+    ret = RegUnLoadKeyW( hkey, lpSubKeyW.Buffer );
+    RtlFreeUnicodeString( &lpSubKeyW );
     return ret;
 }
 
@@ -1693,13 +1700,18 @@
 LONG WINAPI RegReplaceKeyA( HKEY hkey, LPCSTR lpSubKey, LPCSTR lpNewFile,
                               LPCSTR lpOldFile )
 {
-    LPWSTR lpSubKeyW = HEAP_strdupAtoW( GetProcessHeap(), 0, lpSubKey );
-    LPWSTR lpNewFileW = HEAP_strdupAtoW( GetProcessHeap(), 0, lpNewFile );
-    LPWSTR lpOldFileW = HEAP_strdupAtoW( GetProcessHeap(), 0, lpOldFile );
-    LONG ret = RegReplaceKeyW( hkey, lpSubKeyW, lpNewFileW, lpOldFileW );
-    HeapFree( GetProcessHeap(), 0, lpOldFileW );
-    HeapFree( GetProcessHeap(), 0, lpNewFileW );
-    HeapFree( GetProcessHeap(), 0, lpSubKeyW );
+    UNICODE_STRING lpSubKeyW;
+    UNICODE_STRING lpNewFileW;
+    UNICODE_STRING lpOldFileW;
+    LONG ret;
+
+    RtlCreateUnicodeStringFromAsciiz( &lpSubKeyW, lpSubKey );
+    RtlCreateUnicodeStringFromAsciiz( &lpOldFileW, lpOldFile );
+    RtlCreateUnicodeStringFromAsciiz( &lpNewFileW, lpNewFile );
+    ret = RegReplaceKeyW( hkey, lpSubKeyW.Buffer, lpNewFileW.Buffer, lpOldFileW.Buffer );
+    RtlFreeUnicodeString( &lpOldFileW );
+    RtlFreeUnicodeString( &lpNewFileW );
+    RtlFreeUnicodeString( &lpSubKeyW );
     return ret;
 }
 
@@ -1820,9 +1832,12 @@
  */
 LONG WINAPI RegConnectRegistryA( LPCSTR machine, HKEY hkey, PHKEY reskey )
 {
-    LPWSTR machineW = HEAP_strdupAtoW( GetProcessHeap(), 0, machine );
-    DWORD ret = RegConnectRegistryW( machineW, hkey, reskey );
-    HeapFree( GetProcessHeap(), 0, machineW );
+    UNICODE_STRING machineW;
+    LONG ret;
+
+    RtlCreateUnicodeStringFromAsciiz( &machineW, machine );
+    ret = RegConnectRegistryW( machineW.Buffer, hkey, reskey );
+    RtlFreeUnicodeString( &machineW );
     return ret;
 }