Compare commits
2 Commits
master
...
feature/ta
Author | SHA1 | Date | |
---|---|---|---|
1b28624336 | |||
3ce5a09aa2
|
@ -79,6 +79,12 @@ HRESULT dns_platform_hook_init(const struct dns_config *cfg)
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hr = dns_hook_push(L"stable.garm.nbgi-amnet.jp", cfg->startup);
|
||||||
|
|
||||||
|
if (FAILED(hr)) {
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
// if your ISP resolves bad domains, it will kill the network. These 2
|
// if your ISP resolves bad domains, it will kill the network. These 2
|
||||||
// *cannot* resolve
|
// *cannot* resolve
|
||||||
|
|
||||||
|
@ -7,11 +7,12 @@
|
|||||||
|
|
||||||
#include "hook/table.h"
|
#include "hook/table.h"
|
||||||
#include "hook/iohook.h"
|
#include "hook/iohook.h"
|
||||||
|
#include "hook/procaddr.h"
|
||||||
#include "hooklib/setupapi.h"
|
#include "hooklib/setupapi.h"
|
||||||
|
|
||||||
#include "util/dprintf.h"
|
#include "util/dprintf.h"
|
||||||
#include "util/str.h"
|
#include "util/str.h"
|
||||||
#include "es3sec.h"
|
#include "platform/es3sec.h"
|
||||||
|
|
||||||
#define DONGLE_STR_IDX_MANUFACTURER 1
|
#define DONGLE_STR_IDX_MANUFACTURER 1
|
||||||
#define DONGLE_STR_IDX_PRODUCT 2
|
#define DONGLE_STR_IDX_PRODUCT 2
|
||||||
@ -50,6 +51,35 @@ static HRESULT es3sec_hub_get_string_descriptor(struct irp *irp, PUSB_DESCRIPTOR
|
|||||||
static CONFIGRET my_CM_Get_Child(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags);
|
static CONFIGRET my_CM_Get_Child(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags);
|
||||||
static CONFIGRET (*next_CM_Get_Child)(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags);
|
static CONFIGRET (*next_CM_Get_Child)(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags);
|
||||||
|
|
||||||
|
static CONFIGRET my_CM_Get_Parent(
|
||||||
|
PDEVINST pdnDevInst,
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulFlags
|
||||||
|
);
|
||||||
|
|
||||||
|
static CONFIGRET (*next_CM_Get_Parent)(
|
||||||
|
PDEVINST pdnDevInst,
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulFlags
|
||||||
|
);
|
||||||
|
|
||||||
|
static CONFIGRET my_CM_Get_DevNode_Registry_PropertyA(
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulProperty,
|
||||||
|
PULONG pulRegDataType,
|
||||||
|
PVOID Buffer,
|
||||||
|
PULONG pulLength,
|
||||||
|
ULONG ulFlags
|
||||||
|
);
|
||||||
|
static CONFIGRET (*next_CM_Get_DevNode_Registry_PropertyA)(
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulProperty,
|
||||||
|
PULONG pulRegDataType,
|
||||||
|
PVOID Buffer,
|
||||||
|
PULONG pulLength,
|
||||||
|
ULONG ulFlags
|
||||||
|
);
|
||||||
|
|
||||||
static CONFIGRET my_CM_Get_DevNode_Registry_PropertyW(
|
static CONFIGRET my_CM_Get_DevNode_Registry_PropertyW(
|
||||||
DEVINST dnDevInst,
|
DEVINST dnDevInst,
|
||||||
ULONG ulProperty,
|
ULONG ulProperty,
|
||||||
@ -67,17 +97,73 @@ static CONFIGRET (*next_CM_Get_DevNode_Registry_PropertyW)(
|
|||||||
ULONG ulFlags
|
ULONG ulFlags
|
||||||
);
|
);
|
||||||
|
|
||||||
|
static CONFIGRET my_CM_Get_DevNode_Status(
|
||||||
|
PULONG pulStatus,
|
||||||
|
PULONG pulProblemNumber,
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulFlags
|
||||||
|
);
|
||||||
|
|
||||||
|
static CONFIGRET (*next_CM_Get_DevNode_Status)(
|
||||||
|
PULONG pulStatus,
|
||||||
|
PULONG pulProblemNumber,
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulFlags
|
||||||
|
);
|
||||||
|
|
||||||
|
static CONFIGRET my_CM_Get_Device_IDA(
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
PSTR Buffer,
|
||||||
|
ULONG BufferLen,
|
||||||
|
ULONG ulFlags
|
||||||
|
);
|
||||||
|
|
||||||
|
static CONFIGRET (*next_CM_Get_Device_IDA)(
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
PSTR Buffer,
|
||||||
|
ULONG BufferLen,
|
||||||
|
ULONG ulFlags
|
||||||
|
);
|
||||||
|
|
||||||
|
static CONFIGRET my_CM_Get_Device_ID_Size(
|
||||||
|
PULONG pulLen,
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulFlags
|
||||||
|
);
|
||||||
|
|
||||||
|
static CONFIGRET (*next_CM_Get_Device_ID_Size)(
|
||||||
|
PULONG pulLen,
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulFlags
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
static const struct hook_symbol cm_syms[] = {
|
static const struct hook_symbol cm_syms[] = {
|
||||||
{
|
{
|
||||||
|
.name = "CM_Get_DevNode_Registry_PropertyA",
|
||||||
|
.patch = my_CM_Get_DevNode_Registry_PropertyA,
|
||||||
|
.link = (void **) &next_CM_Get_DevNode_Registry_PropertyA
|
||||||
|
}, {
|
||||||
.name = "CM_Get_DevNode_Registry_PropertyW",
|
.name = "CM_Get_DevNode_Registry_PropertyW",
|
||||||
.patch = my_CM_Get_DevNode_Registry_PropertyW,
|
.patch = my_CM_Get_DevNode_Registry_PropertyW,
|
||||||
.link = (void **) &next_CM_Get_DevNode_Registry_PropertyW
|
.link = (void **) &next_CM_Get_DevNode_Registry_PropertyW
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
.name = "CM_Get_Child",
|
.name = "CM_Get_Child",
|
||||||
.patch = my_CM_Get_Child,
|
.patch = my_CM_Get_Child,
|
||||||
.link = (void **) &next_CM_Get_Child
|
.link = (void **) &next_CM_Get_Child
|
||||||
},
|
}, {
|
||||||
|
.name = "CM_Get_Parent",
|
||||||
|
.patch = my_CM_Get_Parent,
|
||||||
|
.link = (void **) &next_CM_Get_Parent
|
||||||
|
}, {
|
||||||
|
.name = "CM_Get_DevNode_Status",
|
||||||
|
.patch = my_CM_Get_DevNode_Status,
|
||||||
|
.link = (void **) &next_CM_Get_DevNode_Status
|
||||||
|
}, {
|
||||||
|
.name = "CM_Get_Device_IDA",
|
||||||
|
.patch = my_CM_Get_Device_IDA,
|
||||||
|
.link = (void **) &next_CM_Get_Device_IDA
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
HRESULT es3sec_hook_init(
|
HRESULT es3sec_hook_init(
|
||||||
@ -110,7 +196,9 @@ HRESULT es3sec_hook_init(
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
hook_table_apply(NULL, "setupapi.dll", cm_syms, _countof(cm_syms));
|
es3sec_insert_hooks(NULL);
|
||||||
|
//hook_table_apply(NULL, "setupapi.dll", cm_syms, _countof(cm_syms));
|
||||||
|
proc_addr_table_push(NULL, "setupapi.dll", cm_syms, _countof(cm_syms));
|
||||||
|
|
||||||
CM_Locate_DevNodeW(&root_dev_inst, NULL, CM_LOCATE_DEVNODE_NORMAL);
|
CM_Locate_DevNodeW(&root_dev_inst, NULL, CM_LOCATE_DEVNODE_NORMAL);
|
||||||
|
|
||||||
@ -130,6 +218,14 @@ HRESULT es3sec_hook_init(
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void es3sec_insert_hooks(HMODULE target) {
|
||||||
|
hook_table_apply(
|
||||||
|
target,
|
||||||
|
"setupapi.dll",
|
||||||
|
cm_syms,
|
||||||
|
_countof(cm_syms));
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT es3sec_handle_hub_irp(struct irp *irp)
|
static HRESULT es3sec_handle_hub_irp(struct irp *irp)
|
||||||
{
|
{
|
||||||
assert(irp != NULL);
|
assert(irp != NULL);
|
||||||
@ -247,6 +343,8 @@ static HRESULT es3sec_hub_handle_roothub(struct irp *irp)
|
|||||||
size_t size_of_hub_name = sizeof(DEVNAME_HUB);
|
size_t size_of_hub_name = sizeof(DEVNAME_HUB);
|
||||||
ULONG actual_length = size_of_hub_name + sizeof(USB_ROOT_HUB_NAME);
|
ULONG actual_length = size_of_hub_name + sizeof(USB_ROOT_HUB_NAME);
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
|
dprintf("ES3 Dongle: Request root hub\n");
|
||||||
|
|
||||||
if (irp->read.nbytes == sizeof(USB_ROOT_HUB_NAME)) { // Root hub name size
|
if (irp->read.nbytes == sizeof(USB_ROOT_HUB_NAME)) { // Root hub name size
|
||||||
USB_ROOT_HUB_NAME rhub;
|
USB_ROOT_HUB_NAME rhub;
|
||||||
@ -489,6 +587,19 @@ static HRESULT es3sec_hub_connection_driver_key_name(struct irp *irp)
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CONFIGRET my_CM_Get_DevNode_Registry_PropertyA(
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulProperty,
|
||||||
|
PULONG pulRegDataType,
|
||||||
|
PVOID Buffer,
|
||||||
|
PULONG pulLength,
|
||||||
|
ULONG ulFlags)
|
||||||
|
{
|
||||||
|
dprintf("ES3 Dongle: my_CM_Get_DevNode_Registry_PropertyA\n");
|
||||||
|
return next_CM_Get_DevNode_Registry_PropertyA(dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags);
|
||||||
|
// return my_CM_Get_DevNode_Registry_PropertyW(dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags);
|
||||||
|
}
|
||||||
|
|
||||||
static CONFIGRET my_CM_Get_DevNode_Registry_PropertyW(
|
static CONFIGRET my_CM_Get_DevNode_Registry_PropertyW(
|
||||||
DEVINST dnDevInst,
|
DEVINST dnDevInst,
|
||||||
ULONG ulProperty,
|
ULONG ulProperty,
|
||||||
@ -497,6 +608,8 @@ static CONFIGRET my_CM_Get_DevNode_Registry_PropertyW(
|
|||||||
PULONG pulLength,
|
PULONG pulLength,
|
||||||
ULONG ulFlags)
|
ULONG ulFlags)
|
||||||
{
|
{
|
||||||
|
dprintf("ES3 Dongle: my_CM_Get_DevNode_Registry_PropertyW\n");
|
||||||
|
|
||||||
CONFIGRET cr = next_CM_Get_DevNode_Registry_PropertyW(dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags);
|
CONFIGRET cr = next_CM_Get_DevNode_Registry_PropertyW(dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags);
|
||||||
if (dnDevInst != HUB_DEVINST)
|
if (dnDevInst != HUB_DEVINST)
|
||||||
{
|
{
|
||||||
@ -525,6 +638,8 @@ static CONFIGRET my_CM_Get_DevNode_Registry_PropertyW(
|
|||||||
|
|
||||||
static CONFIGRET my_CM_Get_Child(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags)
|
static CONFIGRET my_CM_Get_Child(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags)
|
||||||
{
|
{
|
||||||
|
dprintf("ES3 Dongle: my_CM_Get_Child\n");
|
||||||
|
|
||||||
if (dnDevInst != root_dev_inst)
|
if (dnDevInst != root_dev_inst)
|
||||||
{
|
{
|
||||||
return next_CM_Get_Child(pdnDevInst, dnDevInst, ulFlags);
|
return next_CM_Get_Child(pdnDevInst, dnDevInst, ulFlags);
|
||||||
@ -533,3 +648,74 @@ static CONFIGRET my_CM_Get_Child(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG u
|
|||||||
*pdnDevInst = HUB_DEVINST;
|
*pdnDevInst = HUB_DEVINST;
|
||||||
return CR_SUCCESS;
|
return CR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CONFIGRET my_CM_Get_Parent(
|
||||||
|
PDEVINST pdnDevInst,
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulFlags
|
||||||
|
)
|
||||||
|
{
|
||||||
|
dprintf("ES3 Dongle: my_CM_Get_Parent\n");
|
||||||
|
|
||||||
|
if (dnDevInst != HUB_DEVINST)
|
||||||
|
{
|
||||||
|
return next_CM_Get_Parent(pdnDevInst, dnDevInst, ulFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
*pdnDevInst = root_dev_inst;
|
||||||
|
return CR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static CONFIGRET my_CM_Get_DevNode_Status(
|
||||||
|
PULONG pulStatus,
|
||||||
|
PULONG pulProblemNumber,
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulFlags
|
||||||
|
)
|
||||||
|
{
|
||||||
|
dprintf("ES3 Dongle: my_CM_Get_DevNode_Status\n");
|
||||||
|
|
||||||
|
if (dnDevInst != HUB_DEVINST)
|
||||||
|
{
|
||||||
|
return next_CM_Get_DevNode_Status(pulStatus, pulProblemNumber, dnDevInst, ulFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
*pulStatus = DN_DRIVER_LOADED;
|
||||||
|
*pulProblemNumber = 0;
|
||||||
|
return CR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static CONFIGRET my_CM_Get_Device_IDA(
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
PSTR Buffer,
|
||||||
|
ULONG BufferLen,
|
||||||
|
ULONG ulFlags
|
||||||
|
)
|
||||||
|
{
|
||||||
|
dprintf("ES3 Dongle: my_CM_Get_Device_IDA\n");
|
||||||
|
|
||||||
|
if (dnDevInst != HUB_DEVINST)
|
||||||
|
{
|
||||||
|
return next_CM_Get_Device_IDA(dnDevInst, Buffer, BufferLen, ulFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy_s(Buffer, BufferLen, "USB\\ROOT_HUB");
|
||||||
|
return CR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static CONFIGRET my_CM_Get_Device_ID_Size(
|
||||||
|
PULONG pulLen,
|
||||||
|
DEVINST dnDevInst,
|
||||||
|
ULONG ulFlags
|
||||||
|
)
|
||||||
|
{
|
||||||
|
dprintf("ES3 Dongle: my_CM_Get_Device_ID_Size\n");
|
||||||
|
|
||||||
|
if (dnDevInst != HUB_DEVINST)
|
||||||
|
{
|
||||||
|
return next_CM_Get_Device_ID_Size(pulLen, dnDevInst, ulFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
*pulLen = 11;
|
||||||
|
return CR_SUCCESS;
|
||||||
|
}
|
||||||
|
@ -13,3 +13,5 @@ HRESULT es3sec_hook_init(
|
|||||||
USHORT pid,
|
USHORT pid,
|
||||||
const wchar_t *manufacturer,
|
const wchar_t *manufacturer,
|
||||||
const wchar_t *product);
|
const wchar_t *product);
|
||||||
|
|
||||||
|
void es3sec_insert_hooks(HMODULE target);
|
||||||
|
139
taikohook/amfw.c
139
taikohook/amfw.c
@ -1,9 +1,16 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include "taikohook/config.h"
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "platform/es3sec.h"
|
||||||
|
|
||||||
#include "hook/table.h"
|
#include "hook/table.h"
|
||||||
|
#include "hook/iohook.h"
|
||||||
|
|
||||||
|
#include "hooklib/dll.h"
|
||||||
#include "hooklib/path.h"
|
#include "hooklib/path.h"
|
||||||
|
#include "hooklib/setupapi.h"
|
||||||
|
#include "hooklib/serial.h"
|
||||||
|
#include "hook/procaddr.h"
|
||||||
|
|
||||||
#include "util/dprintf.h"
|
#include "util/dprintf.h"
|
||||||
|
|
||||||
@ -15,12 +22,41 @@
|
|||||||
* that AMFW uses and let it talk to the game for us.
|
* that AMFW uses and let it talk to the game for us.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
HRESULT amfw_hook_init(wchar_t serial[13])
|
static const wchar_t *target_modules[] = {
|
||||||
|
L"nbamUsbfinder.dll",
|
||||||
|
L"bngrw.dll",
|
||||||
|
};
|
||||||
|
|
||||||
|
static const size_t target_modules_len = _countof(target_modules);
|
||||||
|
|
||||||
|
static void dll_hook_insert_hooks(HMODULE target);
|
||||||
|
|
||||||
|
static HMODULE WINAPI hook_LoadLibraryA(const char *name);
|
||||||
|
static HMODULE (WINAPI *next_LoadLibraryA)(const char *name);
|
||||||
|
|
||||||
|
static HMODULE WINAPI hook_LoadLibraryW(const wchar_t *name);
|
||||||
|
static HMODULE (WINAPI *next_LoadLibraryW)(const wchar_t *name);
|
||||||
|
|
||||||
|
static const struct hook_symbol kernel32_syms[] = {
|
||||||
|
{
|
||||||
|
.name = "LoadLibraryA",
|
||||||
|
.patch = hook_LoadLibraryA,
|
||||||
|
.link = (void **) &next_LoadLibraryA,
|
||||||
|
}, {
|
||||||
|
.name = "LoadLibraryW",
|
||||||
|
.patch = hook_LoadLibraryW,
|
||||||
|
.link = (void **) &next_LoadLibraryW,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
HRESULT amfw_hook_init()
|
||||||
{
|
{
|
||||||
HANDLE hMod;
|
HANDLE hMod;
|
||||||
|
|
||||||
dprintf("AMFW: Init\n");
|
dprintf("AMFW: Init\n");
|
||||||
|
|
||||||
|
dll_hook_insert_hooks(NULL);
|
||||||
|
|
||||||
hMod = GetModuleHandle("AMFrameWork.dll");
|
hMod = GetModuleHandle("AMFrameWork.dll");
|
||||||
|
|
||||||
if (hMod == NULL) {
|
if (hMod == NULL) {
|
||||||
@ -31,6 +67,105 @@ HRESULT amfw_hook_init(wchar_t serial[13])
|
|||||||
dprintf("AMFW: Found AMFrameWork Handle\n");
|
dprintf("AMFW: Found AMFrameWork Handle\n");
|
||||||
|
|
||||||
path_hook_insert_hooks(hMod);
|
path_hook_insert_hooks(hMod);
|
||||||
|
setupapi_hook_insert_hooks(hMod);
|
||||||
|
proc_addr_insert_hooks(hMod);
|
||||||
|
|
||||||
|
serial_hook_apply_hooks(hMod);
|
||||||
|
iohook_apply_hooks(hMod);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dll_hook_insert_hooks(HMODULE target) {
|
||||||
|
hook_table_apply(
|
||||||
|
target,
|
||||||
|
"kernel32.dll",
|
||||||
|
kernel32_syms,
|
||||||
|
_countof(kernel32_syms));
|
||||||
|
}
|
||||||
|
|
||||||
|
static HMODULE WINAPI hook_LoadLibraryA(const char *name)
|
||||||
|
{
|
||||||
|
HMODULE result;
|
||||||
|
wchar_t *name_w;
|
||||||
|
size_t name_c;
|
||||||
|
|
||||||
|
if (name == NULL) {
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
mbstowcs_s(&name_c, NULL, 0, name, 0);
|
||||||
|
name_w = malloc(name_c * sizeof(wchar_t));
|
||||||
|
|
||||||
|
if (name_w == NULL) {
|
||||||
|
SetLastError(ERROR_OUTOFMEMORY);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
mbstowcs_s(NULL, name_w, name_c, name, name_c - 1);
|
||||||
|
result = hook_LoadLibraryW(name_w);
|
||||||
|
free(name_w);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static HMODULE WINAPI hook_LoadLibraryW(const wchar_t *name)
|
||||||
|
{
|
||||||
|
const wchar_t *name_end;
|
||||||
|
const wchar_t *target_module;
|
||||||
|
bool already_loaded;
|
||||||
|
HMODULE result;
|
||||||
|
size_t name_len;
|
||||||
|
size_t target_module_len;
|
||||||
|
|
||||||
|
if (name == NULL) {
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the module is already loaded
|
||||||
|
already_loaded = GetModuleHandleW(name) != NULL;
|
||||||
|
|
||||||
|
// Must call the next handler so the DLL reference count is incremented
|
||||||
|
result = next_LoadLibraryW(name);
|
||||||
|
|
||||||
|
if (!already_loaded && result != NULL) {
|
||||||
|
name_len = wcslen(name);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < target_modules_len; i++) {
|
||||||
|
target_module = target_modules[i];
|
||||||
|
target_module_len = wcslen(target_module);
|
||||||
|
|
||||||
|
// Check if the newly loaded library is at least the length of
|
||||||
|
// the name of the target module
|
||||||
|
if (name_len < target_module_len) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
name_end = &name[name_len - target_module_len];
|
||||||
|
|
||||||
|
// Check if the name of the newly loaded library is one of the
|
||||||
|
// modules the path hooks should be injected into
|
||||||
|
if (_wcsicmp(name_end, target_module) != 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
dprintf("Taiko: Hooked %S\n", target_module);
|
||||||
|
|
||||||
|
dll_hook_insert_hooks(result);
|
||||||
|
path_hook_insert_hooks(result);
|
||||||
|
setupapi_hook_insert_hooks(result);
|
||||||
|
es3sec_insert_hooks(result);
|
||||||
|
|
||||||
|
serial_hook_apply_hooks(result);
|
||||||
|
iohook_apply_hooks(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
HRESULT amfw_hook_init(wchar_t *serial);
|
HRESULT amfw_hook_init();
|
@ -71,7 +71,7 @@ static DWORD CALLBACK taiko_pre_startup(void)
|
|||||||
ExitProcess(EXIT_FAILURE);
|
ExitProcess(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = amfw_hook_init(taiko_hook_cfg.platform.dongle.serial);
|
hr = amfw_hook_init();
|
||||||
|
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
ExitProcess(EXIT_FAILURE);
|
ExitProcess(EXIT_FAILURE);
|
||||||
|
Reference in New Issue
Block a user