cache wuaueng.dll path

cuts down on redundant registry reads, which should slightly increase
performance of service starts
This commit is contained in:
zeffy
2017-07-15 19:36:46 -07:00
parent 0200470e6b
commit 201ecefc97
3 changed files with 22 additions and 1 deletions

View File

@@ -1,7 +1,7 @@
#pragma once
DWORD WINAPI NewThreadProc(LPVOID lpParam);
BOOL PatchWUAgentHMODULE(HMODULE hModule);
BOOL PatchWU(HMODULE hModule);
HMODULE WINAPI _LoadLibraryExA(
_In_ LPCSTR lpFileName,

View File

@@ -5,6 +5,9 @@
#include "shellapihelper.h"
#include "service.h"
static CHAR wuauservdllA[MAX_PATH];
static WCHAR wuauservdllW[MAX_PATH];
BOOL get_svcdllA(LPCSTR lpServiceName, LPSTR lpServiceDll, DWORD dwSize) {
CHAR lpSubKey[257];
sprintf_s(lpSubKey, _countof(lpSubKey), "SYSTEM\\CurrentControlSet\\services\\%s\\Parameters", lpServiceName);
@@ -27,6 +30,20 @@ BOOL get_svcdllW(LPCWSTR lpServiceName, LPWSTR lpServiceDll, DWORD dwSize) {
return TRUE;
}
LPSTR get_wuauservdllA(void) {
if (wuauservdllA[0] == '\0') {
get_svcdllA("wuauserv", wuauservdllA, _countof(wuauservdllA));
}
return wuauservdllA;
}
LPWSTR get_wuauservdllW(void) {
if (wuauservdllW[0] == L'\0') {
get_svcdllW(L"wuauserv", wuauservdllW, _countof(wuauservdllW));
}
return wuauservdllW;
}
BOOL get_svcpid(SC_HANDLE hSCManager, LPCTSTR lpServiceName, DWORD *lpdwProcessId) {
SC_HANDLE hService = OpenService(hSCManager, lpServiceName, SERVICE_QUERY_STATUS);
if (!hService) {

View File

@@ -6,9 +6,13 @@ BOOL get_svcpid(SC_HANDLE hSCManager, LPCTSTR lpServiceName, DWORD *lpdwProcessI
BOOL get_svcgname(SC_HANDLE hSCManager, LPCTSTR lpServiceName, LPTSTR lpGroupName, SIZE_T dwSize);
BOOL get_svcpath(SC_HANDLE hSCManager, LPCTSTR lpServiceName, LPTSTR lpBinaryPathName, SIZE_T dwSize);
BOOL get_svcgpid(SC_HANDLE hSCManager, LPTSTR lpServiceGroupName, DWORD *lpdwProcessId);
LPSTR get_wuauservdllA(void);
LPWSTR get_wuauservdllW(void);
#ifdef UNICODE
#define get_svcdll get_svcdllW
#define get_wuauservdll get_wuauservdllW
#else
#define get_svcdll get_svcdllA
#define get_wuauservdll get_wuauservdllA
#endif