From 196d4dcac4fe2cfdb7553d0eedeea8173dd40270 Mon Sep 17 00:00:00 2001 From: hakril Date: Fri, 20 Dec 2024 09:08:01 +0100 Subject: [PATCH] Add functions implemented by services in ctypes_generation --- .../definitions/functions/service.txt | 34 +++++++++++++++++++ .../definitions/simple_types.txt | 2 ++ windows/generated_def/meta.py | 6 ++++ windows/generated_def/winfuncs.py | 30 ++++++++++++++++ windows/generated_def/winstructs.py | 2 ++ windows/winproxy/apis/advapi32.py | 34 +++++++++++++++++++ 6 files changed, 108 insertions(+) diff --git a/ctypes_generation/definitions/functions/service.txt b/ctypes_generation/definitions/functions/service.txt index b2f88fb..0165054 100644 --- a/ctypes_generation/definitions/functions/service.txt +++ b/ctypes_generation/definitions/functions/service.txt @@ -267,4 +267,38 @@ BOOL StartServiceCtrlDispatcherA( BOOL StartServiceCtrlDispatcherW( SERVICE_TABLE_ENTRYW *lpServiceStartTable +); + +SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerExA( + [in] LPCSTR lpServiceName, + [in] LPHANDLER_FUNCTION_EX lpHandlerProc, + [in, optional] LPVOID lpContext +); + +SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerExW( + [in] LPCWSTR lpServiceName, + [in] LPHANDLER_FUNCTION_EX lpHandlerProc, + [in, optional] LPVOID lpContext +); + +SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerA( + [in] LPCSTR lpServiceName, + [in] LPHANDLER_FUNCTION lpHandlerProc +); + +SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerW( + [in] LPCWSTR lpServiceName, + [in] LPHANDLER_FUNCTION lpHandlerProc +); + +BOOL SetServiceStatus( + [in] SERVICE_STATUS_HANDLE hServiceStatus, + [in] LPSERVICE_STATUS lpServiceStatus +); + +BOOL SetServiceBits( + [in] SERVICE_STATUS_HANDLE hServiceStatus, + [in] DWORD dwServiceBits, + [in] BOOL bSetBitsOn, + [in] BOOL bUpdateImmediately ); \ No newline at end of file diff --git a/ctypes_generation/definitions/simple_types.txt b/ctypes_generation/definitions/simple_types.txt index 9719a7f..a823a06 100644 --- a/ctypes_generation/definitions/simple_types.txt +++ b/ctypes_generation/definitions/simple_types.txt @@ -263,6 +263,8 @@ LPSERVICE_MAIN_FUNCTIONA = PVOID LPSERVICE_MAIN_FUNCTIONW = PVOID LPOVERLAPPED_COMPLETION_ROUTINE = PVOID PDNS_QUERY_COMPLETION_ROUTINE = PVOID +LPHANDLER_FUNCTION = PVOID +LPHANDLER_FUNCTION_EX = PVOID // Will be changed at import time diff --git a/windows/generated_def/meta.py b/windows/generated_def/meta.py index 6f93ca4..555e817 100644 --- a/windows/generated_def/meta.py +++ b/windows/generated_def/meta.py @@ -15056,6 +15056,10 @@ functions = {'AccessCheck', 'RegSetValueExW', 'RegUnLoadKeyA', 'RegUnLoadKeyW', +'RegisterServiceCtrlHandlerA', +'RegisterServiceCtrlHandlerExA', +'RegisterServiceCtrlHandlerExW', +'RegisterServiceCtrlHandlerW', 'RegisterTraceGuidsA', 'RegisterTraceGuidsW', 'RemoveVectoredExceptionHandler', @@ -15103,6 +15107,8 @@ functions = {'AccessCheck', 'SetSecurityDescriptorDacl', 'SetSecurityDescriptorOwner', 'SetSecurityInfo', +'SetServiceBits', +'SetServiceStatus', 'SetStdHandle', 'SetTcpEntry', 'SetThreadAffinityMask', diff --git a/windows/generated_def/winfuncs.py b/windows/generated_def/winfuncs.py index 7278437..5aa0b6e 100644 --- a/windows/generated_def/winfuncs.py +++ b/windows/generated_def/winfuncs.py @@ -2300,6 +2300,36 @@ StartServiceCtrlDispatcherAParams = ((1, 'lpServiceStartTable'),) StartServiceCtrlDispatcherWPrototype = WINFUNCTYPE(BOOL, POINTER(SERVICE_TABLE_ENTRYW)) StartServiceCtrlDispatcherWParams = ((1, 'lpServiceStartTable'),) +#def RegisterServiceCtrlHandlerExA(lpServiceName, lpHandlerProc, lpContext): +# return RegisterServiceCtrlHandlerExA.ctypes_function(lpServiceName, lpHandlerProc, lpContext) +RegisterServiceCtrlHandlerExAPrototype = WINFUNCTYPE(SERVICE_STATUS_HANDLE, LPCSTR, LPHANDLER_FUNCTION_EX, LPVOID) +RegisterServiceCtrlHandlerExAParams = ((1, 'lpServiceName'), (1, 'lpHandlerProc'), (1, 'lpContext')) + +#def RegisterServiceCtrlHandlerExW(lpServiceName, lpHandlerProc, lpContext): +# return RegisterServiceCtrlHandlerExW.ctypes_function(lpServiceName, lpHandlerProc, lpContext) +RegisterServiceCtrlHandlerExWPrototype = WINFUNCTYPE(SERVICE_STATUS_HANDLE, LPCWSTR, LPHANDLER_FUNCTION_EX, LPVOID) +RegisterServiceCtrlHandlerExWParams = ((1, 'lpServiceName'), (1, 'lpHandlerProc'), (1, 'lpContext')) + +#def RegisterServiceCtrlHandlerA(lpServiceName, lpHandlerProc): +# return RegisterServiceCtrlHandlerA.ctypes_function(lpServiceName, lpHandlerProc) +RegisterServiceCtrlHandlerAPrototype = WINFUNCTYPE(SERVICE_STATUS_HANDLE, LPCSTR, LPHANDLER_FUNCTION) +RegisterServiceCtrlHandlerAParams = ((1, 'lpServiceName'), (1, 'lpHandlerProc')) + +#def RegisterServiceCtrlHandlerW(lpServiceName, lpHandlerProc): +# return RegisterServiceCtrlHandlerW.ctypes_function(lpServiceName, lpHandlerProc) +RegisterServiceCtrlHandlerWPrototype = WINFUNCTYPE(SERVICE_STATUS_HANDLE, LPCWSTR, LPHANDLER_FUNCTION) +RegisterServiceCtrlHandlerWParams = ((1, 'lpServiceName'), (1, 'lpHandlerProc')) + +#def SetServiceStatus(hServiceStatus, lpServiceStatus): +# return SetServiceStatus.ctypes_function(hServiceStatus, lpServiceStatus) +SetServiceStatusPrototype = WINFUNCTYPE(BOOL, SERVICE_STATUS_HANDLE, LPSERVICE_STATUS) +SetServiceStatusParams = ((1, 'hServiceStatus'), (1, 'lpServiceStatus')) + +#def SetServiceBits(hServiceStatus, dwServiceBits, bSetBitsOn, bUpdateImmediately): +# return SetServiceBits.ctypes_function(hServiceStatus, dwServiceBits, bSetBitsOn, bUpdateImmediately) +SetServiceBitsPrototype = WINFUNCTYPE(BOOL, SERVICE_STATUS_HANDLE, DWORD, BOOL, BOOL) +SetServiceBitsParams = ((1, 'hServiceStatus'), (1, 'dwServiceBits'), (1, 'bSetBitsOn'), (1, 'bUpdateImmediately')) + #def SetupDiClassNameFromGuidA(ClassGuid, ClassName, ClassNameSize, RequiredSize): # return SetupDiClassNameFromGuidA.ctypes_function(ClassGuid, ClassName, ClassNameSize, RequiredSize) SetupDiClassNameFromGuidAPrototype = WINFUNCTYPE(BOOL, POINTER(GUID), PSTR, DWORD, PDWORD) diff --git a/windows/generated_def/winstructs.py b/windows/generated_def/winstructs.py index a3d03ed..2c66921 100644 --- a/windows/generated_def/winstructs.py +++ b/windows/generated_def/winstructs.py @@ -301,6 +301,8 @@ LPSERVICE_MAIN_FUNCTIONA = PVOID LPSERVICE_MAIN_FUNCTIONW = PVOID LPOVERLAPPED_COMPLETION_ROUTINE = PVOID PDNS_QUERY_COMPLETION_ROUTINE = PVOID +LPHANDLER_FUNCTION = PVOID +LPHANDLER_FUNCTION_EX = PVOID LPCONTEXT = PVOID HCERTSTORE = PVOID HCRYPTMSG = PVOID diff --git a/windows/winproxy/apis/advapi32.py b/windows/winproxy/apis/advapi32.py index 7e2a15c..0850b14 100644 --- a/windows/winproxy/apis/advapi32.py +++ b/windows/winproxy/apis/advapi32.py @@ -493,6 +493,40 @@ def CreateServiceW(hSCManager, lpServiceName, lpDisplayName, dwDesiredAccess, dw def DeleteService(hService): return DeleteService.ctypes_function(hService) +## Service : functions implemented by services. +@Advapi32Proxy() +def StartServiceCtrlDispatcherA(lpServiceStartTable): + return StartServiceCtrlDispatcherA.ctypes_function(lpServiceStartTable) + +@Advapi32Proxy() +def StartServiceCtrlDispatcherW(lpServiceStartTable): + return StartServiceCtrlDispatcherW.ctypes_function(lpServiceStartTable) + +@Advapi32Proxy() +def RegisterServiceCtrlHandlerExA(lpServiceName, lpHandlerProc, lpContext): + return RegisterServiceCtrlHandlerExA.ctypes_function(lpServiceName, lpHandlerProc, lpContext) + +@Advapi32Proxy() +def RegisterServiceCtrlHandlerExW(lpServiceName, lpHandlerProc, lpContext): + return RegisterServiceCtrlHandlerExW.ctypes_function(lpServiceName, lpHandlerProc, lpContext) + +@Advapi32Proxy() +def RegisterServiceCtrlHandlerA(lpServiceName, lpHandlerProc): + return RegisterServiceCtrlHandlerA.ctypes_function(lpServiceName, lpHandlerProc) + +@Advapi32Proxy() +def RegisterServiceCtrlHandlerW(lpServiceName, lpHandlerProc): + return RegisterServiceCtrlHandlerW.ctypes_function(lpServiceName, lpHandlerProc) + +@Advapi32Proxy() +def SetServiceStatus(hServiceStatus, lpServiceStatus): + return SetServiceStatus.ctypes_function(hServiceStatus, lpServiceStatus) + +@Advapi32Proxy() +def SetServiceBits(hServiceStatus, dwServiceBits, bSetBitsOn, bUpdateImmediately): + return SetServiceBits.ctypes_function(hServiceStatus, dwServiceBits, bSetBitsOn, bUpdateImmediately) + + # Event log @Advapi32Proxy()