Added patch to implement SHCreateSessionKey.

This commit is contained in:
Erich E. Hoover 2014-07-26 15:49:56 -06:00
parent bca05a6284
commit df56f3b7dd
5 changed files with 101 additions and 1 deletions

View File

@ -23,6 +23,7 @@ These patches fix the following Wine bugs:
* Support for interface change notifications ([Wine Bug #32328](http://bugs.winehq.org/show_bug.cgi?id=32328 "Many .NET and Silverlight applications require SIO_ADDRESS_LIST_CHANGE for interface change notifications"))
* Support for AllocateAndGetTcpExTableFromStack ([Wine Bug #34372](http://bugs.winehq.org/show_bug.cgi?id=34372 "Add missing function AllocateAndGetTcpExTableFromStack() to iphlpapi.dll"))
* Support for inherited file ACLs ([Wine Bug #34406](http://bugs.winehq.org/show_bug.cgi?id=34406 "Finale Notepad 2012 doesn't copy/create user files on program start"))
* SHCreateSessionKey not implemented ([Wine Bug #35630](http://bugs.winehq.org/show_bug.cgi?id=35630 "SHCreateSessionKey is unimplemented"))
* Add Dynamic DST exceptions for Israel Standard Time ([Wine Bug #36374](http://bugs.winehq.org/show_bug.cgi?id=36374 "Israel timezone handled incorrectly"))
Besides that the following additional changes are included:

3
debian/changelog vendored
View File

@ -1,8 +1,9 @@
wine-compholio (1.7.24) UNRELEASED; urgency=low
* Added patch to implement SHCreateSessionKey.
* Added patch to implement AllocateAndGetTcpExTableFromStack.
* Added patch to fix ConnectNamedPort return value in overlapped mode.
* Added patch to store IOCS data in a property instead of GWLP_USERDATA.
-- Erich E. Hoover <erich.e.hoover@gmail.com> Sat, 26 Jul 2014 15:18:40 -0600
-- Erich E. Hoover <erich.e.hoover@gmail.com> Sat, 26 Jul 2014 15:49:33 -0600
wine-compholio (1.7.23) unstable; urgency=low
* Rewrite of patch system to simplify maintaining large patchsets.

View File

@ -24,6 +24,7 @@ PATCHLIST := Miscellaneous.ok \
server-Misc_ACL.ok \
server-Stored_ACLs.ok \
shell32-Default_Folder_ACLs.ok \
shell32-SHCreateSessionKey.ok \
shlwapi-UrlCombine.ok \
strmbase-Lock_Race_Conditions.ok \
wineboot-HKEY_DYN_DATA.ok \
@ -408,6 +409,23 @@ shell32-Default_Folder_ACLs.ok:
echo '+ { "shell32-Default_Folder_ACLs", "Erich E. Hoover", "Generate default ACLs for user shell folders. [rev 6]" },'; \
) > shell32-Default_Folder_ACLs.ok
# Patchset shell32-SHCreateSessionKey
# |
# | Included patches:
# | * shell32: Implement SHCreateSessionKey. [by Erich E. Hoover]
# |
# | This patchset fixes the following Wine bugs:
# | * [#35630] SHCreateSessionKey is unimplemented
# |
# | Modified files:
# | * dlls/shell32/shell32.spec, dlls/shell32/shellreg.c
# |
shell32-SHCreateSessionKey.ok:
$(PATCH) < shell32-SHCreateSessionKey/0001-shell32-Implement-SHCreateSessionKey.patch
@( \
echo '+ { "shell32-SHCreateSessionKey", "Erich E. Hoover", "shell32: Implement SHCreateSessionKey." },'; \
) > shell32-SHCreateSessionKey.ok
# Patchset shlwapi-UrlCombine
# |
# | Included patches:

View File

@ -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

View File

@ -0,0 +1,4 @@
Author: Erich E. Hoover
Subject: shell32: Implement SHCreateSessionKey.
Revision: 1
Fixes: [35630] SHCreateSessionKey not implemented