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;