Я сделал DLL, которая должна перехватить CreateFileW
из Блокнота, но, тем не менее, он завис.После отладки я обнаружил, что это вызывает переполнение стека в первой строке функции HookedCreateFile
:
![Screenshot](https://i.stack.imgur.com/ZIbIc.png)
(говорят, что это вызываетошибка исключения по адресу ...)
стек вызовов в точке исключения:
![Callstack?](https://i.stack.imgur.com/DZjxx.png)
Мой код:
typedef HANDLE(WINAPI * CreateFileFn)(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
CreateFileFn oCreateFile = (CreateFileFn)GetProcAddress(GetModuleHandleA("kernel32.dll"), "CreateFileW");
HANDLE WINAPI HookedCreateFile(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile)
{
//std::cout << "Hello!" << std::endl;
return oCreateFile(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
}
Я использую DetourFunction
от Microsoft. Detours:
DetourFunction((PBYTE)oCreateFile, (PBYTE)HookedCreateFile);