organize includes, fix possible null pointer, update patternfind.c, change some types
This commit is contained in:
22
.github/ISSUE_TEMPLATE.md
vendored
Normal file
22
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
Before you create an issue, make sure it has not already been reported.
|
||||||
|
|
||||||
|
Then, make sure the following things are included in your issue:
|
||||||
|
|
||||||
|
- wufuc version (can be viewed in Add & Remove Programs).
|
||||||
|
- Operating system version and Service Pack (including 32- or 64-bit).
|
||||||
|
- Short description of the issue.
|
||||||
|
- Elaborate steps to reproduce the bug/issue being reported.
|
||||||
|
- Attach wufuc's log file (located at `C:\ProgramData\wufuc\wufuc.log`).
|
||||||
|
- Any supporting information that could help solve/understand the issue.
|
||||||
|
|
||||||
|
Any issues that do not include these, or go more than a week without a
|
||||||
|
response from the original poster will be subject to closure at my discretion.
|
||||||
|
|
||||||
|
If you have questions, be sure to check here:
|
||||||
|
- https://github.com/zeffy/wufuc/blob/master/FAQ.md
|
||||||
|
|
||||||
|
It is common for issues to go unanswered for several days or even weeks,
|
||||||
|
so please do not take offense at this.
|
||||||
|
|
||||||
|
I read every issue and usually only reply if there is clarification needed,
|
||||||
|
or if there is a new release pending that will solve the issue.
|
@@ -1,31 +0,0 @@
|
|||||||
# Contributing guidelines
|
|
||||||
|
|
||||||
[:de:] [:es:] [:fr:] [:it:] [:hungary:] [:brazil:] [:ru:] [:cn:] [:taiwan:]
|
|
||||||
|
|
||||||
## Reporting an issue [](https://isitmaintained.com/project/zeffy/wufuc)
|
|
||||||
|
|
||||||
### Before you create an issue, please make sure of the following:
|
|
||||||
|
|
||||||
- Are you using at least the [latest stable version](https://github.com/zeffy/wufuc/releases/latest)?
|
|
||||||
- Have you tried restarting your computer?
|
|
||||||
|
|
||||||
### After you've confirmed those things, please create an issue and include the following information:
|
|
||||||
|
|
||||||
- Navigate to where you installed wufuc, and attach `wufuc.log` to your issue.
|
|
||||||
- What is the file version and/or SHA-1 hash of `C:\Windows\System32\wuaueng.dll`?
|
|
||||||
- Any other information you feel is relevant to your issue.
|
|
||||||
|
|
||||||
## Closure policy
|
|
||||||
|
|
||||||
- Issues that don't have the information requested above (when applicable) will be closed immediately and the poster directed to the contributing guidelines.
|
|
||||||
- Issues that go a week without a response from original poster are subject to closure at my discretion.
|
|
||||||
|
|
||||||
[:de:]: https://github.com/zeffy/wufuc/wiki/CONTRIBUTING-(Deutsch)
|
|
||||||
[:es:]: https://github.com/zeffy/wufuc/wiki/CONTRIBUTING-(Espa%C3%B1ol)
|
|
||||||
[:fr:]: https://github.com/zeffy/wufuc/wiki/CONTRIBUTING-(Fran%C3%A7ais)
|
|
||||||
[:it:]: https://github.com/zeffy/wufuc/wiki/CONTRIBUTING-(Italiano)
|
|
||||||
[:hungary:]: https://github.com/zeffy/wufuc/wiki/CONTRIBUTING-(Magyar)
|
|
||||||
[:brazil:]: https://github.com/zeffy/wufuc/wiki/CONTRIBUTING-(Portugu%C3%AAs%20Brasileiro)
|
|
||||||
[:ru:]: https://github.com/zeffy/wufuc/wiki/CONTRIBUTING-(%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
|
|
||||||
[:cn:]: https://github.com/zeffy/wufuc/wiki/CONTRIBUTING-(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
|
|
||||||
[:taiwan:]: https://github.com/zeffy/wufuc/wiki/CONTRIBUTING-(%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87)
|
|
26
FAQ.md
Normal file
26
FAQ.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# FAQ
|
||||||
|
|
||||||
|
## How to deploy wufuc using Group Policy
|
||||||
|
|
||||||
|
[There is a tutorial on the Advanced Installer website that explains how to do this](http://www.advancedinstaller.com/user-guide/tutorial-gpo.html).
|
||||||
|
|
||||||
|
## How to use unattended feature in the batch setup scripts
|
||||||
|
|
||||||
|
`install_wufuc.bat` and `uninstall_wufuc.bat` both support two command line parameters that can be used alone, or combined to change the behavior of the scripts:
|
||||||
|
|
||||||
|
- `/NORESTART` - Automatically declines rebooting after the setup finishes.
|
||||||
|
- `/UNATTENDED` - Skips all prompts for user interaction, and automatically restarts unless `/NORESTART` is also specified.
|
||||||
|
|
||||||
|
These must be used from an elevated command line prompt.
|
||||||
|
|
||||||
|
## How to manually remove wufuc v0.8.0.143 when it is impossible to uninstall it normally
|
||||||
|
|
||||||
|
This only applies to wufuc version 0.8.0.143, which was only available for download for a short period of time. Other versions are unaffected.
|
||||||
|
|
||||||
|
1. [Boot into Safe Mode with Command Prompt](https://support.microsoft.com/en-us/help/17419/windows-7-advanced-startup-options-safe-mode).
|
||||||
|
2. In the command prompt type `regedit` and press enter.
|
||||||
|
3. Navigate to the key `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options`
|
||||||
|
4. Expand the `Image File Execution Options` tree.
|
||||||
|
5. Locate the `svchost.exe` sub key, right-click it and press **Delete**.
|
||||||
|
6. Reboot, and you should be able to log in normally again.
|
||||||
|
7. Open Add and Remove Programs, locate and run the normal wufuc uninstaller to complete the removal process.
|
52
README.md
52
README.md
@@ -11,7 +11,7 @@ Disables the "Unsupported Hardware" message in Windows Update, and allows you to
|
|||||||
|
|
||||||
[Unstable builds][AppVeyor] - Probably contains bugs; do not report issues with these builds.
|
[Unstable builds][AppVeyor] - Probably contains bugs; do not report issues with these builds.
|
||||||
|
|
||||||
## Donate
|
## Donate :heart:
|
||||||
|
|
||||||
[**Click here for donation options!**](https://github.com/zeffy/wufuc/blob/master/DONATE.md)
|
[**Click here for donation options!**](https://github.com/zeffy/wufuc/blob/master/DONATE.md)
|
||||||
|
|
||||||
@@ -24,9 +24,7 @@ The release notes for Windows updates KB4012218 and KB4012219 included the follo
|
|||||||
These updates marked the implementation of a [policy change](https://blogs.windows.com/windowsexperience/2016/01/15/windows-10-embracing-silicon-innovation/) they announced some time ago, where Microsoft stated that they would not be supporting Windows 7 or 8.1 on next-gen Intel, AMD and Qualcomm processors.
|
These updates marked the implementation of a [policy change](https://blogs.windows.com/windowsexperience/2016/01/15/windows-10-embracing-silicon-innovation/) they announced some time ago, where Microsoft stated that they would not be supporting Windows 7 or 8.1 on next-gen Intel, AMD and Qualcomm processors.
|
||||||
This was essentially a big middle finger to anyone who decides to not "upgrade" to the steaming pile of :shit: known as Windows 10, especially considering the extended support periods for Windows 7 and 8.1 won't be ending until January 4, 2020 and January 10, 2023 respectively.
|
This was essentially a big middle finger to anyone who decides to not "upgrade" to the steaming pile of :shit: known as Windows 10, especially considering the extended support periods for Windows 7 and 8.1 won't be ending until January 4, 2020 and January 10, 2023 respectively.
|
||||||
|
|
||||||
## Some people with older Intel and AMD processors are also affected!
|
Some people with older Intel and AMD processors are also affected! I've received user reports of the following CPUs all being blocked from receiving updates:
|
||||||
|
|
||||||
I've received user reports of the following CPUs all being blocked from receiving updates:
|
|
||||||
|
|
||||||
- [Intel Atom Z530](https://github.com/zeffy/wufuc/issues/7)
|
- [Intel Atom Z530](https://github.com/zeffy/wufuc/issues/7)
|
||||||
- [Intel Atom D525](https://github.com/zeffy/wufuc/issues/34)
|
- [Intel Atom D525](https://github.com/zeffy/wufuc/issues/34)
|
||||||
@@ -38,7 +36,10 @@ I've received user reports of the following CPUs all being blocked from receivin
|
|||||||
|
|
||||||
## Bad Microsoft!
|
## Bad Microsoft!
|
||||||
|
|
||||||
If you are interested, you can read my original write up on discovering the CPU check [here](https://github.com/zeffy/wufuc/tree/old-kb4012218-19).
|
If you are interested, you can read my original write-up on discovering the CPU check [here](https://github.com/zeffy/wufuc/tree/old-kb4012218-19).
|
||||||
|
|
||||||
|
Basically, inside a system file named `wuaueng.dll`, there are two functions responsible for the CPU check: `IsDeviceServiceable(void)` and `IsCPUSupported(void)`.
|
||||||
|
`IsDeviceServiceable` simply calls `IsCPUSupported` once, and then re-uses the result that it receives on subsequent calls.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
@@ -49,51 +50,22 @@ If you are interested, you can read my original write up on discovering the CPU
|
|||||||
- Byte pattern-based patching, which means it will usually keep working even after new updates come out.
|
- Byte pattern-based patching, which means it will usually keep working even after new updates come out.
|
||||||
- No dependencies.
|
- No dependencies.
|
||||||
|
|
||||||
|
## Frequently Asked Questions
|
||||||
|
|
||||||
|
See [FAQ.md](https://github.com/zeffy/wufuc/blob/master/FAQ.md).
|
||||||
|
|
||||||
## How it works
|
## How it works
|
||||||
|
|
||||||
Basically, inside a system file called `wuaueng.dll` there are two functions responsible for the CPU check: `IsDeviceServiceable(void)` and `IsCPUSupported(void)`.
|
This is a basic run-down of what wufuc does when you install it:
|
||||||
`IsDeviceServiceable` simply calls `IsCPUSupported` once, and then re-uses the result that it receives on subsequent calls.
|
|
||||||
My patch takes advantage of this behavior by patching a couple of boolean values and basically making Windows Update think that it has already checked your processor, and the result was that it is indeed supported.
|
|
||||||
|
|
||||||
- The installer registers a scheduled task that automatically starts wufuc on system boot/user log on.
|
- The installer registers a scheduled task that automatically starts wufuc on system boot/user log on.
|
||||||
- Depending on how the Windows Update service is configured to run, wufuc will:
|
- Depending on how the Windows Update service is configured to run, wufuc will:
|
||||||
* **Shared process**: inject itself into the service host process that Windows Update will run in when it starts.
|
* **Shared process**: inject itself into the service host process that Windows Update will run in when it starts.
|
||||||
* **Own process**: wait for the Windows Update service to start and then inject into it.
|
* **Own process**: wait for the Windows Update service to start and then inject into it.
|
||||||
- After that, wufuc will install some API hooks when appropriate:
|
- Once injected, wufuc will hook some functions where appropriate:
|
||||||
* `LoadLibraryExW` hook will automatically hook the `IsDeviceServiceable()` function inside `wuaueng.dll` when it is loaded.
|
* `LoadLibraryExW` hook will automatically hook the `IsDeviceServiceable()` function inside `wuaueng.dll` when it is loaded.
|
||||||
* `RegQueryValueExW` hook is necessary to provide compatibility with [UpdatePack7R2](../../issues/100). This hook not applied when `wuauserv` is configured to run in its own process.
|
* `RegQueryValueExW` hook is necessary to provide compatibility with [UpdatePack7R2](../../issues/100). This hook not applied when `wuauserv` is configured to run in its own process.
|
||||||
|
|
||||||
## FAQ
|
|
||||||
|
|
||||||
### How to deploy wufuc using Group Policy
|
|
||||||
|
|
||||||
[There is a tutorial on the Advanced Installer website that explains how to do this](http://www.advancedinstaller.com/user-guide/tutorial-gpo.html).
|
|
||||||
|
|
||||||
### How to use unattended feature in the batch setup scripts
|
|
||||||
|
|
||||||
`install_wufuc.bat` and `uninstall_wufuc.bat` both support two command line parameters that can be used alone, or combined to change the behavior of the scripts:
|
|
||||||
|
|
||||||
- `/NORESTART` - Automatically declines rebooting after the setup finishes.
|
|
||||||
- `/UNATTENDED` - Skips all prompts for user interaction, and automatically restarts unless `/NORESTART` is also specified.
|
|
||||||
|
|
||||||
These must be used from an elevated command line prompt.
|
|
||||||
|
|
||||||
### How to manually remove wufuc v0.8.0.x when it is impossible to uninstall it normally
|
|
||||||
|
|
||||||
This only applies to wufuc version 0.8.0.x, which was only available for download for a short period of time. Other versions are unaffected.
|
|
||||||
|
|
||||||
There was a fundamental issue with the method I tried using in this version that caused very serious system instability, such as User Account Control breaking, getting a black screen with just a cursor at boot or after logging out, or very slow overall system performance from multiple services crashing repeatedly which would eventually end in a blue screen of death. Many of these issues unfortunately made uninstalling wufuc nearly impossible. I apologize for any inconvenience this version of wufuc may have caused.
|
|
||||||
|
|
||||||
#### To manually uninstall wufuc v0.8.0.x:
|
|
||||||
|
|
||||||
1. [Boot into Safe Mode with Command Prompt](https://support.microsoft.com/en-us/help/17419/windows-7-advanced-startup-options-safe-mode).
|
|
||||||
2. In the command prompt type `regedit` and press enter.
|
|
||||||
3. Navigate to the key `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options`
|
|
||||||
4. Expand the `Image File Execution Options` tree.
|
|
||||||
5. Locate the `svchost.exe` sub key, right-click it and press **Delete**.
|
|
||||||
6. Reboot, and you should be able to log in normally again.
|
|
||||||
7. Open Add and Remove Programs, locate and run the normal wufuc uninstaller to complete the removal process.
|
|
||||||
|
|
||||||
## Sponsors
|
## Sponsors
|
||||||
|
|
||||||
### [Advanced Installer](https://www.advancedinstaller.com/)
|
### [Advanced Installer](https://www.advancedinstaller.com/)
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio 15
|
||||||
VisualStudioVersion = 15.0.27130.2024
|
VisualStudioVersion = 15.0.27130.2036
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wufuc", "wufuc\wufuc.vcxproj", "{00F96695-CE41-4C2F-A344-6219DFB4F887}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wufuc", "wufuc\wufuc.vcxproj", "{00F96695-CE41-4C2F-A344-6219DFB4F887}"
|
||||||
EndProject
|
EndProject
|
||||||
@@ -13,6 +13,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wufuc_setup_bat", "wufuc_se
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AdvancedInstallerHelper", "AdvancedInstallerHelper\AdvancedInstallerHelper.vcxproj", "{12498D61-02AF-4C13-925D-E130EEDE2543}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AdvancedInstallerHelper", "AdvancedInstallerHelper\AdvancedInstallerHelper.vcxproj", "{12498D61-02AF-4C13-925D-E130EEDE2543}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Repository Items", "Repository Items", "{E7EDB493-4D31-4646-8537-C515613689A6}"
|
||||||
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
..\.gitignore = ..\.gitignore
|
||||||
|
..\appveyor.yml = ..\appveyor.yml
|
||||||
|
..\COPYING = ..\COPYING
|
||||||
|
..\DONATE.md = ..\DONATE.md
|
||||||
|
..\README.md = ..\README.md
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{ACE23C8E-C137-4B93-9147-DCF126E1248E}"
|
||||||
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
..\.github\ISSUE_TEMPLATE.md = ..\.github\ISSUE_TEMPLATE.md
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|x64 = Debug|x64
|
Debug|x64 = Debug|x64
|
||||||
@@ -39,6 +53,9 @@ Global
|
|||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{ACE23C8E-C137-4B93-9147-DCF126E1248E} = {E7EDB493-4D31-4646-8537-C515613689A6}
|
||||||
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {5070ABC4-3344-4D6E-B744-E3508B10A327}
|
SolutionGuid = {5070ABC4-3344-4D6E-B744-E3508B10A327}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
#include "callbacks.h"
|
#include "callbacks.h"
|
||||||
#include "hooks.h"
|
#include "hooks.h"
|
||||||
@@ -89,7 +88,13 @@ DWORD WINAPI cb_start(context *ctx)
|
|||||||
str = (wchar_t *)reg_query_value_alloc(HKEY_LOCAL_MACHINE,
|
str = (wchar_t *)reg_query_value_alloc(HKEY_LOCAL_MACHINE,
|
||||||
L"SYSTEM\\CurrentControlSet\\services\\wuauserv\\Parameters",
|
L"SYSTEM\\CurrentControlSet\\services\\wuauserv\\Parameters",
|
||||||
L"ServiceDll", NULL, NULL);
|
L"ServiceDll", NULL, NULL);
|
||||||
|
if ( !str ) {
|
||||||
|
abort_hook:
|
||||||
|
MH_RemoveHook(g_pfnRegQueryValueExW);
|
||||||
|
goto release;
|
||||||
|
}
|
||||||
g_pszWUServiceDll = env_expand_strings_alloc(str, NULL);
|
g_pszWUServiceDll = env_expand_strings_alloc(str, NULL);
|
||||||
|
if ( !g_pszWUServiceDll ) goto abort_hook;
|
||||||
free(str);
|
free(str);
|
||||||
|
|
||||||
MH_CreateHookApi(L"kernel32.dll",
|
MH_CreateHookApi(L"kernel32.dll",
|
||||||
@@ -97,9 +102,8 @@ DWORD WINAPI cb_start(context *ctx)
|
|||||||
LoadLibraryExW_hook,
|
LoadLibraryExW_hook,
|
||||||
&(PVOID)g_pfnLoadLibraryExW);
|
&(PVOID)g_pfnLoadLibraryExW);
|
||||||
|
|
||||||
if ( g_pszWUServiceDll
|
if ( GetModuleHandleExW(0, g_pszWUServiceDll, &hModule)
|
||||||
&& (GetModuleHandleExW(0, g_pszWUServiceDll, &hModule)
|
|| GetModuleHandleExW(0, PathFindFileNameW(g_pszWUServiceDll), &hModule) ) {
|
||||||
|| GetModuleHandleExW(0, PathFindFileNameW(g_pszWUServiceDll), &hModule))) {
|
|
||||||
|
|
||||||
// hook IsDeviceServiceable if wuaueng.dll is already loaded
|
// hook IsDeviceServiceable if wuaueng.dll is already loaded
|
||||||
wufuc_hook(hModule);
|
wufuc_hook(hModule);
|
||||||
@@ -110,7 +114,7 @@ DWORD WINAPI cb_start(context *ctx)
|
|||||||
|
|
||||||
// wait for unload event or parent mutex to be abandoned.
|
// wait for unload event or parent mutex to be abandoned.
|
||||||
// for example if the user killed rundll32.exe with task manager.
|
// for example if the user killed rundll32.exe with task manager.
|
||||||
result = WaitForMultipleObjects(_countof(ctx->handles), ctx->handles, FALSE, INFINITE);
|
result = WaitForMultipleObjects(ctx->count, ctx->handles, FALSE, INFINITE);
|
||||||
trace(L"Unload condition has been met.");
|
trace(L"Unload condition has been met.");
|
||||||
|
|
||||||
switch ( result ) {
|
switch ( result ) {
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
|
|
||||||
#include <sddl.h>
|
#include <sddl.h>
|
||||||
|
|
||||||
static bool ctxp_remove_handle(context *ctx, unsigned Index)
|
static bool ctxp_remove_handle(context *ctx, unsigned Index)
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
|
||||||
#include <minhook.h>
|
#include <minhook.h>
|
||||||
|
|
||||||
BOOL APIENTRY DllMain(HMODULE hModule,
|
BOOL APIENTRY DllMain(HMODULE hModule,
|
||||||
|
@@ -1,9 +1,8 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
#include "context.h"
|
||||||
#include "hooks.h"
|
#include "hooks.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "registryhelper.h"
|
#include "registryhelper.h"
|
||||||
#include "context.h"
|
|
||||||
#include "wufuc.h"
|
#include "wufuc.h"
|
||||||
|
|
||||||
wchar_t *g_pszWUServiceDll;
|
wchar_t *g_pszWUServiceDll;
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
void logp_debug_write(const wchar_t *const format, ...)
|
void logp_debug_write(const wchar_t *const format, ...)
|
||||||
|
@@ -144,7 +144,7 @@ void patternwrite(uint8_t *data, size_t datasize, const char *pattern)
|
|||||||
|
|
||||||
if ( patterntransform(pattern, writepattern, writepatternsize) ) {
|
if ( patterntransform(pattern, writepattern, writepatternsize) ) {
|
||||||
DWORD OldProtect;
|
DWORD OldProtect;
|
||||||
BOOL result = VirtualProtect(data, writepatternsize, PAGE_READWRITE, &OldProtect);
|
BOOL result = VirtualProtect(data, writepatternsize, PAGE_EXECUTE_READWRITE, &OldProtect);
|
||||||
if ( writepatternsize > datasize )
|
if ( writepatternsize > datasize )
|
||||||
writepatternsize = datasize;
|
writepatternsize = datasize;
|
||||||
for ( size_t i = 0; i < writepatternsize; i++ )
|
for ( size_t i = 0; i < writepatternsize; i++ )
|
||||||
|
@@ -1,11 +1,10 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "registryhelper.h"
|
#include "registryhelper.h"
|
||||||
#include <sddl.h>
|
|
||||||
|
|
||||||
PVOID reg_get_value_alloc(
|
PVOID reg_get_value_alloc(
|
||||||
HKEY hKey,
|
HKEY hKey,
|
||||||
const wchar_t *SubKey,
|
LPCWSTR SubKey,
|
||||||
const wchar_t *Value,
|
LPCWSTR Value,
|
||||||
DWORD dwFlags,
|
DWORD dwFlags,
|
||||||
LPDWORD pdwType,
|
LPDWORD pdwType,
|
||||||
LPDWORD pcbData)
|
LPDWORD pcbData)
|
||||||
@@ -31,8 +30,8 @@ PVOID reg_get_value_alloc(
|
|||||||
|
|
||||||
LPBYTE reg_query_value_alloc(
|
LPBYTE reg_query_value_alloc(
|
||||||
HKEY hKey,
|
HKEY hKey,
|
||||||
const wchar_t *SubKey,
|
LPCWSTR SubKey,
|
||||||
const wchar_t *Value,
|
LPCWSTR Value,
|
||||||
LPDWORD pdwType,
|
LPDWORD pdwType,
|
||||||
LPDWORD pcbData)
|
LPDWORD pcbData)
|
||||||
{
|
{
|
||||||
@@ -100,15 +99,15 @@ PVOID reg_query_key_alloc(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
wchar_t *env_expand_strings_alloc(const wchar_t *src, LPDWORD pcchLength)
|
LPWSTR env_expand_strings_alloc(LPCWSTR Src, LPDWORD pcchLength)
|
||||||
{
|
{
|
||||||
wchar_t *result;
|
LPWSTR result;
|
||||||
DWORD buffersize;
|
DWORD buffersize;
|
||||||
DWORD size;
|
DWORD size;
|
||||||
|
|
||||||
buffersize = ExpandEnvironmentStringsW(src, NULL, 0);
|
buffersize = ExpandEnvironmentStringsW(Src, NULL, 0);
|
||||||
result = calloc(buffersize, sizeof *result);
|
result = calloc(buffersize, sizeof *result);
|
||||||
size = ExpandEnvironmentStringsW(src, result, buffersize);
|
size = ExpandEnvironmentStringsW(Src, result, buffersize);
|
||||||
if ( !size || size > buffersize ) {
|
if ( !size || size > buffersize ) {
|
||||||
free(result);
|
free(result);
|
||||||
result = NULL;
|
result = NULL;
|
||||||
|
@@ -2,19 +2,19 @@
|
|||||||
|
|
||||||
PVOID reg_get_value_alloc(
|
PVOID reg_get_value_alloc(
|
||||||
HKEY hkey,
|
HKEY hkey,
|
||||||
const wchar_t *pSubKey,
|
LPCWSTR pSubKey,
|
||||||
const wchar_t *pValue,
|
LPCWSTR pValue,
|
||||||
DWORD dwFlags,
|
DWORD dwFlags,
|
||||||
LPDWORD pdwType,
|
LPDWORD pdwType,
|
||||||
LPDWORD pcbData);
|
LPDWORD pcbData);
|
||||||
LPBYTE reg_query_value_alloc(
|
LPBYTE reg_query_value_alloc(
|
||||||
HKEY hKey,
|
HKEY hKey,
|
||||||
const wchar_t *pSubKey,
|
LPCWSTR pSubKey,
|
||||||
const wchar_t *pValueName,
|
LPCWSTR pValueName,
|
||||||
LPDWORD pType,
|
LPDWORD pType,
|
||||||
LPDWORD pcbData);
|
LPDWORD pcbData);
|
||||||
PVOID reg_query_key_alloc(
|
PVOID reg_query_key_alloc(
|
||||||
HANDLE KeyHandle,
|
HANDLE KeyHandle,
|
||||||
KEY_INFORMATION_CLASS KeyInformationClass,
|
KEY_INFORMATION_CLASS KeyInformationClass,
|
||||||
PULONG pResultLength);
|
PULONG pResultLength);
|
||||||
wchar_t *env_expand_strings_alloc(const wchar_t *src, LPDWORD pcchLength);
|
LPWSTR env_expand_strings_alloc(LPCWSTR Src, LPDWORD pcchLength);
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
#include "callbacks.h"
|
#include "callbacks.h"
|
||||||
|
#include "log.h"
|
||||||
#include "modulehelper.h"
|
#include "modulehelper.h"
|
||||||
#include "registryhelper.h"
|
#include "registryhelper.h"
|
||||||
#include "servicehelper.h"
|
#include "servicehelper.h"
|
||||||
#include "log.h"
|
|
||||||
#include "wufuc.h"
|
#include "wufuc.h"
|
||||||
|
|
||||||
void CALLBACK RUNDLL32_StartW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow)
|
void CALLBACK RUNDLL32_StartW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow)
|
||||||
|
@@ -1,12 +1,11 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
#include "wufuc.h"
|
#include "wufuc.h"
|
||||||
#include "modulehelper.h"
|
|
||||||
#include "versionhelper.h"
|
|
||||||
#include "hooks.h"
|
#include "hooks.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
#include "modulehelper.h"
|
||||||
#include "patternfind.h"
|
#include "patternfind.h"
|
||||||
|
#include "versionhelper.h"
|
||||||
|
|
||||||
#include <minhook.h>
|
#include <minhook.h>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user