From: Micah N Gorrell Subject: [PATCH resend 1/8] advapi32: Replace usage of internal SERV_ functions with exported functions Message-Id: <20191017145317.1998353-1-mgorrell@codeweavers.com> Date: Thu, 17 Oct 2019 08:53:10 -0600 This is in preparation for moving the services RPC functions into sechost. Signed-off-by: Micah N Gorrell --- dlls/advapi32/advapi32_misc.h | 3 --- dlls/advapi32/security.c | 32 +++++++++++++++++++++++++------- dlls/advapi32/service.c | 6 +++--- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/dlls/advapi32/advapi32_misc.h b/dlls/advapi32/advapi32_misc.h index 4ced1e8a64..77b56420ba 100644 --- a/dlls/advapi32/advapi32_misc.h +++ b/dlls/advapi32/advapi32_misc.h @@ -32,9 +32,6 @@ BOOL ADVAPI_GetComputerSid(PSID sid) DECLSPEC_HIDDEN; BOOL lookup_local_wellknown_name(const LSA_UNICODE_STRING*, PSID, LPDWORD, LPWSTR, LPDWORD, PSID_NAME_USE, BOOL*) DECLSPEC_HIDDEN; BOOL lookup_local_user_name(const LSA_UNICODE_STRING*, PSID, LPDWORD, LPWSTR, LPDWORD, PSID_NAME_USE, BOOL*) DECLSPEC_HIDDEN; WCHAR *SERV_dup(const char *str) DECLSPEC_HIDDEN; -DWORD SERV_OpenSCManagerW(LPCWSTR, LPCWSTR, DWORD, SC_HANDLE*) DECLSPEC_HIDDEN; -DWORD SERV_OpenServiceW(SC_HANDLE, LPCWSTR, DWORD, SC_HANDLE*) DECLSPEC_HIDDEN; -NTSTATUS SERV_QueryServiceObjectSecurity(SC_HANDLE, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, LPDWORD) DECLSPEC_HIDDEN; const WCHAR *get_wellknown_privilege_name(const LUID *) DECLSPEC_HIDDEN; /* memory allocation functions */ diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c index a7707f15d3..74eda93282 100644 --- a/dlls/advapi32/security.c +++ b/dlls/advapi32/security.c @@ -416,15 +416,19 @@ static inline DWORD get_security_file( LPCWSTR full_file_name, DWORD access, HAN static inline DWORD get_security_service( LPWSTR full_service_name, DWORD access, HANDLE *service ) { SC_HANDLE manager = 0; - DWORD err; - err = SERV_OpenSCManagerW( NULL, NULL, access, (SC_HANDLE *)&manager ); - if (err == ERROR_SUCCESS) + manager = OpenSCManagerW( NULL, NULL, access ); + if (manager) { - err = SERV_OpenServiceW( manager, full_service_name, access, (SC_HANDLE *)service ); + *service = OpenServiceW( manager, full_service_name, access); CloseServiceHandle( manager ); + + if (*service) + { + return ERROR_SUCCESS; + } } - return err; + return GetLastError(); } /* helper function for SE_REGISTRY_KEY objects in [Get|Set]NamedSecurityInfo */ @@ -1804,7 +1808,14 @@ DWORD WINAPI GetSecurityInfo( switch (ObjectType) { case SE_SERVICE: - status = SERV_QueryServiceObjectSecurity(hObject, SecurityInfo, NULL, 0, &n1); + if (QueryServiceObjectSecurity(hObject, SecurityInfo, NULL, 0, &n1)) + { + status = STATUS_SUCCESS; + } + else + { + status = RtlGetLastNtStatus(); + } break; default: status = NtQuerySecurityObject(hObject, SecurityInfo, NULL, 0, &n1); @@ -1820,7 +1831,14 @@ DWORD WINAPI GetSecurityInfo( switch (ObjectType) { case SE_SERVICE: - status = SERV_QueryServiceObjectSecurity(hObject, SecurityInfo, sd, n1, &n2); + if (QueryServiceObjectSecurity(hObject, SecurityInfo, sd, n1, &n2)) + { + status = STATUS_SUCCESS; + } + else + { + status = RtlGetLastNtStatus(); + } break; default: status = NtQuerySecurityObject(hObject, SecurityInfo, sd, n1, &n2); diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c index 231f0267e9..2781a12823 100644 --- a/dlls/advapi32/service.c +++ b/dlls/advapi32/service.c @@ -897,7 +897,7 @@ SC_HANDLE WINAPI OpenSCManagerA( LPCSTR lpMachineName, LPCSTR lpDatabaseName, * * See OpenSCManagerA. */ -DWORD SERV_OpenSCManagerW( LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, +static DWORD SERV_OpenSCManagerW( LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess, SC_HANDLE *handle ) { DWORD r; @@ -1049,7 +1049,7 @@ SC_HANDLE WINAPI OpenServiceA( SC_HANDLE hSCManager, LPCSTR lpServiceName, * * See OpenServiceA. */ -DWORD SERV_OpenServiceW( SC_HANDLE hSCManager, LPCWSTR lpServiceName, +static DWORD SERV_OpenServiceW( SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess, SC_HANDLE *handle ) { DWORD err; @@ -2484,7 +2484,7 @@ BOOL WINAPI ChangeServiceConfig2W( SC_HANDLE hService, DWORD dwInfoLevel, return err == ERROR_SUCCESS; } -NTSTATUS SERV_QueryServiceObjectSecurity(SC_HANDLE hService, +static NTSTATUS SERV_QueryServiceObjectSecurity(SC_HANDLE hService, SECURITY_INFORMATION dwSecurityInformation, PSECURITY_DESCRIPTOR lpSecurityDescriptor, DWORD cbBufSize, LPDWORD pcbBytesNeeded) -- 2.23.0