You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Added patch to implement SHCreateSessionKey.
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
From ea888427e5b49e9e3a08bdec8a35261f8e220542 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Mon, 17 Feb 2014 11:52:46 +0900
|
||||
Subject: shell32: Implement SHCreateSessionKey.
|
||||
|
||||
This implementation is based on the Geoff Chappell description,
|
||||
and it seems to be enough for the application I have here.
|
||||
---
|
||||
dlls/shell32/shell32.spec | 1 +
|
||||
dlls/shell32/shellreg.c | 41 +++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 42 insertions(+)
|
||||
|
||||
diff --git a/dlls/shell32/shell32.spec b/dlls/shell32/shell32.spec
|
||||
index d73dcbb..ff1b522 100644
|
||||
--- a/dlls/shell32/shell32.spec
|
||||
+++ b/dlls/shell32/shell32.spec
|
||||
@@ -261,6 +261,7 @@
|
||||
704 stdcall -noname GUIDFromStringW(wstr ptr)
|
||||
709 stdcall SHGetSetFolderCustomSettings(ptr str long)
|
||||
714 stdcall @(ptr) SHELL32_714 # PathIsTemporaryW
|
||||
+ 723 stdcall SHCreateSessionKey(long ptr)
|
||||
727 stdcall SHGetImageList(long ptr ptr)
|
||||
730 stdcall -noname RestartDialogEx(long wstr long long)
|
||||
743 stdcall SHCreateFileExtractIconW(wstr long ptr ptr)
|
||||
diff --git a/dlls/shell32/shellreg.c b/dlls/shell32/shellreg.c
|
||||
index 37f3d9e..96a450e 100644
|
||||
--- a/dlls/shell32/shellreg.c
|
||||
+++ b/dlls/shell32/shellreg.c
|
||||
@@ -147,3 +147,44 @@ HRESULT WINAPI SHRegCloseKey (HKEY hkey)
|
||||
TRACE("%p\n",hkey);
|
||||
return RegCloseKey( hkey );
|
||||
}
|
||||
+
|
||||
+static const char session_reg_key[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SessionInfo\\";
|
||||
+
|
||||
+static BOOL WINAPI create_session_key(INIT_ONCE *once, void *param, void **context)
|
||||
+{
|
||||
+ static const char desktop_guid[] = "__wine_display_device_guid";
|
||||
+ ATOM guid_atom;
|
||||
+ HKEY hkey_session;
|
||||
+ LPWSTR session_reg_str = param;
|
||||
+
|
||||
+ guid_atom = HandleToULong(GetPropA(GetDesktopWindow(), desktop_guid));
|
||||
+ if (!guid_atom) return FALSE;
|
||||
+
|
||||
+ MultiByteToWideChar(CP_ACP, 0, session_reg_key, sizeof(session_reg_key), session_reg_str, sizeof(session_reg_key));
|
||||
+
|
||||
+ if (!GlobalGetAtomNameW(guid_atom, session_reg_str + sizeof(session_reg_key) - 1, 39))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (RegCreateKeyExW(HKEY_CURRENT_USER, session_reg_str, 0, NULL,
|
||||
+ REG_OPTION_VOLATILE, KEY_WRITE, NULL, &hkey_session, NULL))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ RegCloseKey(hkey_session);
|
||||
+ TRACE("session key %s\n", debugstr_w(session_reg_str));
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+/*************************************************************************
|
||||
+ * SHCreateSessionKey [SHELL32.723]
|
||||
+ *
|
||||
+ */
|
||||
+HRESULT WINAPI SHCreateSessionKey(REGSAM access, HKEY *hkey)
|
||||
+{
|
||||
+ static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT;
|
||||
+ static WCHAR session_reg_str[sizeof(session_reg_key) + 39];
|
||||
+
|
||||
+ InitOnceExecuteOnce(&init_once, create_session_key, session_reg_str, NULL);
|
||||
+
|
||||
+ TRACE("using session key %s\n", debugstr_w(session_reg_str));
|
||||
+ return RegOpenKeyExW(HKEY_CURRENT_USER, session_reg_str, 0, access, hkey);
|
||||
+}
|
||||
--
|
||||
1.7.9.5
|
||||
|
4
patches/shell32-SHCreateSessionKey/definition
Normal file
4
patches/shell32-SHCreateSessionKey/definition
Normal file
@@ -0,0 +1,4 @@
|
||||
Author: Erich E. Hoover
|
||||
Subject: shell32: Implement SHCreateSessionKey.
|
||||
Revision: 1
|
||||
Fixes: [35630] SHCreateSessionKey not implemented
|
Reference in New Issue
Block a user