Implemented LockServiceDatabase and UnlockServiceDatabase
Alexander Yaworsky
yaworsky at migusoft.ru
Thu Sep 2 00:26:56 CDT 2004
Hello
Introduced global shared memory object for locking SCM database.
Database is locked when this object extsts.
When StartServiceCtrlDispatcher is called it must somehow obtain service
name for naming global objects related with service (and for
SERVICE_WIN32_SHARE_PROCESS name is also required to select
service table entry).
Because at this moment database is locked we'll use shared memory
object capabilities as a bonus to pass service name from StartService
to StartServiceCtrlDispatcher across process boundary.
ChangeLog:
Implemented LockServiceDatabase and UnlockServiceDatabase
Index: dlls/advapi32/service.c
===================================================================
RCS file: /home/wine/wine/dlls/advapi32/service.c,v
retrieving revision 1.51
diff -u -r1.51 service.c
--- dlls/advapi32/service.c 1 Sep 2004 17:29:00 -0000 1.51
+++ dlls/advapi32/service.c 2 Sep 2004 05:17:07 -0000
@@ -43,6 +43,8 @@
static const WCHAR szServiceManagerKey[] = { 'S','y','s','t','e','m','\\',
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
'S','e','r','v','i','c','e','s','\\',0 };
+static const WCHAR szSCMLock[] = {'A','D','V','A','P','I','_','S','C','M',
+ 'L','O','C','K',0};
/******************************************************************************
* SC_HANDLEs
@@ -286,8 +288,22 @@
*/
LPVOID WINAPI LockServiceDatabase (SC_HANDLE hSCManager)
{
- FIXME("%p\n",hSCManager);
- return (SC_HANDLE)0xcacacafe;
+ HANDLE ret;
+
+ TRACE("%p\n",hSCManager);
+
+ ret = CreateFileMappingW( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
+ 0, MAX_SERVICE_NAME * sizeof(WCHAR), szSCMLock );
+ if( ret && GetLastError() == ERROR_ALREADY_EXISTS )
+ {
+ CloseHandle( ret );
+ ret = NULL;
+ SetLastError( ERROR_SERVICE_DATABASE_LOCKED );
+ }
+
+ TRACE("returning %p\n", ret);
+
+ return ret;
}
/******************************************************************************
@@ -295,8 +311,9 @@
*/
BOOL WINAPI UnlockServiceDatabase (LPVOID ScLock)
{
- FIXME(": %p\n",ScLock);
- return TRUE;
+ TRACE("%p\n",ScLock);
+
+ return CloseHandle( (HANDLE) ScLock );
}
/******************************************************************************
More information about the wine-patches
mailing list