advapi32[2/2]: obtain the process id locally
Mikolaj Zalewski
mikolajz at google.com
Wed Aug 22 20:19:25 CDT 2007
Do we need to send the pid of the child process through IPC instead of
it computing it locally? Wouldn't such code work as well?
-------------- next part --------------
From 1d7bb154c67a383dfcb09100f734cc09aacfed83 Mon Sep 17 00:00:00 2001
From: Mikolaj Zalewski <mikolaj at zalewski.pl>
Date: Wed, 22 Aug 2007 18:10:57 -0700
Subject: [PATCH] advapi32: obtain the process id locally
---
dlls/advapi32/service.c | 57 ++++-------------------------------------------
1 files changed, 5 insertions(+), 52 deletions(-)
diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index f922e62..fbc888d 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -69,7 +69,6 @@ typedef struct service_start_info_t
#define WINESERV_STARTINFO 1
#define WINESERV_GETSTATUS 2
#define WINESERV_SENDCONTROL 3
-#define WINESERV_SETPID 4
typedef struct service_data_t
{
@@ -553,41 +552,6 @@ static BOOL service_get_status(HANDLE pi
}
/******************************************************************************
- * service_handle_set_processID
- */
-static BOOL service_handle_set_processID(HANDLE pipe, service_data *service, DWORD dwProcessId)
-{
- DWORD count, ret = ERROR_SUCCESS;
-
- TRACE("received control %d\n", dwProcessId);
- service->status.dwProcessId = dwProcessId;
- return WriteFile(pipe, &ret, sizeof ret , &count, NULL);
-}
-
-/******************************************************************************
- * service_set_processID
- */
-static BOOL service_set_processID(HANDLE pipe, DWORD dwprocessId, LPDWORD dwResult)
-{
- DWORD cmd[2], count = 0;
- BOOL r;
-
- cmd[0] = WINESERV_SETPID;
- cmd[1] = dwprocessId;
- r = WriteFile( pipe, cmd, sizeof cmd, &count, NULL );
- if (!r || count != sizeof cmd)
- {
- ERR("service protocol error - failed to write pipe!\n");
- return r;
- }
- r = ReadFile( pipe, dwResult, sizeof *dwResult, &count, NULL );
- if (!r || count != sizeof *dwResult)
- ERR("service protocol error - failed to read pipe "
- "r = %d count = %d!\n", r, count);
- return r;
-}
-
-/******************************************************************************
* service_send_control
*/
static BOOL service_send_control(HANDLE pipe, DWORD dwControl, DWORD *result)
@@ -772,9 +736,6 @@ static DWORD WINAPI service_control_disp
case WINESERV_SENDCONTROL:
service_handle_control(pipe, service, req[1]);
break;
- case WINESERV_SETPID:
- service_handle_set_processID(pipe, service, req[1]);
- break;
default:
ERR("received invalid command %d length %d\n", req[0], req[1]);
}
@@ -800,15 +761,18 @@ static BOOL service_run_threads(void)
count = list_count( &service_list );
- TRACE("starting %d pipe listener threads\n", count);
+ TRACE("Starting %d pipe listener threads. Services running as process %d\n", count, GetCurrentProcessId());
handles = HeapAlloc(GetProcessHeap(), 0, sizeof(HANDLE) * (count + 1));
handles[n++] = __wine_make_process_system();
LIST_FOR_EACH_ENTRY( service, &service_list, service_data, entry )
+ {
+ service->status.dwProcessId = GetCurrentProcessId();
handles[n++] = CreateThread( NULL, 0, service_control_dispatcher,
service, 0, NULL );
+ }
assert(n == count + 1);
LeaveCriticalSection( &service_cs );
@@ -1741,7 +1705,6 @@ BOOL WINAPI StartServiceW(SC_HANDLE hSer
{
struct sc_service *hsvc;
BOOL r = FALSE;
- DWORD dwResult, dwProcessId = 0;
SC_LOCK hLock;
HANDLE handle = INVALID_HANDLE_VALUE;
@@ -1762,7 +1725,7 @@ BOOL WINAPI StartServiceW(SC_HANDLE hSer
if (handle==INVALID_HANDLE_VALUE)
{
/* start the service process */
- if (service_start_process(hsvc, &dwProcessId))
+ if (service_start_process(hsvc, NULL))
handle = service_open_pipe(hsvc->name);
}
@@ -1772,16 +1735,6 @@ BOOL WINAPI StartServiceW(SC_HANDLE hSer
CloseHandle(handle);
}
- if (r)
- {
- handle = service_open_pipe(hsvc->name);
- if (handle != INVALID_HANDLE_VALUE)
- {
- service_set_processID(handle, dwProcessId, &dwResult);
- CloseHandle(handle);
- }
- }
-
UnlockServiceDatabase( hLock );
TRACE("returning %d\n", r);
--
1.4.1
More information about the wine-patches
mailing list