2 * Win32 advapi functions
4 * Copyright 1995 Sven Verdoolaege
13 /***********************************************************************
14 * EnumServicesStatus32A [ADVAPI32.37]
16 BOOL32 WINAPI EnumServicesStatus32A( HANDLE32 hSCManager, DWORD dwServiceType,
17 DWORD dwServiceState, LPVOID lpServices,
18 DWORD cbBufSize, LPDWORD pcbBytesNeeded,
19 LPDWORD lpServicesReturned, LPDWORD lpResumeHandle)
20 { FIXME (advapi,"%x type=%lx state=%lx %p %lx %p %p %p\n", hSCManager,
21 dwServiceType, dwServiceState, lpServices, cbBufSize,
22 pcbBytesNeeded, lpServicesReturned, lpResumeHandle);
23 SetLastError (ERROR_ACCESS_DENIED);
26 /***********************************************************************
27 * StartServiceCtrlDispatcherA [ADVAPI32.196]
29 BOOL32 WINAPI StartServiceCtrlDispatcher32A(LPSERVICE_TABLE_ENTRY32A servent)
30 { LPSERVICE_TABLE_ENTRY32A ptr = servent;
32 while (ptr->lpServiceName)
33 { FIXME(advapi,"%s at %p\n", ptr->lpServiceName, ptr);
39 /***********************************************************************
40 * StartServiceCtrlDispatcherW [ADVAPI32.197]
42 BOOL32 WINAPI StartServiceCtrlDispatcher32W(LPSERVICE_TABLE_ENTRY32W servent)
43 { LPSERVICE_TABLE_ENTRY32W ptr = servent;
44 LPSERVICE_MAIN_FUNCTION32W fpMain;
46 while (ptr->lpServiceName)
47 { FIXME(advapi,"%s at %p): STUB.\n", debugstr_w(ptr->lpServiceName),ptr);
48 fpMain = ptr->lpServiceProc;
49 fpMain(0,NULL); /* try to start the service */
55 typedef DWORD SERVICE_STATUS_HANDLE;
56 typedef VOID (WINAPI *LPHANDLER_FUNCTION)( DWORD dwControl);
57 /***********************************************************************
58 * RegisterServiceCtrlHandlerA [ADVAPI32.176]
60 SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA (LPSTR lpServiceName, LPHANDLER_FUNCTION lpfHandler)
61 { FIXME(advapi,"%s %p\n", lpServiceName, lpfHandler);
64 /***********************************************************************
65 * RegisterServiceCtrlHandlerW [ADVAPI32.177]
67 SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW (LPWSTR lpServiceName, LPHANDLER_FUNCTION lpfHandler)
68 { FIXME(advapi,"%s %p\n", debugstr_w(lpServiceName), lpfHandler);
71 /***********************************************************************
72 * SetServiceStatus [ADVAPI32.192]
74 BOOL32 WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hService, LPSERVICE_STATUS lpStatus)
75 { FIXME(advapi,"%lx %p\n",hService, lpStatus);
76 TRACE(advapi,"\tType:%lx\n",lpStatus->dwServiceType);
77 TRACE(advapi,"\tState:%lx\n",lpStatus->dwCurrentState);
78 TRACE(advapi,"\tControlAccepted:%lx\n",lpStatus->dwControlsAccepted);
79 TRACE(advapi,"\tExitCode:%lx\n",lpStatus->dwWin32ExitCode);
80 TRACE(advapi,"\tServiceExitCode:%lx\n",lpStatus->dwServiceSpecificExitCode);
81 TRACE(advapi,"\tCheckPoint:%lx\n",lpStatus->dwCheckPoint);
82 TRACE(advapi,"\tWaitHint:%lx\n",lpStatus->dwWaitHint);
86 /******************************************************************************
87 * OpenSCManager32A [ADVAPI32.110]
89 HANDLE32 WINAPI OpenSCManager32A( LPCSTR lpMachineName, LPCSTR lpDatabaseName,
90 DWORD dwDesiredAccess )
92 LPWSTR lpMachineNameW = HEAP_strdupAtoW(GetProcessHeap(),0,lpMachineName);
93 LPWSTR lpDatabaseNameW = HEAP_strdupAtoW(GetProcessHeap(),0,lpDatabaseName);
94 DWORD ret = OpenSCManager32W(lpMachineNameW,lpDatabaseNameW,
96 HeapFree(GetProcessHeap(),0,lpDatabaseNameW);
97 HeapFree(GetProcessHeap(),0,lpMachineNameW);
102 /******************************************************************************
103 * OpenSCManager32W [ADVAPI32.111]
104 * Establishes a connection to the service control manager and opens database
107 * This should return a SC_HANDLE
110 * lpMachineName [I] Pointer to machine name string
111 * lpDatabaseName [I] Pointer to database name string
112 * dwDesiredAccess [I] Type of access
115 * Success: Handle to service control manager database
118 HANDLE32 WINAPI OpenSCManager32W( LPCWSTR lpMachineName, LPCWSTR lpDatabaseName,
119 DWORD dwDesiredAccess )
121 FIXME(advapi,"(%s,%s,0x%08lx): stub\n", debugstr_w(lpMachineName),
122 debugstr_w(lpDatabaseName), dwDesiredAccess);
127 BOOL32 WINAPI AllocateLocallyUniqueId(LPLUID lpluid) {
128 lpluid->LowPart = time(NULL);
129 lpluid->HighPart = 0;
134 /******************************************************************************
135 * ControlService [ADVAPI32.23]
136 * Sends a control code to a Win32-based service.
139 * hService should be SC_HANDLE
143 BOOL32 WINAPI ControlService( HANDLE32 hService, DWORD dwControl,
144 LPSERVICE_STATUS lpServiceStatus )
146 FIXME(advapi, "(%d,%ld,%p): stub\n",hService,dwControl,lpServiceStatus);
151 /******************************************************************************
152 * CloseServiceHandle [ADVAPI32.22]
153 * Close handle to service or service control manager
156 * hSCObject [I] Handle to service or service control manager database
159 * hSCObject should be SC_HANDLE
163 BOOL32 WINAPI CloseServiceHandle( HANDLE32 hSCObject )
165 FIXME(advapi, "(%d): stub\n", hSCObject);
170 /******************************************************************************
171 * OpenService32A [ADVAPI32.112]
173 HANDLE32 WINAPI OpenService32A( HANDLE32 hSCManager, LPCSTR lpServiceName,
174 DWORD dwDesiredAccess )
176 LPWSTR lpServiceNameW = HEAP_strdupAtoW(GetProcessHeap(),0,lpServiceName);
177 DWORD ret = OpenService32W( hSCManager, lpServiceNameW, dwDesiredAccess);
178 HeapFree(GetProcessHeap(),0,lpServiceNameW);
183 /******************************************************************************
184 * OpenService32W [ADVAPI32.113]
185 * Opens a handle to an existing service
188 * The return value should be SC_HANDLE
189 * hSCManager should be SC_HANDLE
192 * Success: Handle to the service
195 HANDLE32 WINAPI OpenService32W( HANDLE32 hSCManager, LPCWSTR lpServiceName,
196 DWORD dwDesiredAccess )
198 FIXME(advapi, "(%d,%p,%ld): stub\n",hSCManager, lpServiceName,
204 /******************************************************************************
205 * CreateService32A [ADVAPI32.28]
207 DWORD WINAPI CreateService32A( DWORD hSCManager, LPCSTR lpServiceName,
208 LPCSTR lpDisplayName, DWORD dwDesiredAccess,
209 DWORD dwServiceType, DWORD dwStartType,
210 DWORD dwErrorControl, LPCSTR lpBinaryPathName,
211 LPCSTR lpLoadOrderGroup, LPDWORD lpdwTagId,
212 LPCSTR lpDependencies, LPCSTR lpServiceStartName,
215 FIXME(advapi, "(%ld,%s,%s,...): stub\n",
216 hSCManager, debugstr_a(lpServiceName), debugstr_a(lpDisplayName));
221 /******************************************************************************
222 * DeleteService [ADVAPI32.31]
225 * hService [I] Handle to service
230 * hService should be SC_HANDLE
232 BOOL32 WINAPI DeleteService( HANDLE32 hService )
234 FIXME(advapi, "(%d): stub\n",hService);
239 /******************************************************************************
240 * StartService32A [ADVAPI32.195]
243 * How do we convert lpServiceArgVectors to use the 32W version?
245 BOOL32 WINAPI StartService32A( HANDLE32 hService, DWORD dwNumServiceArgs,
246 LPCSTR *lpServiceArgVectors )
248 FIXME(advapi, "(%d,%ld,%p): stub\n",hService,dwNumServiceArgs,lpServiceArgVectors);
253 /******************************************************************************
254 * StartService32W [ADVAPI32.198]
258 * hService [I] Handle of service
259 * dwNumServiceArgs [I] Number of arguments
260 * lpServiceArgVectors [I] Address of array of argument string pointers
265 * hService should be SC_HANDLE
267 BOOL32 WINAPI StartService32W( HANDLE32 hService, DWORD dwNumServiceArgs,
268 LPCWSTR *lpServiceArgVectors )
270 FIXME(advapi, "(%d,%ld,%p): stub\n",hService,dwNumServiceArgs,
271 lpServiceArgVectors);
275 /******************************************************************************
276 * QueryServiceStatus [ADVAPI32]
278 BOOL32 WINAPI QueryServiceStatus(/*SC_HANDLE*/HANDLE32 hService,/*LPSERVICE_STATUS*/LPVOID lpservicestatus) {
279 FIXME(advapi,"(%d,%p),stub!\n",hService,lpservicestatus);