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
|
#pragma once
|
||||||
|
|
||||||
DWORD WINAPI NewThreadProc(LPVOID lpParam);
|
DWORD WINAPI NewThreadProc(LPVOID lpParam);
|
||||||
BOOL PatchWUAgentHMODULE(HMODULE hModule);
|
BOOL PatchWU(HMODULE hModule);
|
||||||
|
|
||||||
HMODULE WINAPI _LoadLibraryExA(
|
HMODULE WINAPI _LoadLibraryExA(
|
||||||
_In_ LPCSTR lpFileName,
|
_In_ LPCSTR lpFileName,
|
||||||
|
@@ -5,6 +5,9 @@
|
|||||||
#include "shellapihelper.h"
|
#include "shellapihelper.h"
|
||||||
#include "service.h"
|
#include "service.h"
|
||||||
|
|
||||||
|
static CHAR wuauservdllA[MAX_PATH];
|
||||||
|
static WCHAR wuauservdllW[MAX_PATH];
|
||||||
|
|
||||||
BOOL get_svcdllA(LPCSTR lpServiceName, LPSTR lpServiceDll, DWORD dwSize) {
|
BOOL get_svcdllA(LPCSTR lpServiceName, LPSTR lpServiceDll, DWORD dwSize) {
|
||||||
CHAR lpSubKey[257];
|
CHAR lpSubKey[257];
|
||||||
sprintf_s(lpSubKey, _countof(lpSubKey), "SYSTEM\\CurrentControlSet\\services\\%s\\Parameters", lpServiceName);
|
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;
|
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) {
|
BOOL get_svcpid(SC_HANDLE hSCManager, LPCTSTR lpServiceName, DWORD *lpdwProcessId) {
|
||||||
SC_HANDLE hService = OpenService(hSCManager, lpServiceName, SERVICE_QUERY_STATUS);
|
SC_HANDLE hService = OpenService(hSCManager, lpServiceName, SERVICE_QUERY_STATUS);
|
||||||
if (!hService) {
|
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_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_svcpath(SC_HANDLE hSCManager, LPCTSTR lpServiceName, LPTSTR lpBinaryPathName, SIZE_T dwSize);
|
||||||
BOOL get_svcgpid(SC_HANDLE hSCManager, LPTSTR lpServiceGroupName, DWORD *lpdwProcessId);
|
BOOL get_svcgpid(SC_HANDLE hSCManager, LPTSTR lpServiceGroupName, DWORD *lpdwProcessId);
|
||||||
|
LPSTR get_wuauservdllA(void);
|
||||||
|
LPWSTR get_wuauservdllW(void);
|
||||||
|
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
#define get_svcdll get_svcdllW
|
#define get_svcdll get_svcdllW
|
||||||
|
#define get_wuauservdll get_wuauservdllW
|
||||||
#else
|
#else
|
||||||
#define get_svcdll get_svcdllA
|
#define get_svcdll get_svcdllA
|
||||||
|
#define get_wuauservdll get_wuauservdllA
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user