//#include <windef.h>\r
//#include <winsvc.h>\r
\r
+#define BYTE unsigned char\r
#define DWORD unsigned long\r
#define BOOL unsigned long\r
#define SC_HANDLE unsigned int\r
#define SC_LOCK unsigned int\r
+#define SERVICE_STATUS_HANDLE unsigned long\r
+#define SC_STATUS_TYPE unsigned long\r
+#define SC_ENUM_TYPE unsigned long\r
+#define LPSTR char*\r
#define LPCSTR char*\r
+#define LPWSTR wchar_t*\r
#define LPCWSTR wchar_t*\r
+#define LPBYTE unsigned char*\r
#define LPDWORD unsigned long*\r
\r
[\r
[out] SC_LOCK *hLock);\r
\r
/* Function 4 */\r
-// DWORD ScmrQueryServiceObjectSecurity();\r
+ DWORD ScmrQueryServiceObjectSecurity([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [in] DWORD dwSecurityInformation,\r
+ [out, size_is(dwSecuityDescriptorSize)] unsigned char *lpSecurityDescriptor,\r
+ [in] DWORD dwSecuityDescriptorSize,\r
+ [out] LPDWORD pcbBytesNeeded);\r
\r
/* Function 5 */\r
-// DWORD ScmrSetServiceObjectSecurity();\r
+ DWORD ScmrSetServiceObjectSecurity([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [in] DWORD dwSecurityInformation,\r
+ [in, size_is(dwSecuityDescriptorSize)] unsigned char *lpSecurityDescriptor,\r
+ [in] DWORD dwSecuityDescriptorSize);\r
\r
/* Function 6 */\r
-// DWORD ScmrQueryServiceStatus();\r
+ DWORD ScmrQueryServiceStatus([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [out] LPSERVICE_STATUS lpServiceStatus);\r
\r
/* Function 7 */\r
-// DWORD ScmrSetServiceStatus();\r
+ DWORD ScmrSetServiceStatus([in] handle_t BindingHandle,\r
+ [in] SERVICE_STATUS_HANDLE hServiceStatus); /* FIXME */\r
\r
/* Function 8 */\r
DWORD ScmrUnlockServiceDatabase([in] handle_t BindingHandle,\r
DWORD ScmrNotifyBootConfigStatus([in] handle_t BindingHandle,\r
[in] BOOL BootAcceptable);\r
\r
+ /* Function 10 */\r
+ DWORD ScmrSetServiceBitsW([in] handle_t BindingHandle,\r
+ [in] SERVICE_STATUS_HANDLE hServiceStatus,\r
+ [in] DWORD dwServiceBits,\r
+ [in] BOOL bSetBitsOn,\r
+ [in] BOOL bUpdateImmediately,\r
+ [in, string, unique] LPWSTR lpString);\r
+\r
+ /* Function 11 */\r
+ DWORD ScmrChangeServiceConfigW([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [in] DWORD dwServiceType,\r
+ [in] DWORD dwStartType,\r
+ [in] DWORD dwErrorControl,\r
+ [in, string, unique] LPCWSTR lpBinaryPathName,\r
+ [in, string, unique] LPCWSTR lpLoadOrderGroup,\r
+ [in, out, unique] LPDWORD lpdwTagId,\r
+ [in, size_is(dwDependenciesLength), unique] LPCWSTR lpDependencies,\r
+ [in] DWORD dwDependenciesLength,\r
+ [in, string, unique] LPCWSTR lpServiceStartName,\r
+ [in, size_is(dwPasswordLength), unique] LPCWSTR lpPassword,\r
+ [in] DWORD dwPasswordLength,\r
+ [in, string, unique] LPCWSTR lpDisplayName);\r
\r
/* Function 12 */\r
DWORD ScmrCreateServiceW([in] handle_t BindingHandle,\r
[in] SC_HANDLE hSCManager,\r
[in, string, ref] LPCWSTR lpServiceName,\r
- [in, string, ref] LPCWSTR lpDisplayName,\r
+ [in, string, unique] LPCWSTR lpDisplayName,\r
[in] DWORD dwDesiredAccess,\r
[in] DWORD dwServiceType,\r
[in] DWORD dwStartType,\r
[in] DWORD dwErrorControl,\r
[in, string, ref] LPCWSTR lpBinaryPathName,\r
[in, string, unique] LPCWSTR lpLoadOrderGroup,\r
- [out] LPDWORD lpdwTagId,\r
- [in, string, unique] LPCWSTR lpDependencies,\r
+ [in, out, unique] LPDWORD lpdwTagId,\r
+ [in, size_is(dwDependenciesLength), unique] LPCWSTR lpDependencies,\r
+ [in] DWORD dwDependenciesLength,\r
[in, string, unique] LPCWSTR lpServiceStartName,\r
- [in, string, unique] LPCWSTR lpPassword);\r
+ [in, size_is(dwPasswordLength), unique] LPCWSTR lpPassword,\r
+ [in] DWORD dwPasswordLength,\r
+ [out] SC_HANDLE *hService);\r
+\r
+ /* Function 13 */\r
+ DWORD ScmrEnumDependentServicesW([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [in] DWORD dwServiceState,\r
+ [out, unique, size_is(cbBufSize)] LPBYTE lpServices,\r
+ [in] DWORD cbBufSize,\r
+ [out] LPDWORD pcbBytesNeeded,\r
+ [out] LPDWORD lpServicesReturned);\r
\r
+ /* Function 14 */\r
+ DWORD ScmrEnumServicesStatusW([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [in] DWORD dwServiceType,\r
+ [in] DWORD dwServiceState,\r
+ [out, unique, size_is(dwBufSize)] LPBYTE lpServices,\r
+ [in] DWORD dwBufSize,\r
+ [out] LPDWORD pcbBytesNeeded,\r
+ [out] LPDWORD lpServicesReturned,\r
+ [in, out, unique] LPDWORD lpResumeHandle);\r
\r
/* Function 15 */\r
DWORD ScmrOpenSCManagerW([in] handle_t BindingHandle,\r
[in] DWORD dwDesiredAccess,\r
[out] SC_HANDLE *hScm);\r
\r
+ /* Function 17 */\r
+ DWORD ScmrQueryServiceConfigW([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [out, unique, size_is(cbBufSize)] LPBYTE lpServiceConfig,\r
+ [in] DWORD cbBufSize,\r
+ [out] LPDWORD pcbBytesNeeded);\r
+\r
+ /* Function 18 */\r
+ DWORD ScmrQueryServiceLockStatusW([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [out, unique, size_is(cbBufSize)] LPBYTE lpLockStatus,\r
+ [in] DWORD cbBufSize,\r
+ [out] LPDWORD pcbBytesNeeded);\r
+\r
+ /* Function 19 */\r
+ DWORD ScmrStartServiceW([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [in] DWORD dwNumServiceArgs,\r
+ [in, size_is(cbBufSize)] LPBYTE lpServiceArgBuffer,\r
+ [in] DWORD cbBufSize);\r
+\r
+ /* FIXME: This is the correct interface but WIDL doesn't support it yet! */\r
+// DWORD ScmrStartServiceW([in] handle_t BindingHandle,\r
+// [in] SC_HANDLE hService,\r
+// [in] DWORD dwNumServiceArgs,\r
+// [in, string, size_is(dwNumServiceArgs, ), unique] LPWSTR *lpServiceArgVectors);\r
+\r
+ /* Function 20 */\r
+ DWORD ScmrGetServiceDisplayNameW([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [in, string, ref] LPCWSTR lpServiceName,\r
+ [out, size_is(*lpcchBuffer), unique] LPWSTR lpDisplayName,\r
+ [in, out, ref] LPDWORD lpcchBuffer);\r
+\r
+ /* Function 21 */\r
+ DWORD ScmrGetServiceKeyNameW([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [in, string, ref] LPCWSTR lpDisplayName,\r
+ [out, size_is(*lpcchBuffer), unique] LPWSTR lpServiceName,\r
+ [in, out, ref] LPDWORD lpcchBuffer);\r
+\r
+ /* Function 22 */\r
+ DWORD ScmrSetServiceBitsA([in] handle_t BindingHandle,\r
+ [in] SERVICE_STATUS_HANDLE hServiceStatus,\r
+ [in] DWORD dwServiceBits,\r
+ [in] BOOL bSetBitsOn,\r
+ [in] BOOL bUpdateImmediately,\r
+ [in, string, unique] LPSTR lpString);\r
+\r
+ /* Function 23 */\r
+ DWORD ScmrChangeServiceConfigA([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [in] DWORD dwServiceType,\r
+ [in] DWORD dwStartType,\r
+ [in] DWORD dwErrorControl,\r
+ [in, string, unique] LPCSTR lpBinaryPathName,\r
+ [in, string, unique] LPCSTR lpLoadOrderGroup,\r
+ [in, out, unique] LPDWORD lpdwTagId,\r
+ [in, size_is(dwDependenciesLength), unique] LPCSTR lpDependencies,\r
+ [in] DWORD dwDependenciesLength,\r
+ [in, string, unique] LPCSTR lpServiceStartName,\r
+ [in, size_is(dwPasswordLength), unique] LPCSTR lpPassword,\r
+ [in] DWORD dwPasswordLength,\r
+ [in, string, unique] LPCSTR lpDisplayName);\r
+\r
+ /* Function 24 */\r
+ DWORD ScmrCreateServiceA([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [in, string, ref] LPCSTR lpServiceName,\r
+ [in, string, unique] LPCSTR lpDisplayName,\r
+ [in] DWORD dwDesiredAccess,\r
+ [in] DWORD dwServiceType,\r
+ [in] DWORD dwStartType,\r
+ [in] DWORD dwErrorControl,\r
+ [in, string, ref] LPCSTR lpBinaryPathName,\r
+ [in, string, unique] LPCSTR lpLoadOrderGroup,\r
+ [in, out, unique] LPDWORD lpdwTagId,\r
+ [in, size_is(dwDependenciesLength), unique] LPCSTR lpDependencies,\r
+ [in] DWORD dwDependenciesLength,\r
+ [in, string, unique] LPCSTR lpServiceStartName,\r
+ [in, size_is(dwPasswordLength), unique] LPCSTR lpPassword,\r
+ [in] DWORD dwPasswordLength,\r
+ [out] SC_HANDLE *hService);\r
+\r
+ /* Function 25 */\r
+ DWORD ScmrEnumDependentServicesA([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [in] DWORD dwServiceState,\r
+ [out, unique, size_is(cbBufSize)] LPBYTE lpServices,\r
+ [in] DWORD cbBufSize,\r
+ [out] LPDWORD pcbBytesNeeded,\r
+ [out] LPDWORD lpServicesReturned);\r
+\r
+ /* Function 26 */\r
+ DWORD ScmrEnumServicesStatusA([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [in] DWORD dwServiceType,\r
+ [in] DWORD dwServiceState,\r
+ [out, unique, size_is(dwBufSize)] LPBYTE lpServices,\r
+ [in] DWORD dwBufSize,\r
+ [out] LPDWORD pcbBytesNeeded,\r
+ [out] LPDWORD lpServicesReturned,\r
+ [in, out, unique] LPDWORD lpResumeHandle);\r
\r
/* Function 27 */\r
DWORD ScmrOpenSCManagerA([in] handle_t BindingHandle,\r
[in, string] LPCSTR lpServiceName,\r
[in] DWORD dwDesiredAccess,\r
[out] SC_HANDLE *hScm);\r
+\r
+ /* Function 29 */\r
+ DWORD ScmrQueryServiceConfigA([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [out, unique, size_is(cbBufSize)] LPBYTE lpServiceConfig,\r
+ [in] DWORD cbBufSize,\r
+ [out] LPDWORD pcbBytesNeeded);\r
+\r
+ /* Function 30 */\r
+ DWORD ScmrQueryServiceLockStatusA([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [out, unique, size_is(cbBufSize)] LPBYTE lpLockStatus,\r
+ [in] DWORD cbBufSize,\r
+ [out] LPDWORD pcbBytesNeeded);\r
+\r
+ /* Function 31 */\r
+ DWORD ScmrStartServiceA([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [in] DWORD dwNumServiceArgs,\r
+ [in, size_is(cbBufSize)] LPBYTE lpServiceArgBuffer,\r
+ [in] DWORD cbBufSize);\r
+\r
+ /* FIXME: This is the correct interface but WIDL doesn't support it yet! */\r
+// DWORD ScmrStartServiceA([in] handle_t BindingHandle,\r
+// [in] SC_HANDLE hService,\r
+// [in] DWORD dwNumServiceArgs,\r
+// [in, unique, string, size_is(dwNumServiceArgs, )] LPSTR *lpServiceArgVectors);\r
+\r
+ /* Function 32 */\r
+ DWORD ScmrGetServiceDisplayNameA([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [in, string, ref] LPCSTR lpServiceName,\r
+ [out, unique, size_is(*lpcchBuffer)] LPSTR lpDisplayName,\r
+ [in, out, ref] LPDWORD lpcchBuffer);\r
+\r
+ /* Function 33 */\r
+ DWORD ScmrGetServiceKeyNameA([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hSCManager,\r
+ [in, string, ref] LPCSTR lpDisplayName,\r
+ [out, unique, size_is(*lpcchBuffer)] LPSTR lpServiceName,\r
+ [in, out, ref] LPDWORD lpcchBuffer);\r
+\r
+ /* Function 34 */\r
+ /* ScmrGetCurrentGroupStateW */\r
+\r
+ /* Function 35 */\r
+ /* ScmrEnumServiceGroupW */\r
+\r
+ /* Function 36 */\r
+// DWORD ScmrChangeServiceConfig2A([in] handle_t BindingHandle,\r
+// [in] SC_HANDLE hService,\r
+// [in] DWORD dwInfoLevel,\r
+// [in, size_is(dwInfoSize)] LPBYTE lpInfo,\r
+// [in] DWORD dwInfoSize);\r
+\r
+ /* Function 37 */\r
+ DWORD ScmrChangeServiceConfig2W([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [in] DWORD dwInfoLevel,\r
+ [in, size_is(dwInfoSize)] LPBYTE lpInfo,\r
+ [in] DWORD dwInfoSize);\r
+\r
+ /* Function 38 */\r
+ /* ScmrQueryServiceConfig2A */\r
+\r
+ /* Function 39 */\r
+ /* ScmrQueryServiceConfig2W */\r
+\r
+ /* Function 40 */\r
+ DWORD ScmrQueryServiceStatusEx([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [in] SC_STATUS_TYPE InfoLevel,\r
+ [out, unique, size_is(cbBufSize)] LPBYTE lpBuffer,\r
+ [in] DWORD cbBufSize,\r
+ [out] LPDWORD pcbBytesNeeded);\r
+\r
+ /* Function 41 */\r
+// DWORD ScmrEnumServicesStatusExA([in] handle_t BindingHandle,\r
+// [in] SC_HANDLE hService,\r
+// [in] SC_ENUM_TYPE InfoLevel,\r
+// [in] DWORD dwServiceType,\r
+// [in] DWORD dwServiceState,\r
+// [out, unique, size_is(cbBufSize)] LPBYTE lpServices,\r
+// [in] DWORD cbBufSize,\r
+// [out] LPDWORD pcbBytesNeeded,\r
+// [out] LPDWORD lpServicesReturned,\r
+// [in, out, unique] LPDWORD lpResumeHandle,\r
+// [in, string] LPCSTR pszGroupName);\r
+\r
+ /* Function 42 */\r
+ DWORD ScmrEnumServicesStatusExW([in] handle_t BindingHandle,\r
+ [in] SC_HANDLE hService,\r
+ [in] SC_ENUM_TYPE InfoLevel,\r
+ [in] DWORD dwServiceType,\r
+ [in] DWORD dwServiceState,\r
+ [out, unique, size_is(cbBufSize)] LPBYTE lpServices,\r
+ [in] DWORD cbBufSize,\r
+ [out] LPDWORD pcbBytesNeeded,\r
+ [out] LPDWORD lpServicesReturned,\r
+ [in, out, unique] LPDWORD lpResumeHandle,\r
+ [in, string] LPCWSTR pszGroupName);\r
+\r
+ /* Function 43 */\r
+ /* ScmrSendTSMessage */\r
}\r