Added support for machine keysets.

diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c
index bcaafbe..a06b5fd 100644
--- a/dlls/rsaenh/rsaenh.c
+++ b/dlls/rsaenh/rsaenh.c
@@ -691,7 +691,7 @@
     KEYCONTAINER *pKeyContainer = (KEYCONTAINER*)pObjectHdr;
     CRYPTKEY *pKey;
     CHAR szRSABase[MAX_PATH];
-    HKEY hKey;
+    HKEY hKey, hRootKey;
     DWORD dwLen;
     BYTE *pbKey;
 
@@ -701,7 +701,13 @@
          */
         sprintf(szRSABase, RSAENH_REGKEY, pKeyContainer->szName);
 
-        if (RegCreateKeyExA(HKEY_CURRENT_USER, szRSABase, 0, NULL, REG_OPTION_NON_VOLATILE, 
+        if (pKeyContainer->dwFlags & CRYPT_MACHINE_KEYSET) {
+            hRootKey = HKEY_LOCAL_MACHINE;
+        } else {
+            hRootKey = HKEY_CURRENT_USER;
+        }
+        
+        if (RegCreateKeyExA(hRootKey, szRSABase, 0, NULL, REG_OPTION_NON_VOLATILE, 
                             KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
         {
             if (lookup_handle(&handle_table, pKeyContainer->hKeyExchangeKeyPair, RSAENH_MAGIC_KEY, 
@@ -816,14 +822,20 @@
 {
     CHAR szRSABase[MAX_PATH];
     BYTE *pbKey;
-    HKEY hKey;
+    HKEY hKey, hRootKey;
     DWORD dwValueType, dwLen;
     KEYCONTAINER *pKeyContainer;
     HCRYPTPROV hKeyContainer;
     
     sprintf(szRSABase, RSAENH_REGKEY, pszContainerName);
 
-    if (RegOpenKeyExA(HKEY_CURRENT_USER, szRSABase, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
+    if (dwFlags & CRYPT_MACHINE_KEYSET) {
+        hRootKey = HKEY_LOCAL_MACHINE;
+    } else {
+        hRootKey = HKEY_CURRENT_USER;
+    }
+
+    if (RegOpenKeyExA(hRootKey, szRSABase, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
     {
         SetLastError(NTE_BAD_KEYSET);
         return (HCRYPTPROV)INVALID_HANDLE_VALUE;