[PATCH v4 1/3] localspl: AddMonitor should create registry entry for a monitor before initializing it.
Dmitry Timoshkov
dmitry at baikal.ru
Thu Sep 5 23:00:59 CDT 2019
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/localspl/provider.c | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/dlls/localspl/provider.c b/dlls/localspl/provider.c
index ccd19811cf..29c54332b4 100644
--- a/dlls/localspl/provider.c
+++ b/dlls/localspl/provider.c
@@ -1499,14 +1499,6 @@ static BOOL WINAPI fpAddMonitor(LPWSTR pName, DWORD Level, LPBYTE pMonitors)
return FALSE;
}
- /* Load and initialize the monitor. SetLastError() is called on failure */
- if ((pm = monitor_load(mi2w->pName, mi2w->pDLLName)) == NULL) {
- return FALSE;
- }
- monitor_unload(pm);
-
- SetLastError(ERROR_SUCCESS); /* Monitor installer depends on this */
-
if (RegCreateKeyW(HKEY_LOCAL_MACHINE, monitorsW, &hroot) != ERROR_SUCCESS) {
ERR("unable to create key %s\n", debugstr_w(monitorsW));
return FALSE;
@@ -1537,7 +1529,20 @@ static BOOL WINAPI fpAddMonitor(LPWSTR pName, DWORD Level, LPBYTE pMonitors)
len = (lstrlenW(mi2w->pDLLName) +1) * sizeof(WCHAR);
res = (RegSetValueExW(hentry, driverW, 0, REG_SZ,
(LPBYTE) mi2w->pDLLName, len) == ERROR_SUCCESS);
+
+ /* Load and initialize the monitor. SetLastError() is called on failure */
+ if ((pm = monitor_load(mi2w->pName, mi2w->pDLLName)) == NULL)
+ {
+ RegDeleteKeyW(hroot, mi2w->pName);
+ res = FALSE;
+ }
+ else
+ {
+ monitor_unload(pm);
+ SetLastError(ERROR_SUCCESS); /* Monitor installer depends on this */
+ }
}
+
RegCloseKey(hentry);
}
--
2.20.1
More information about the wine-devel
mailing list