[SDK] One step further towards ReactOS source code tree restructure: the sdk folder...
[reactos.git] / reactos / include / reactos / idl / svcctl.idl
diff --git a/reactos/include/reactos/idl/svcctl.idl b/reactos/include/reactos/idl/svcctl.idl
deleted file mode 100644 (file)
index 76904c5..0000000
+++ /dev/null
@@ -1,760 +0,0 @@
-/*
- * Service Control Manager (SCM) interface definition
- */
-
-#include <ms-dtyp.idl>
-
-const unsigned int MAX_SERVICE_NAME_LENGTH = 256;
-const unsigned short SC_MAX_DEPEND_SIZE = 4 * 1024;
-const unsigned short SC_MAX_NAME_LENGTH = MAX_SERVICE_NAME_LENGTH + 1;
-const unsigned short SC_MAX_PATH_LENGTH = 32 * 1024;
-const unsigned short SC_MAX_PWD_SIZE = 514;
-const unsigned short SC_MAX_COMPUTER_NAME_LENGTH = 1024;
-const unsigned short SC_MAX_ACCOUNT_NAME_LENGTH = 2 * 1024;
-const unsigned short SC_MAX_COMMENT_LENGTH = 128;
-const unsigned short SC_MAX_ARGUMENT_LENGTH = 1024;
-const unsigned short SC_MAX_ARGUMENTS = 1024;
-
-typedef [handle] LPSTR SVCCTL_HANDLEA;
-typedef [handle] LPWSTR SVCCTL_HANDLEW;
-typedef [handle] ULONG_PTR RPC_SERVICE_STATUS_HANDLE;
-typedef [context_handle] PVOID SC_RPC_HANDLE;
-typedef SC_RPC_HANDLE* LPSC_RPC_HANDLE;
-typedef [context_handle] PVOID SC_RPC_LOCK;
-typedef SC_RPC_LOCK* LPSC_RPC_LOCK;
-typedef [context_handle] PVOID SC_NOTIFY_RPC_HANDLE;
-typedef SC_NOTIFY_RPC_HANDLE* LPSC_NOTIFY_RPC_HANDLE;
-typedef [range(0, 1024 * 4)] DWORD BOUNDED_DWORD_4K;
-typedef BOUNDED_DWORD_4K* LPBOUNDED_DWORD_4K;
-typedef [range(0, 1024 * 8)] DWORD BOUNDED_DWORD_8K;
-typedef BOUNDED_DWORD_8K* LPBOUNDED_DWORD_8K;
-typedef [range(0, 1024 * 256)] DWORD BOUNDED_DWORD_256K;
-typedef BOUNDED_DWORD_256K* LPBOUNDED_DWORD_256K;
-
-cpp_quote("#if 0")
-
-typedef struct _SERVICE_STATUS {
-    DWORD dwServiceType;
-    DWORD dwCurrentState;
-    DWORD dwControlsAccepted;
-    DWORD dwWin32ExitCode;
-    DWORD dwServiceSpecificExitCode;
-    DWORD dwCheckPoint;
-    DWORD dwWaitHint;
-} SERVICE_STATUS, *LPSERVICE_STATUS;
-
-typedef struct _SERVICE_STATUS_PROCESS {
-    DWORD dwServiceType;
-    DWORD dwCurrentState;
-    DWORD dwControlsAccepted;
-    DWORD dwWin32ExitCode;
-    DWORD dwServiceSpecificExitCode;
-    DWORD dwCheckPoint;
-    DWORD dwWaitHint;
-    DWORD dwProcessId;
-    DWORD dwServiceFlags;
-} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
-
-typedef struct _ENUM_SERVICE_STATUSA {
-    [string] LPSTR lpServiceName;
-    [string] LPSTR lpDisplayName;
-    SERVICE_STATUS ServiceStatus;
-} ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA;
-
-typedef struct _ENUM_SERVICE_STATUSW {
-    [string] LPWSTR lpServiceName;
-    [string] LPWSTR lpDisplayName;
-    SERVICE_STATUS ServiceStatus;
-} ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
-
-typedef struct _ENUM_SERVICE_STATUS_PROCESSA {
-    [string] LPSTR lpServiceName;
-    [string] LPSTR lpDisplayName;
-    SERVICE_STATUS_PROCESS ServiceStatusProcess;
-} ENUM_SERVICE_STATUS_PROCESSA, *LPENUM_SERVICE_STATUS_PROCESSA;
-
-typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
-    [string] LPWSTR lpServiceName;
-    [string] LPWSTR lpDisplayName;
-    SERVICE_STATUS_PROCESS ServiceStatusProcess;
-} ENUM_SERVICE_STATUS_PROCESSW, *LPENUM_SERVICE_STATUS_PROCESSW;
-
-typedef struct _QUERY_SERVICE_CONFIGA {
-    DWORD dwServiceType;
-    DWORD dwStartType;
-    DWORD dwErrorControl;
-    [string] LPSTR lpBinaryPathName;
-    [string] LPSTR lpLoadOrderGroup;
-    DWORD dwTagId;
-    [string] LPSTR lpDependencies;
-    [string] LPSTR lpServiceStartName;
-    LPSTR lpDisplayName;
-} QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA;
-
-typedef struct _QUERY_SERVICE_CONFIGW {
-    DWORD dwServiceType;
-    DWORD dwStartType;
-    DWORD dwErrorControl;
-    [string] LPWSTR lpBinaryPathName;
-    [string] LPWSTR lpLoadOrderGroup;
-    DWORD dwTagId;
-    [string] LPWSTR lpDependencies;
-    [string] LPWSTR lpServiceStartName;
-    LPWSTR lpDisplayName;
-} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
-
-typedef struct _QUERY_SERVICE_LOCK_STATUSA {
-    DWORD fIsLocked;
-    [string] LPSTR lpLockOwner;
-    DWORD dwLockDuration;
-} QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA;
-
-typedef struct _QUERY_SERVICE_LOCK_STATUSW {
-    DWORD fIsLocked;
-    [string] LPWSTR lpLockOwner;
-    DWORD dwLockDuration;
-} QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW;
-
-typedef [v1_enum] enum _SC_ACTION_TYPE {
-    SC_ACTION_NONE = 0,
-    SC_ACTION_RESTART = 1,
-    SC_ACTION_REBOOT = 2,
-    SC_ACTION_RUN_COMMAND = 3,
-} SC_ACTION_TYPE;
-
-typedef struct _SC_ACTION {
-    SC_ACTION_TYPE Type;
-    DWORD Delay;
-} SC_ACTION, *LPSC_ACTION;
-
-typedef [v1_enum] enum _SC_ENUM_TYPE {
-    SC_ENUM_PROCESS_INFO = 0,
-} SC_ENUM_TYPE;
-
-typedef struct _SERVICE_DESCRIPTIONA {
-    [string] LPSTR lpDescription;
-} SERVICE_DESCRIPTIONA, *LPSERVICE_DESCRIPTIONA;
-
-typedef struct _SERVICE_DESCRIPTIONW {
-    [string] LPWSTR lpDescription;
-} SERVICE_DESCRIPTIONW, *LPSERVICE_DESCRIPTIONW;
-
-typedef struct _SERVICE_FAILURE_ACTIONSA {
-    DWORD dwResetPeriod;
-    [string] LPSTR lpRebootMsg;
-    [string] LPSTR lpCommand;
-    [range(0, 1024)] DWORD cActions;
-    [size_is(cActions)] SC_ACTION* lpsaActions;
-} SERVICE_FAILURE_ACTIONSA, *LPSERVICE_FAILURE_ACTIONSA;
-
-typedef struct _SERVICE_FAILURE_ACTIONSW {
-    DWORD dwResetPeriod;
-    [string] LPWSTR lpRebootMsg;
-    [string] LPWSTR lpCommand;
-    [range(0, 1024)] DWORD cActions;
-    [size_is(cActions)] SC_ACTION* lpsaActions;
-} SERVICE_FAILURE_ACTIONSW, *LPSERVICE_FAILURE_ACTIONSW;
-
-cpp_quote("#endif")
-
-typedef struct _SERVICE_DELAYED_AUTO_START_INFO {
-    BOOL fDelayedAutoStart;
-} SERVICE_DELAYED_AUTO_START_INFO, *LPSERVICE_DELAYED_AUTO_START_INFO;
-
-typedef struct _SERVICE_FAILURE_ACTIONS_FLAG {
-    BOOL fFailureActionsOnNonCrashFailures;
-} SERVICE_FAILURE_ACTIONS_FLAG, *LPSERVICE_FAILURE_ACTIONS_FLAG;
-
-typedef struct _SERVICE_SID_INFO {
-    DWORD dwServicesSidType;
-} SERVICE_SID_INFO, *LPSERVICE_SID_INFO;
-
-typedef struct _SERVICE_RPC_REQUIRED_PRIVILEGES_INFO {
-    [range(0, 1024 * 4)] DWORD cbRequiredPrivileges;
-    [size_is(cbRequiredPrivileges)] PBYTE pRequiredPrivileges;
-} SERVICE_RPC_REQUIRED_PRIVILEGES_INFO, *LPSERVICE_RPC_REQUIRED_PRIVILEGES_INFO;
-
-cpp_quote("#ifndef _SERVICE_PRESHUTDOWN_INFO_DEFINED_")
-cpp_quote("#define _SERVICE_PRESHUTDOWN_INFO_DEFINED_")
-typedef struct _SERVICE_PRESHUTDOWN_INFO {
-    DWORD dwPreshutdownTimeout;
-} SERVICE_PRESHUTDOWN_INFO, *LPSERVICE_PRESHUTDOWN_INFO;
-cpp_quote("#endif")
-
-typedef struct _SC_RPC_CONFIG_INFOA {
-    DWORD dwInfoLevel;
-    [switch_is(dwInfoLevel)] union {
-        [case(1)] LPSERVICE_DESCRIPTIONA psd;
-        [case(2)] LPSERVICE_FAILURE_ACTIONSA psfa;
-        [case(3)] LPSERVICE_DELAYED_AUTO_START_INFO psda;
-        [case(4)] LPSERVICE_FAILURE_ACTIONS_FLAG psfaf;
-        [case(5)] LPSERVICE_SID_INFO pssid;
-        [case(6)] LPSERVICE_RPC_REQUIRED_PRIVILEGES_INFO psrp;
-        [case(7)] LPSERVICE_PRESHUTDOWN_INFO psps;
-    } DUMMYUNIONNAME;
-} SC_RPC_CONFIG_INFOA, *LPSC_RPC_CONFIG_INFOA;
-
-typedef struct _SC_RPC_CONFIG_INFOW {
-    DWORD dwInfoLevel;
-    [switch_is(dwInfoLevel)] union {
-        [case(1)] LPSERVICE_DESCRIPTIONW psd;
-        [case(2)] LPSERVICE_FAILURE_ACTIONSW psfa;
-        [case(3)] LPSERVICE_DELAYED_AUTO_START_INFO psda;
-        [case(4)] LPSERVICE_FAILURE_ACTIONS_FLAG psfaf;
-        [case(5)] LPSERVICE_SID_INFO pssid;
-        [case(6)] LPSERVICE_RPC_REQUIRED_PRIVILEGES_INFO psrp;
-        [case(7)] LPSERVICE_PRESHUTDOWN_INFO psps;
-    } DUMMYUNIONNAME;
-} SC_RPC_CONFIG_INFOW, *LPSC_RPC_CONFIG_INFOW;
-
-typedef struct _SERVICE_NOTIFY_STATUS_CHANGE_PARAMS_1 {
-    ULONGLONG ullThreadId;
-    DWORD dwNotifyMask;
-    UCHAR CallbackAddressArray[16];
-    UCHAR CallbackParamAddressArray[16];
-    SERVICE_STATUS_PROCESS ServiceStatus;
-    DWORD dwNotificationStatus;
-    DWORD dwSequence;
-} SERVICE_NOTIFY_STATUS_CHANGE_PARAMS_1, *PSERVICE_NOTIFY_STATUS_CHANGE_PARAMS_1;
-
-typedef struct _SERVICE_NOTIFY_STATUS_CHANGE_PARAMS_2 {
-    ULONGLONG ullThreadId;
-    DWORD dwNotifyMask;
-    UCHAR CallbackAddressArray[16];
-    UCHAR CallbackParamAddressArray[16];
-    SERVICE_STATUS_PROCESS ServiceStatus;
-    DWORD dwNotificationStatus;
-    DWORD dwSequence;
-    DWORD dwNotificationTriggered;
-    [string] PWSTR pszServiceNames;
-} SERVICE_NOTIFY_STATUS_CHANGE_PARAMS_2, *PSERVICE_NOTIFY_STATUS_CHANGE_PARAMS_2;
-
-typedef struct _SC_RPC_NOTIFY_PARAMS {
-    DWORD dwInfoLevel;
-    [switch_is(dwInfoLevel)] union {
-        [case(1)] PSERVICE_NOTIFY_STATUS_CHANGE_PARAMS_1 pStatusChangeParam1;
-        [case(2)] PSERVICE_NOTIFY_STATUS_CHANGE_PARAMS_2 pStatusChangeParam2;
-    };
-} SC_RPC_NOTIFY_PARAMS, *LPSC_RPC_NOTIFY_PARAMS;
-
-typedef struct _SC_RPC_NOTIFY_PARAMS_LIST {
-    BOUNDED_DWORD_4K cElements;
-    [size_is(cElements)] SC_RPC_NOTIFY_PARAMS NotifyParamsArray[];
-} SC_RPC_NOTIFY_PARAMS_LIST, *PSC_RPC_NOTIFY_PARAMS_LIST;
-
-cpp_quote("#if 0")
-
-#if 0
-typedef
-[switch_type(DWORD)] union _SC_RPC_SERVICE_CONTROL_IN_PARAMSA {
-    [case(1)] PSERVICE_CONTROL_STATUS_REASON_IN_PARAMSA psrInParams;
-} SC_RPC_SERVICE_CONTROL_IN_PARAMSA, *LPSC_RPC_SERVICE_CONTROL_IN_PARAMSA;
-
-typedef
-[switch_type(DWORD)] union _SC_RPC_SERVICE_CONTROL_IN_PARAMSW {
-    [case(1)] PSERVICE_CONTROL_STATUS_REASON_IN_PARAMSW psrInParams;
-} SC_RPC_SERVICE_CONTROL_IN_PARAMSW, *LPSC_RPC_SERVICE_CONTROL_IN_PARAMSW;
-
-typedef
-[switch_type(DWORD)] union _SC_RPC_SERVICE_CONTROL_OUT_PARAMSA {
-    [case(1)] PSERVICE_CONTROL_STATUS_REASON_OUT_PARAMS psrOutParams;
-} SC_RPC_SERVICE_CONTROL_OUT_PARAMSA, *LPSC_RPC_SERVICE_CONTROL_OUT_PARAMSA;
-
-typedef
-[switch_type(DWORD)] union _SC_RPC_SERVICE_CONTROL_OUT_PARAMSW {
-    [case(1)] PSERVICE_CONTROL_STATUS_REASON_OUT_PARAMS psrOutParams;
-} SC_RPC_SERVICE_CONTROL_OUT_PARAMSW, *LPSC_RPC_SERVICE_CONTROL_OUT_PARAMSW;
-#endif
-
-typedef [v1_enum] enum _SC_STATUS_TYPE {
-    SC_STATUS_PROCESS_INFO = 0,
-} SC_STATUS_TYPE;
-
-typedef struct _SERVICE_CONTROL_STATUS_REASON_IN_PARAMSA {
-    DWORD dwReason;
-    [string] LPSTR pszComment;
-} SERVICE_CONTROL_STATUS_REASON_IN_PARAMSA, *LPSERVICE_CONTROL_STATUS_REASON_IN_PARAMSA;
-
-typedef struct _SERVICE_CONTROL_STATUS_REASON_IN_PARAMSW {
-    DWORD dwReason;
-    [string] LPWSTR pszComment;
-} SERVICE_CONTROL_STATUS_REASON_IN_PARAMSW, *LPSERVICE_CONTROL_STATUS_REASON_IN_PARAMSW;
-
-typedef struct _SERVICE_CONTROL_STATUS_REASON_OUT_PARAMS {
-    SERVICE_STATUS_PROCESS ServiceStatus;
-} SERVICE_CONTROL_STATUS_REASON_OUT_PARAMS, *LPSERVICE_CONTROL_STATUS_REASON_OUT_PARAMS;
-
-typedef SERVICE_NOTIFY_STATUS_CHANGE_PARAMS_2 SERVICE_NOTIFY_STATUS_CHANGE_PARAMS, *LPSERVICE_NOTIFY_STATUS_CHANGE_PARAMS;
-
-cpp_quote("#endif")
-
-typedef struct _STRING_PTRSA {
-    [string] LPSTR StringPtr;
-} STRING_PTRSA, *PSTRING_PTRSA, *LPSTRING_PTRSA;
-
-typedef struct _STRING_PTRSW {
-    [string] LPWSTR StringPtr;
-} STRING_PTRSW, *PSTRING_PTRSW, *LPSTRING_PTRSW;
-
-[
-  uuid(367abb81-9844-35f1-ad32-98f038001003),
-  version(2.0),
-  pointer_default(unique),
-  endpoint("ncacn_np:[\\pipe\\ntsvcs]")
-]
-interface svcctl
-{
-    /* Function 0 */
-    DWORD RCloseServiceHandle(
-        [in, out] LPSC_RPC_HANDLE hSCObject);
-
-    /* Function 1 */
-    DWORD RControlService(
-        [in] SC_RPC_HANDLE hService,
-        [in] DWORD dwControl,
-        [out] LPSERVICE_STATUS lpServiceStatus);
-
-    /* Function 2 */
-    DWORD RDeleteService(
-        [in] SC_RPC_HANDLE hService);
-
-    /* Function 3 */
-    DWORD RLockServiceDatabase(
-        [in] SC_RPC_HANDLE hSCManager,
-        [out] LPSC_RPC_LOCK lpLock);
-
-    /* Function 4 */
-    DWORD RQueryServiceObjectSecurity(
-        [in] SC_RPC_HANDLE hService,
-        [in] SECURITY_INFORMATION dwSecurityInformation,
-        [out, size_is(cbBufSize)] LPBYTE lpSecurityDescriptor,
-        [in, range(0, 1024 * 256)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_256K pcbBytesNeeded);
-
-    /* Function 5 */
-    DWORD RSetServiceObjectSecurity(
-        [in] SC_RPC_HANDLE hService,
-        [in] DWORD dwSecurityInformation,
-        [in, size_is(dwSecuityDescriptorSize)] LPBYTE lpSecurityDescriptor,
-        [in] DWORD dwSecuityDescriptorSize);
-
-    /* Function 6 */
-    DWORD RQueryServiceStatus(
-        [in] SC_RPC_HANDLE hService,
-        [out] LPSERVICE_STATUS lpServiceStatus);
-
-    /* Function 7 */
-    DWORD RSetServiceStatus(
-      [in] RPC_SERVICE_STATUS_HANDLE hServiceStatus,
-      [in] LPSERVICE_STATUS lpServiceStatus);
-
-    /* Function 8 */
-    DWORD RUnlockServiceDatabase(
-        [in, out] LPSC_RPC_LOCK Lock);
-
-    /* Function 9 */
-    DWORD RNotifyBootConfigStatus(
-        [in, string, unique] SVCCTL_HANDLEW lpMachineName,
-        [in] DWORD BootAcceptable);
-
-    /* Function 10 */
-    DWORD RI_ScSetServiceBitsW(
-        [in] RPC_SERVICE_STATUS_HANDLE hServiceStatus,
-        [in] DWORD dwServiceBits,
-        [in] BOOL bSetBitsOn,
-        [in] BOOL bUpdateImmediately,
-        [in, string, unique] LPWSTR lpString);
-
-    /* Function 11 */
-    DWORD RChangeServiceConfigW(
-        [in] SC_RPC_HANDLE hService,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwStartType,
-        [in] DWORD dwErrorControl,
-        [in, string, unique] LPWSTR lpBinaryPathName,
-        [in, string, unique] LPWSTR lpLoadOrderGroup,
-        [in, out, unique] LPDWORD lpdwTagId,
-        [in, unique, size_is(dwDependSize)] LPBYTE lpDependencies,
-        [in, range(0, SC_MAX_DEPEND_SIZE)] DWORD dwDependSize,
-        [in, string, unique] LPWSTR lpServiceStartName,
-        [in, unique, size_is(dwPwSize)] LPBYTE lpPassword,
-        [in, range(0, SC_MAX_PWD_SIZE)] DWORD dwPwSize,
-        [in, string, unique] LPWSTR lpDisplayName);
-
-    /* Function 12 */
-    DWORD RCreateServiceW(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in, string] LPCWSTR lpServiceName,
-        [in, string, unique] LPCWSTR lpDisplayName,
-        [in] DWORD dwDesiredAccess,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwStartType,
-        [in] DWORD dwErrorControl,
-        [in, string] LPCWSTR lpBinaryPathName,
-        [in, string, unique] LPCWSTR lpLoadOrderGroup,
-        [in, out, unique] LPDWORD lpdwTagId,
-        [in, unique, size_is(dwDependSize)] LPBYTE lpDependencies,
-        [in, range(0, SC_MAX_DEPEND_SIZE)] DWORD dwDependSize,
-        [in, string, unique] LPCWSTR lpServiceStartName,
-        [in, unique, size_is(dwPwSize)] LPBYTE lpPassword,
-        [in, range(0, SC_MAX_PWD_SIZE)] DWORD dwPwSize,
-        [out] LPSC_RPC_HANDLE lpServiceHandle);
-
-    /* Function 13 */
-    DWORD REnumDependentServicesW(
-        [in] SC_RPC_HANDLE hService,
-        [in] DWORD dwServiceState,
-        [out, size_is(cbBufSize)] LPBYTE lpServices,
-        [in, range(0, 1024*256)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_256K pcbBytesNeeded,
-        [out] LPBOUNDED_DWORD_256K lpServicesReturned);
-
-    /* Function 14 */
-    DWORD REnumServicesStatusW(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwServiceState,
-        [out, size_is(dwBufSize)] LPBYTE lpBuffer,
-        [in, range(0, 1024*256)] DWORD dwBufSize,
-        [out] LPBOUNDED_DWORD_256K pcbBytesNeeded,
-        [out] LPBOUNDED_DWORD_256K lpServicesReturned,
-        [in, out, unique] LPBOUNDED_DWORD_256K lpResumeHandle);
-
-    /* Function 15 */
-    DWORD ROpenSCManagerW(
-        [in, string, unique] SVCCTL_HANDLEW lpMachineName,
-        [in, string, unique] LPWSTR lpDatabaseName,
-        [in] DWORD dwDesiredAccess,
-        [out] LPSC_RPC_HANDLE lpScHandle);
-
-    /* Function 16 */
-    DWORD ROpenServiceW(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in, string] LPWSTR lpServiceName,
-        [in] DWORD dwDesiredAccess,
-        [out] LPSC_RPC_HANDLE lpServiceHandle);
-
-    /* Function 17 */
-    DWORD RQueryServiceConfigW(
-        [in] SC_RPC_HANDLE hService,
-        [out, size_is(cbBufSize)] LPBYTE lpServiceConfig,
-        /* FIXME: should be [out] LPQUERY_SERVICE_CONFIGW lpServiceConfig, */
-        [in, range(0, 1024*8)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_8K pcbBytesNeeded);
-
-    /* Function 18 */
-    DWORD RQueryServiceLockStatusW(
-        [in] SC_RPC_HANDLE hSCManager,
-        [out, size_is(cbBufSize)] LPBYTE lpLockStatus,
-        /* FIXME: should be [out] LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus, */
-        [in, range(0, 1024*4)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_4K pcbBytesNeeded);
-
-    /* Function 19 */
-    DWORD RStartServiceW(
-        [in] SC_RPC_HANDLE hService,
-        [in, range(0, SC_MAX_ARGUMENTS)] DWORD argc,
-        [in, unique, size_is(argc)] LPSTRING_PTRSW argv);
-
-    /* Function 20 */
-    DWORD RGetServiceDisplayNameW(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in, string] LPCWSTR lpServiceName,
-        [out, string, size_is(*lpcchBuffer + 1)] LPWSTR lpDisplayName,
-        [in, out] DWORD* lpcchBuffer);
-
-    /* Function 21 */
-    DWORD RGetServiceKeyNameW(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in, string] LPCWSTR lpDisplayName,
-        [out, string, size_is(*lpcchBuffer + 1)] LPWSTR lpServiceName,
-        [in, out] DWORD* lpcchBuffer);
-
-    /* Function 22 */
-    DWORD RI_ScSetServiceBitsA(
-        [in] RPC_SERVICE_STATUS_HANDLE hServiceStatus,
-        [in] DWORD dwServiceBits,
-        [in] BOOL bSetBitsOn,
-        [in] BOOL bUpdateImmediately,
-        [in, string, unique] LPSTR lpString);
-
-    /* Function 23 */
-    DWORD RChangeServiceConfigA(
-        [in] SC_RPC_HANDLE hService,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwStartType,
-        [in] DWORD dwErrorControl,
-        [in, string, unique] LPSTR lpBinaryPathName,
-        [in, string, unique] LPSTR lpLoadOrderGroup,
-        [in, out, unique] LPDWORD lpdwTagId,
-        [in, unique, size_is(dwDependSize)] LPBYTE lpDependencies,
-        [in, range(0, SC_MAX_DEPEND_SIZE)] DWORD dwDependSize,
-        [in, string, unique] LPSTR lpServiceStartName,
-        [in, unique, size_is(dwPwSize)] LPBYTE lpPassword,
-        [in, range(0, SC_MAX_PWD_SIZE)] DWORD dwPwSize,
-        [in, string, unique] LPSTR lpDisplayName);
-
-    /* Function 24 */
-    DWORD RCreateServiceA(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in, string] LPSTR lpServiceName,
-        [in, string, unique] LPSTR lpDisplayName,
-        [in] DWORD dwDesiredAccess,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwStartType,
-        [in] DWORD dwErrorControl,
-        [in, string] LPSTR lpBinaryPathName,
-        [in, string, unique] LPSTR lpLoadOrderGroup,
-        [in, out, unique] LPDWORD lpdwTagId,
-        [in, unique, size_is(dwDependSize)] LPBYTE lpDependencies,
-        [in, range(0, SC_MAX_DEPEND_SIZE)] DWORD dwDependSize,
-        [in, string, unique] LPSTR lpServiceStartName,
-        [in, unique, size_is(dwPwSize)] LPBYTE lpPassword,
-        [in, range(0, SC_MAX_PWD_SIZE)] DWORD dwPwSize,
-        [out] LPSC_RPC_HANDLE lpServiceHandle);
-
-    /* Function 25 */
-    DWORD REnumDependentServicesA(
-        [in] SC_RPC_HANDLE hService,
-        [in] DWORD dwServiceState,
-        [out, size_is(cbBufSize)] LPBYTE lpServices,
-        [in, range(0, 1024*256)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_256K pcbBytesNeeded,
-        [out] LPBOUNDED_DWORD_256K lpServicesReturned);
-
-    /* Function 26 */
-    DWORD REnumServicesStatusA(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwServiceState,
-        [out, size_is(dwBufSize)] LPBYTE lpBuffer,
-        [in, range(0, 1024*256)] DWORD dwBufSize,
-        [out] LPBOUNDED_DWORD_256K pcbBytesNeeded,
-        [out] LPBOUNDED_DWORD_256K lpServicesReturned,
-        [in, out, unique] LPBOUNDED_DWORD_256K lpResumeHandle);
-
-    /* Function 27 */
-    DWORD ROpenSCManagerA(
-        [in, string, unique] SVCCTL_HANDLEA lpMachineName,
-        [in, string, unique] LPSTR lpDatabaseName,
-        [in] DWORD dwDesiredAccess,
-        [out] LPSC_RPC_HANDLE lpScHandle);
-
-    /* Function 28 */
-    DWORD ROpenServiceA(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in, string] LPSTR lpServiceName,
-        [in] DWORD dwDesiredAccess,
-        [out] LPSC_RPC_HANDLE lpServiceHandle);
-
-    /* Function 29 */
-    DWORD RQueryServiceConfigA(
-        [in] SC_RPC_HANDLE hService,
-        [out, size_is(cbBufSize)] LPBYTE lpServiceConfig,
-        /* FIXME: should be [out] LPQUERY_SERVICE_CONFIGA lpServiceConfig, */
-        [in, range(0, 1024*8)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_8K pcbBytesNeeded);
-
-    /* Function 30 */
-    DWORD RQueryServiceLockStatusA(
-        [in] SC_RPC_HANDLE hSCManager,
-        [out, size_is(cbBufSize)] LPBYTE lpLockStatus,
-        /* FIXME: should be [out] LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus, */
-        [in, range(0, 1024*4)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_4K pcbBytesNeeded);
-
-    /* Function 31 */
-    DWORD RStartServiceA(
-        [in] SC_RPC_HANDLE hService,
-        [in, range(0, SC_MAX_ARGUMENTS)] DWORD argc,
-        [in, unique, size_is(argc)] LPSTRING_PTRSA argv);
-
-    /* Function 32 */
-    DWORD RGetServiceDisplayNameA(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in, string] LPCSTR lpServiceName,
-        [out, string, size_is(*lpcchBuffer)] LPSTR lpDisplayName,
-        [in, out] LPBOUNDED_DWORD_4K lpcchBuffer);
-
-    /* Function 33 */
-    DWORD RGetServiceKeyNameA(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in, string] LPCSTR lpDisplayName,
-        [out, string, size_is(*lpcchBuffer)] LPSTR lpKeyName,
-        [in, out] LPBOUNDED_DWORD_4K lpcchBuffer);
-
-    /* Function 34 */
-    DWORD RI_ScGetCurrentGroupStateW(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in, string, unique] LPWSTR lpLoadOrderGroup,
-        [out] LPDWORD lpState);
-
-    /* Function 35 */
-    DWORD REnumServiceGroupW(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwServiceState,
-        [out, size_is(cbBufSize)] LPBYTE lpBuffer,
-        [in, range(0, 1024*256)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_256K pcbBytesNeeded,
-        [out] LPBOUNDED_DWORD_256K lpServicesReturned,
-        [in, out, unique] LPBOUNDED_DWORD_256K lpResumeIndex,
-        [in, string, unique] LPCWSTR pszGroupName);
-
-    /* Function 36 */
-    DWORD RChangeServiceConfig2A(
-        [in] SC_RPC_HANDLE hService,
-        [in] SC_RPC_CONFIG_INFOA Info);
-
-    /* Function 37 */
-    DWORD RChangeServiceConfig2W(
-        [in] SC_RPC_HANDLE hService,
-        [in] SC_RPC_CONFIG_INFOW Info);
-
-    /* Function 38 */
-    DWORD RQueryServiceConfig2A(
-        [in] SC_RPC_HANDLE hService,
-        [in] DWORD dwInfoLevel,
-        [out, size_is(cbBufSize)] LPBYTE lpBuffer,
-        [in, range(0, 1024*8)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_8K pcbBytesNeeded);
-
-    /* Function 39 */
-    DWORD RQueryServiceConfig2W(
-        [in] SC_RPC_HANDLE hService,
-        [in] DWORD dwInfoLevel,
-        [out, size_is(cbBufSize)] LPBYTE lpBuffer,
-        [in, range(0, 1024*8)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_8K pcbBytesNeeded);
-
-    /* Function 40 */
-    DWORD RQueryServiceStatusEx(
-        [in] SC_RPC_HANDLE hService,
-        [in] SC_STATUS_TYPE InfoLevel,
-        [out, size_is(cbBufSize)] LPBYTE lpBuffer,
-        [in, range(0, 1024*8)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_8K pcbBytesNeeded);
-
-    /* Function 41 */
-    DWORD REnumServicesStatusExA(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in] SC_ENUM_TYPE InfoLevel,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwServiceState,
-        [out, size_is(cbBufSize)] LPBYTE lpBuffer,
-        [in, range(0, 1024 * 256)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_256K pcbBytesNeeded,
-        [out] LPBOUNDED_DWORD_256K lpServicesReturned,
-        [in, out, unique] LPBOUNDED_DWORD_256K lpResumeIndex,
-        [in, string, unique] LPCSTR pszGroupName);
-
-    /* Function 42 */
-    DWORD REnumServicesStatusExW(
-        [in] SC_RPC_HANDLE hSCManager,
-        [in] SC_ENUM_TYPE InfoLevel,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwServiceState,
-        [out, size_is(cbBufSize)] LPBYTE lpBuffer,
-        [in, range(0, 1024 * 256)] DWORD cbBufSize,
-        [out] LPBOUNDED_DWORD_256K pcbBytesNeeded,
-        [out] LPBOUNDED_DWORD_256K lpServicesReturned,
-        [in, out, unique] LPBOUNDED_DWORD_256K lpResumeIndex,
-        [in, string, unique] LPCWSTR pszGroupName);
-
-    /* Function 43 */
-    DWORD RSendTSMessage(
-        [in] handle_t BindingHandle); /* FIXME */
-
-    /* Function 44 */
-    DWORD RCreateServiceWOW64A(
-        [in] handle_t BindingHandle,
-        [in, string] LPSTR lpServiceName,
-        [in, string, unique] LPSTR lpDisplayName,
-        [in] DWORD dwDesiredAccess,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwStartType,
-        [in] DWORD dwErrorControl,
-        [in, string] LPSTR lpBinaryPathName,
-        [in, string, unique] LPSTR lpLoadOrderGroup,
-        [in, out, unique] LPDWORD lpdwTagId,
-        [in, unique, size_is(dwDependSize)] LPBYTE lpDependencies,
-        [in, range(0, SC_MAX_DEPEND_SIZE)] DWORD dwDependSize,
-        [in, string, unique] LPSTR lpServiceStartName,
-        [in, unique, size_is(dwPwSize)] LPBYTE lpPassword,
-        [in, range(0, SC_MAX_PWD_SIZE)] DWORD dwPwSize,
-        [out] LPSC_RPC_HANDLE lpServiceHandle);
-
-    /* Function 45 */
-    DWORD RCreateServiceWOW64W(
-        [in] handle_t BindingHandle,
-        [in, string] LPWSTR lpServiceName,
-        [in, string, unique] LPWSTR lpDisplayName,
-        [in] DWORD dwDesiredAccess,
-        [in] DWORD dwServiceType,
-        [in] DWORD dwStartType,
-        [in] DWORD dwErrorControl,
-        [in, string] LPWSTR lpBinaryPathName,
-        [in, string, unique] LPWSTR lpLoadOrderGroup,
-        [in, out, unique] LPDWORD lpdwTagId,
-        [in, unique, size_is(dwDependSize)] LPBYTE lpDependencies,
-        [in, range(0, SC_MAX_DEPEND_SIZE)] DWORD dwDependSize,
-        [in, string, unique] LPWSTR lpServiceStartName,
-        [in, unique, size_is(dwPwSize)] LPBYTE lpPassword,
-        [in, range(0, SC_MAX_PWD_SIZE)] DWORD dwPwSize,
-        [out] LPSC_RPC_HANDLE lpServiceHandle);
-
-    /* Function 46 */
-    DWORD RQueryServiceTagInfo(
-        [in] handle_t BindingHandle); /* FIXME */
-
-    /* Function 47 */
-    DWORD RNotifyServiceStatusChange(
-        [in] SC_RPC_HANDLE hService,
-        [in] SC_RPC_NOTIFY_PARAMS NotifyParams,
-        [in] GUID* pClientProcessGuid,
-        [out] GUID* pSCMProcessGuid,
-        [out] PBOOL pfCreateRemoteQueue,
-        [out] LPSC_NOTIFY_RPC_HANDLE phNotify);
-
-    /* Function 48 */
-    DWORD RGetNotifyResults(
-        [in] SC_NOTIFY_RPC_HANDLE hNotify,
-        [out] PSC_RPC_NOTIFY_PARAMS_LIST *ppNotifyParams);
-
-    /* Function 49 */
-    DWORD RCloseNotifyHandle(
-        [in, out] LPSC_NOTIFY_RPC_HANDLE phNotify,
-        [out] PBOOL pfApcFired);
-
-    /* Function 50 */
-    DWORD RControlServiceExA(
-        [in] SC_RPC_HANDLE hService,
-        [in] DWORD dwControl,
-        [in] DWORD dwInfoLevel/*,
-        [in, switch_is(dwInfoLevel)] PSC_RPC_SERVICE_CONTROL_IN_PARAMSA pControlInParams,
-        [out, switch_is(dwInfoLevel)] PSC_RPC_SERVICE_CONTROL_IN_PARAMSA pControlOutParams*/);
-
-    /* Function 51 */
-    DWORD RControlServiceExW(
-        [in] SC_RPC_HANDLE hService,
-        [in] DWORD dwControl,
-        [in] DWORD dwInfoLevel/*,
-        [in, switch_is(dwInfoLevel)] PSC_RPC_SERVICE_CONTROL_IN_PARAMSW pControlInParams,
-        [out, switch_is(dwInfoLevel)] PSC_RPC_SERVICE_CONTROL_IN_PARAMSW pControlOutParams*/);
-
-    /* Function 52 */
-    DWORD RSendPnPMessage(
-        [in] handle_t BindingHandle); /* FIXME */
-
-    /* Function 53 */
-    DWORD RValidatePnPService(
-        [in] handle_t BindingHandle); /* FIXME */
-
-    /* Function 54 */
-    DWORD ROpenServiceStatusHandle(
-        [in] handle_t BindingHandle); /* FIXME */
-
-    /* Function 55 */
-    DWORD RFunction55(
-        [in] handle_t BindingHandle); /* FIXME */
-}