cache wuaueng.dll path
cuts down on redundant registry reads, which should slightly increase performance of service starts
This commit is contained in:
@@ -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,
|
||||
|
@@ -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) {
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user