
Note: currently only works via manual injection, Rundll32Entry has been removed - Fixed conflict with UpdatePack7R2 (and WuaCpuFix) by hooking `RegQueryValueExW` and fixing the path to `wuaueng.dll`. (fixes #100) - Eliminated lots of redundant and unnecessary code. - Other reliability improvements and bug fixes. - Removed the error message that displays in the installers when `wuaueng.dll` is below the minimum supported version, and added an internal check that will skip the patching procedure if the version of `wuaueng.dll` is too low. **This means you can now safely install wufuc prior to any updates, and it will automatically start working once it's needed, without any potential side effects.** (fixes #99) - Added `/UNATTENDED` flag to the batch installer and uninstaller. You can use this to bypass the confirmation for a fully automated installation/uninstallation. To use it, you invoke the batch script from an elevated command prompt, like so: `"wufuc_installer.bat" /UNATTENDED` - Improved logging framework to allow multiple processes to safely write to the same `.log` file.
28 lines
924 B
C
28 lines
924 B
C
#include "service.h"
|
|
|
|
#include <Windows.h>
|
|
#include <tchar.h>
|
|
|
|
BOOL GetServiceCommandLine(SC_HANDLE hSCManager, LPCTSTR lpServiceName, LPTSTR lpCommandLine, SIZE_T dwSize) {
|
|
BOOL result = FALSE;
|
|
if ( !hSCManager && !(hSCManager = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT)) )
|
|
return result;
|
|
|
|
HANDLE hService = OpenService(hSCManager, lpServiceName, SERVICE_QUERY_CONFIG);
|
|
if ( !hService )
|
|
return result;
|
|
|
|
DWORD cbBytesNeeded;
|
|
if ( !QueryServiceConfig(hService, NULL, 0, &cbBytesNeeded)
|
|
&& GetLastError() == ERROR_INSUFFICIENT_BUFFER ) {
|
|
|
|
LPQUERY_SERVICE_CONFIG sc = malloc(cbBytesNeeded);
|
|
if ( QueryServiceConfig(hService, sc, cbBytesNeeded, &cbBytesNeeded)
|
|
&& !_tcscpy_s(lpCommandLine, dwSize, sc->lpBinaryPathName) )
|
|
result = TRUE;
|
|
free(sc);
|
|
}
|
|
CloseServiceHandle(hService);
|
|
return result;
|
|
}
|