2 * Win32 advapi functions
4 * Copyright 1995 Sven Verdoolaege
14 /* FIXME: Where do these belong? */
15 typedef DWORD SERVICE_STATUS_HANDLE;
16 typedef VOID (WINAPI *LPHANDLER_FUNCTION)( DWORD dwControl);
19 /******************************************************************************
20 * EnumServicesStatus32A [ADVAPI32.38]
23 EnumServicesStatus32A( HANDLE32 hSCManager, DWORD dwServiceType,
24 DWORD dwServiceState, LPVOID lpServices,
25 DWORD cbBufSize, LPDWORD pcbBytesNeeded,
26 LPDWORD lpServicesReturned, LPDWORD lpResumeHandle )
27 { FIXME (advapi,"%x type=%lx state=%lx %p %lx %p %p %p\n", hSCManager,
28 dwServiceType, dwServiceState, lpServices, cbBufSize,
29 pcbBytesNeeded, lpServicesReturned, lpResumeHandle);
30 SetLastError (ERROR_ACCESS_DENIED);
34 /******************************************************************************
35 * StartServiceCtrlDispatcher32A [ADVAPI32.196]
38 StartServiceCtrlDispatcher32A( LPSERVICE_TABLE_ENTRY32A servent )
39 { LPSERVICE_TABLE_ENTRY32A ptr = servent;
41 while (ptr->lpServiceName)
42 { FIXME(advapi,"%s at %p\n", ptr->lpServiceName, ptr);
48 /******************************************************************************
49 * StartServiceCtrlDispatcher32W [ADVAPI32.197]
55 StartServiceCtrlDispatcher32W( LPSERVICE_TABLE_ENTRY32W servent )
56 { LPSERVICE_TABLE_ENTRY32W ptr = servent;
57 LPSERVICE_MAIN_FUNCTION32W fpMain;
59 while (ptr->lpServiceName)
60 { FIXME(advapi,"%s at %p): STUB.\n", debugstr_w(ptr->lpServiceName),ptr);
61 fpMain = ptr->lpServiceProc;
62 fpMain(0,NULL); /* try to start the service */
68 /******************************************************************************
69 * RegisterServiceCtrlHandlerA [ADVAPI32.176]
71 SERVICE_STATUS_HANDLE WINAPI
72 RegisterServiceCtrlHandlerA( LPSTR lpServiceName,
73 LPHANDLER_FUNCTION lpfHandler )
74 { FIXME(advapi,"%s %p\n", lpServiceName, lpfHandler);
78 /******************************************************************************
79 * RegisterServiceCtrlHandlerW [ADVAPI32.177]
85 SERVICE_STATUS_HANDLE WINAPI
86 RegisterServiceCtrlHandlerW( LPWSTR lpServiceName,
87 LPHANDLER_FUNCTION lpfHandler )
88 { FIXME(advapi,"%s %p\n", debugstr_w(lpServiceName), lpfHandler);
92 /******************************************************************************
93 * SetServiceStatus [ADVAPI32.192]
100 SetServiceStatus( SERVICE_STATUS_HANDLE hService, LPSERVICE_STATUS lpStatus )
101 { FIXME(advapi,"%lx %p\n",hService, lpStatus);
102 TRACE(advapi,"\tType:%lx\n",lpStatus->dwServiceType);
103 TRACE(advapi,"\tState:%lx\n",lpStatus->dwCurrentState);
104 TRACE(advapi,"\tControlAccepted:%lx\n",lpStatus->dwControlsAccepted);
105 TRACE(advapi,"\tExitCode:%lx\n",lpStatus->dwWin32ExitCode);
106 TRACE(advapi,"\tServiceExitCode:%lx\n",lpStatus->dwServiceSpecificExitCode);
107 TRACE(advapi,"\tCheckPoint:%lx\n",lpStatus->dwCheckPoint);
108 TRACE(advapi,"\tWaitHint:%lx\n",lpStatus->dwWaitHint);
112 /******************************************************************************
113 * OpenSCManager32A [ADVAPI32.110]
116 OpenSCManager32A( LPCSTR lpMachineName, LPCSTR lpDatabaseName,
117 DWORD dwDesiredAccess )
119 LPWSTR lpMachineNameW = HEAP_strdupAtoW(GetProcessHeap(),0,lpMachineName);
120 LPWSTR lpDatabaseNameW = HEAP_strdupAtoW(GetProcessHeap(),0,lpDatabaseName);
121 DWORD ret = OpenSCManager32W(lpMachineNameW,lpDatabaseNameW,
123 HeapFree(GetProcessHeap(),0,lpDatabaseNameW);
124 HeapFree(GetProcessHeap(),0,lpMachineNameW);
128 /******************************************************************************
129 * OpenSCManager32W [ADVAPI32.111]
130 * Establishes a connection to the service control manager and opens database
133 * This should return a SC_HANDLE
136 * lpMachineName [I] Pointer to machine name string
137 * lpDatabaseName [I] Pointer to database name string
138 * dwDesiredAccess [I] Type of access
141 * Success: Handle to service control manager database
145 OpenSCManager32W( LPCWSTR lpMachineName, LPCWSTR lpDatabaseName,
146 DWORD dwDesiredAccess )
148 FIXME(advapi,"(%s,%s,0x%08lx): stub\n", debugstr_w(lpMachineName),
149 debugstr_w(lpDatabaseName), dwDesiredAccess);
154 /******************************************************************************
155 * AllocateLocallyUniqueId [ADVAPI32.12]
161 AllocateLocallyUniqueId( PLUID lpluid )
163 lpluid->LowPart = time(NULL);
164 lpluid->HighPart = 0;
169 /******************************************************************************
170 * ControlService [ADVAPI32.23]
171 * Sends a control code to a Win32-based service.
179 * hService should be SC_HANDLE
184 ControlService( HANDLE32 hService, DWORD dwControl,
185 LPSERVICE_STATUS lpServiceStatus )
187 FIXME(advapi, "(%d,%ld,%p): stub\n",hService,dwControl,lpServiceStatus);
192 /******************************************************************************
193 * CloseServiceHandle [ADVAPI32.22]
194 * Close handle to service or service control manager
197 * hSCObject [I] Handle to service or service control manager database
200 * hSCObject should be SC_HANDLE
205 CloseServiceHandle( HANDLE32 hSCObject )
207 FIXME(advapi, "(%d): stub\n", hSCObject);
212 /******************************************************************************
213 * OpenService32A [ADVAPI32.112]
216 OpenService32A( HANDLE32 hSCManager, LPCSTR lpServiceName,
217 DWORD dwDesiredAccess )
219 LPWSTR lpServiceNameW = HEAP_strdupAtoW(GetProcessHeap(),0,lpServiceName);
220 DWORD ret = OpenService32W( hSCManager, lpServiceNameW, dwDesiredAccess);
221 HeapFree(GetProcessHeap(),0,lpServiceNameW);
226 /******************************************************************************
227 * OpenService32W [ADVAPI32.113]
228 * Opens a handle to an existing service
236 * The return value should be SC_HANDLE
237 * hSCManager should be SC_HANDLE
240 * Success: Handle to the service
244 OpenService32W(HANDLE32 hSCManager, LPCWSTR lpServiceName,
245 DWORD dwDesiredAccess)
247 FIXME(advapi, "(%d,%p,%ld): stub\n",hSCManager, lpServiceName,
253 /******************************************************************************
254 * CreateService32A [ADVAPI32.29]
257 CreateService32A( DWORD hSCManager, LPCSTR lpServiceName,
258 LPCSTR lpDisplayName, DWORD dwDesiredAccess,
259 DWORD dwServiceType, DWORD dwStartType,
260 DWORD dwErrorControl, LPCSTR lpBinaryPathName,
261 LPCSTR lpLoadOrderGroup, LPDWORD lpdwTagId,
262 LPCSTR lpDependencies, LPCSTR lpServiceStartName,
265 FIXME(advapi, "(%ld,%s,%s,...): stub\n",
266 hSCManager, debugstr_a(lpServiceName), debugstr_a(lpDisplayName));
271 /******************************************************************************
272 * DeleteService [ADVAPI32.31]
275 * hService [I] Handle to service
280 * hService should be SC_HANDLE
283 DeleteService( HANDLE32 hService )
285 FIXME(advapi, "(%d): stub\n",hService);
290 /******************************************************************************
291 * StartService32A [ADVAPI32.195]
294 * How do we convert lpServiceArgVectors to use the 32W version?
297 StartService32A( HANDLE32 hService, DWORD dwNumServiceArgs,
298 LPCSTR *lpServiceArgVectors )
300 FIXME(advapi, "(%d,%ld,%p): stub\n",hService,dwNumServiceArgs,lpServiceArgVectors);
305 /******************************************************************************
306 * StartService32W [ADVAPI32.198]
310 * hService [I] Handle of service
311 * dwNumServiceArgs [I] Number of arguments
312 * lpServiceArgVectors [I] Address of array of argument string pointers
317 * hService should be SC_HANDLE
320 StartService32W( HANDLE32 hService, DWORD dwNumServiceArgs,
321 LPCWSTR *lpServiceArgVectors )
323 FIXME(advapi, "(%d,%ld,%p): stub\n",hService,dwNumServiceArgs,
324 lpServiceArgVectors);
328 /******************************************************************************
329 * QueryServiceStatus [ADVAPI32.123]
336 * hService should be SC_HANDLE
337 * lpservicestatus should be LPSERVICE_STATUS
340 QueryServiceStatus( HANDLE32 hService, LPVOID lpservicestatus )
342 FIXME(advapi,"(%d,%p),stub!\n",hService,lpservicestatus);