2 * Win32 advapi functions
4 * Copyright 1995 Sven Verdoolaege
12 #include "debugtools.h"
14 DEFAULT_DEBUG_CHANNEL(advapi)
16 /* FIXME: Where do these belong? */
17 typedef DWORD SERVICE_STATUS_HANDLE;
18 typedef VOID (WINAPI *LPHANDLER_FUNCTION)( DWORD dwControl);
21 /******************************************************************************
22 * EnumServicesStatus32A [ADVAPI32.38]
25 EnumServicesStatusA( HANDLE hSCManager, DWORD dwServiceType,
26 DWORD dwServiceState, LPVOID lpServices,
27 DWORD cbBufSize, LPDWORD pcbBytesNeeded,
28 LPDWORD lpServicesReturned, LPDWORD lpResumeHandle )
29 { FIXME("%x type=%lx state=%lx %p %lx %p %p %p\n", hSCManager,
30 dwServiceType, dwServiceState, lpServices, cbBufSize,
31 pcbBytesNeeded, lpServicesReturned, lpResumeHandle);
32 SetLastError (ERROR_ACCESS_DENIED);
36 /******************************************************************************
37 * StartServiceCtrlDispatcher32A [ADVAPI32.196]
40 StartServiceCtrlDispatcherA( LPSERVICE_TABLE_ENTRYA servent )
41 { LPSERVICE_TABLE_ENTRYA ptr = servent;
43 while (ptr->lpServiceName)
44 { FIXME("%s at %p\n", ptr->lpServiceName, ptr);
50 /******************************************************************************
51 * StartServiceCtrlDispatcher32W [ADVAPI32.197]
57 StartServiceCtrlDispatcherW( LPSERVICE_TABLE_ENTRYW servent )
58 { LPSERVICE_TABLE_ENTRYW ptr = servent;
59 LPSERVICE_MAIN_FUNCTIONW fpMain;
61 while (ptr->lpServiceName)
62 { FIXME("%s at %p): STUB.\n", debugstr_w(ptr->lpServiceName),ptr);
63 fpMain = ptr->lpServiceProc;
64 fpMain(0,NULL); /* try to start the service */
70 /******************************************************************************
71 * RegisterServiceCtrlHandlerA [ADVAPI32.176]
73 SERVICE_STATUS_HANDLE WINAPI
74 RegisterServiceCtrlHandlerA( LPSTR lpServiceName,
75 LPHANDLER_FUNCTION lpfHandler )
76 { FIXME("%s %p\n", lpServiceName, lpfHandler);
80 /******************************************************************************
81 * RegisterServiceCtrlHandlerW [ADVAPI32.177]
87 SERVICE_STATUS_HANDLE WINAPI
88 RegisterServiceCtrlHandlerW( LPWSTR lpServiceName,
89 LPHANDLER_FUNCTION lpfHandler )
90 { FIXME("%s %p\n", debugstr_w(lpServiceName), lpfHandler);
94 /******************************************************************************
95 * SetServiceStatus [ADVAPI32.192]
102 SetServiceStatus( SERVICE_STATUS_HANDLE hService, LPSERVICE_STATUS lpStatus )
103 { FIXME("%lx %p\n",hService, lpStatus);
104 TRACE("\tType:%lx\n",lpStatus->dwServiceType);
105 TRACE("\tState:%lx\n",lpStatus->dwCurrentState);
106 TRACE("\tControlAccepted:%lx\n",lpStatus->dwControlsAccepted);
107 TRACE("\tExitCode:%lx\n",lpStatus->dwWin32ExitCode);
108 TRACE("\tServiceExitCode:%lx\n",lpStatus->dwServiceSpecificExitCode);
109 TRACE("\tCheckPoint:%lx\n",lpStatus->dwCheckPoint);
110 TRACE("\tWaitHint:%lx\n",lpStatus->dwWaitHint);
114 /******************************************************************************
115 * OpenSCManager32A [ADVAPI32.110]
118 OpenSCManagerA( LPCSTR lpMachineName, LPCSTR lpDatabaseName,
119 DWORD dwDesiredAccess )
121 LPWSTR lpMachineNameW = HEAP_strdupAtoW(GetProcessHeap(),0,lpMachineName);
122 LPWSTR lpDatabaseNameW = HEAP_strdupAtoW(GetProcessHeap(),0,lpDatabaseName);
123 DWORD ret = OpenSCManagerW(lpMachineNameW,lpDatabaseNameW,
125 HeapFree(GetProcessHeap(),0,lpDatabaseNameW);
126 HeapFree(GetProcessHeap(),0,lpMachineNameW);
130 /******************************************************************************
131 * OpenSCManager32W [ADVAPI32.111]
132 * Establishes a connection to the service control manager and opens database
135 * This should return a SC_HANDLE
138 * lpMachineName [I] Pointer to machine name string
139 * lpDatabaseName [I] Pointer to database name string
140 * dwDesiredAccess [I] Type of access
143 * Success: Handle to service control manager database
147 OpenSCManagerW( LPCWSTR lpMachineName, LPCWSTR lpDatabaseName,
148 DWORD dwDesiredAccess )
150 FIXME("(%s,%s,0x%08lx): stub\n", debugstr_w(lpMachineName),
151 debugstr_w(lpDatabaseName), dwDesiredAccess);
156 /******************************************************************************
157 * AllocateLocallyUniqueId [ADVAPI32.12]
163 AllocateLocallyUniqueId( PLUID lpluid )
165 lpluid->LowPart = time(NULL);
166 lpluid->HighPart = 0;
171 /******************************************************************************
172 * ControlService [ADVAPI32.23]
173 * Sends a control code to a Win32-based service.
181 * hService should be SC_HANDLE
186 ControlService( HANDLE hService, DWORD dwControl,
187 LPSERVICE_STATUS lpServiceStatus )
189 FIXME("(%d,%ld,%p): stub\n",hService,dwControl,lpServiceStatus);
194 /******************************************************************************
195 * CloseServiceHandle [ADVAPI32.22]
196 * Close handle to service or service control manager
199 * hSCObject [I] Handle to service or service control manager database
202 * hSCObject should be SC_HANDLE
207 CloseServiceHandle( HANDLE hSCObject )
209 FIXME("(%d): stub\n", hSCObject);
214 /******************************************************************************
215 * OpenService32A [ADVAPI32.112]
218 OpenServiceA( HANDLE hSCManager, LPCSTR lpServiceName,
219 DWORD dwDesiredAccess )
221 LPWSTR lpServiceNameW = HEAP_strdupAtoW(GetProcessHeap(),0,lpServiceName);
222 DWORD ret = OpenServiceW( hSCManager, lpServiceNameW, dwDesiredAccess);
223 HeapFree(GetProcessHeap(),0,lpServiceNameW);
228 /******************************************************************************
229 * OpenService32W [ADVAPI32.113]
230 * Opens a handle to an existing service
238 * The return value should be SC_HANDLE
239 * hSCManager should be SC_HANDLE
242 * Success: Handle to the service
246 OpenServiceW(HANDLE hSCManager, LPCWSTR lpServiceName,
247 DWORD dwDesiredAccess)
249 FIXME("(%d,%p,%ld): stub\n",hSCManager, lpServiceName,
255 /******************************************************************************
256 * CreateService32A [ADVAPI32.29]
259 CreateServiceA( DWORD hSCManager, LPCSTR lpServiceName,
260 LPCSTR lpDisplayName, DWORD dwDesiredAccess,
261 DWORD dwServiceType, DWORD dwStartType,
262 DWORD dwErrorControl, LPCSTR lpBinaryPathName,
263 LPCSTR lpLoadOrderGroup, LPDWORD lpdwTagId,
264 LPCSTR lpDependencies, LPCSTR lpServiceStartName,
267 FIXME("(%ld,%s,%s,...): stub\n",
268 hSCManager, debugstr_a(lpServiceName), debugstr_a(lpDisplayName));
273 /******************************************************************************
274 * DeleteService [ADVAPI32.31]
277 * hService [I] Handle to service
282 * hService should be SC_HANDLE
285 DeleteService( HANDLE hService )
287 FIXME("(%d): stub\n",hService);
292 /******************************************************************************
293 * StartService32A [ADVAPI32.195]
296 * How do we convert lpServiceArgVectors to use the 32W version?
299 StartServiceA( HANDLE hService, DWORD dwNumServiceArgs,
300 LPCSTR *lpServiceArgVectors )
302 FIXME("(%d,%ld,%p): stub\n",hService,dwNumServiceArgs,lpServiceArgVectors);
307 /******************************************************************************
308 * StartService32W [ADVAPI32.198]
312 * hService [I] Handle of service
313 * dwNumServiceArgs [I] Number of arguments
314 * lpServiceArgVectors [I] Address of array of argument string pointers
319 * hService should be SC_HANDLE
322 StartServiceW( HANDLE hService, DWORD dwNumServiceArgs,
323 LPCWSTR *lpServiceArgVectors )
325 FIXME("(%d,%ld,%p): stub\n",hService,dwNumServiceArgs,
326 lpServiceArgVectors);
330 /******************************************************************************
331 * QueryServiceStatus [ADVAPI32.123]
338 * hService should be SC_HANDLE
339 * lpservicestatus should be LPSERVICE_STATUS
342 QueryServiceStatus( HANDLE hService, LPVOID lpservicestatus )
344 FIXME("(%d,%p),stub!\n",hService,lpservicestatus);