Paul Vriens : advapi32:
Create specific access rights for service control manager handles.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Jul 11 07:50:49 CDT 2007
Module: wine
Branch: master
Commit: 14ab7d766fbb086c7d898d67f2b587137b5dfcb9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=14ab7d766fbb086c7d898d67f2b587137b5dfcb9
Author: Paul Vriens <paul.vriens.wine at gmail.com>
Date: Tue Jul 10 16:31:10 2007 +0200
advapi32: Create specific access rights for service control manager handles.
---
dlls/advapi32/service.c | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index 9fc351f..7bded19 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -45,6 +45,13 @@ static const WCHAR szServiceManagerKey[] = { 'S','y','s','t','e','m','\\',
static const WCHAR szSCMLock[] = {'A','D','V','A','P','I','_','S','C','M',
'L','O','C','K',0};
+static const GENERIC_MAPPING scm_generic = {
+ (STANDARD_RIGHTS_READ | SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_QUERY_LOCK_STATUS),
+ (STANDARD_RIGHTS_WRITE | SC_MANAGER_CREATE_SERVICE | SC_MANAGER_MODIFY_BOOT_CONFIG),
+ (STANDARD_RIGHTS_EXECUTE | SC_MANAGER_CONNECT | SC_MANAGER_LOCK),
+ SC_MANAGER_ALL_ACCESS
+};
+
typedef struct service_start_info_t
{
DWORD cmd;
@@ -1041,6 +1048,7 @@ SC_HANDLE WINAPI OpenSCManagerW( LPCWSTR lpMachineName, LPCWSTR lpDatabaseName,
struct sc_manager *manager;
HKEY hReg;
LONG r;
+ DWORD new_mask = dwDesiredAccess;
TRACE("(%s,%s,0x%08x)\n", debugstr_w(lpMachineName),
debugstr_w(lpDatabaseName), dwDesiredAccess);
@@ -1077,8 +1085,9 @@ SC_HANDLE WINAPI OpenSCManagerW( LPCWSTR lpMachineName, LPCWSTR lpDatabaseName,
if (r!=ERROR_SUCCESS)
goto error;
- manager->dwAccess = dwDesiredAccess;
- TRACE("returning %p\n", manager);
+ RtlMapGenericMask(&new_mask, &scm_generic);
+ manager->dwAccess = new_mask;
+ TRACE("returning %p (access : 0x%08x)\n", manager, manager->dwAccess);
return (SC_HANDLE) &manager->hdr;
More information about the wine-cvs
mailing list