LoadLibrary вызывает нарушение прав доступа

Я пытаюсь создать прокси-сервер dinput8.dll, чтобы разрешить переназначение клавиатуры в игре, и собрал несколько инструкций и т. Д., Чтобы получить следующее:

#include <windows.h>
#include <strsafe.h>
#pragma pack(1)

HINSTANCE hLThis = 0;
HINSTANCE hL = 0;
FARPROC p[5] = {0};

BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID) {
if (reason == DLL_PROCESS_ATTACH) {
hLThis = hInst;
hL = LoadLibrary("originaldinput8.dll");
if (!hL) return false;
p[0] = GetProcAddress(hL,"DllCanUnloadNow");
p[1] = GetProcAddress(hL,"DllGetClassObject");
p[2] = GetProcAddress(hL,"DllRegisterServer");
p[3] = GetProcAddress(hL,"DllUnregisterServer");
p[4] = GetProcAddress(hL,"DirectInput8Create");
} else if (reason == DLL_PROCESS_DETACH) {
FreeLibrary(hL);
}

return 1;
}

extern "C" __declspec(naked) void __stdcall __E__0__()
{
__asm
{
jmp p[4];
}
}

// DllCanUnloadNow
extern "C" __declspec(naked) void __stdcall __E__1__()
{
__asm
{
jmp p[0];
}
}

// DllGetClassObject
extern "C" __declspec(naked) void __stdcall __E__2__()
{
__asm
{
jmp p[1];
}
}

// DllRegisterServer
extern "C" __declspec(naked) void __stdcall __E__3__()
{
__asm
{
jmp p[2];
}
}

// DllUnregisterServer
extern "C" __declspec(naked) void __stdcall __E__4__()
{
__asm
{
jmp p[3];
}
}

Файл определения модуля, на который он ссылается, выглядит следующим образом:

EXPORTS
DirectInput8Create=__E__0__ @1
DllCanUnloadNow=__E__1__ @2
DllGetClassObject=__E__2__ @3
DllRegisterServer=__E__3__ @4
DllUnregisterServer=__E__4__ @5

Проект прекрасно собирается и создает DLL, которую я затем помещаю вместе с originaldinput8.dll (переименованная версия C: \ Windows \ SysWOW64 \ dinput8.dll) и запускаю игру. Но он сразу падает — при отладчике выдается следующая ошибка, когда происходит вызов LoadLibrary.

First-chance exception at 0x75ed75f8 in th06e.exe: 0xC0000005: Access violation reading location 0x00000250.

*** An Access Violation occurred in "C:\Users\Username\Documents\Visual Studio 2010\Projects\dinput8\Debug\th06e.exe" :

The instruction at 00000000775A1221 tried to read from an invalid address, 0000000000000250

*** enter .exr 000000000008E030 for the exception record
***  enter .cxr 000000000008DB40 for the context
*** then kb to get the faulting stack

Unhandled exception at 0x75ed75f8 in th06e.exe: 0xC000041D: An unhandled exception was encountered during a user callback.
The program '[5704] th06e.exe: Native' has exited with code -1073740771 (0xc000041d).

Ранее это работало (после проблемы, когда я использовал 64-битную оригинальную DLL вместо 32-битной), но почему-то теперь она перестала работать, и я не уверен, в чем проблема.

Я не думаю, что это проблема с поиском файла DLL — удаление файла DLL или использование неправильного приводит к сбою LoadLibrary без сбоя, код ошибки 193.

Есть идеи?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]