MS Detours - DetourAttach fails
MS Detours - DetourAttach fails
在这里感到愚蠢,但是为什么此代码在Visual中给我一个语法错误尝试编译时的工作室?
DetourAttach(&(PVOID&)true_create_file, create_file);
编译器向(强调pVoid强调(
错误(Active(E0018预期A'('
该代码实际上是从"弯路"示例页面复制的。我认为这是因为我的包含文件具有.c扩展名,因此由vs编译为vs,而该示例具有.cpp扩展名,并将其编译为C 。
我不确定所有铸件的情况。为什么C编译器不喜欢它,我该如何汇编这一行?
这是代码的完整列表:
#include <Windows.h>
#include "detours.h"
#pragma comment(lib, "detours.lib")
static HANDLE(WINAPI *true_create_file) (LPCSTR file, DWORD access,
DWORD share, LPSECURITY_ATTRIBUTES sec, DWORD disp, DWORD flags,
HANDLE tmpl) = CreateFileA;
HANDLE WINAPI create_file(LPCSTR file, DWORD access, DWORD share,
LPSECURITY_ATTRIBUTES sec, DWORD disp, DWORD flags, HANDLE tmpl) {
}
int hook_create_file() {
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
/* syntax error */
DetourAttach(&(PVOID&)true_create_file, create_file);
DetourTransactionCommit();
}
pvoid 定义为
typedef void *pvoid;
&(PVOID&)
part:将参数施加到对void的指针的引用,然后拿出该地址。正如评论所指出的那样,您将其编译为C,但参考操作不存在于C中。因此编译器识别"&amp;"。作为地址,但仅在其后面"(,然后获取expected a ')'
错误。
因为PVOID&
在这里没有意义,只是为了提高可读性。您可以在这里使用PVOID
而不是PVOID&
:
DetourAttach(&(PVOID)true_create_file, create_file);
您也可以从此处获取DetourAttach
功能详细信息。
相关文章:
- Travis-CI Complex Makefile fails
- OpenCV: fs.open fails
- GetProcAddress fails
- NetUserGetInfo fails
- C++ - bind() fails
- MS Detours - DetourAttach fails
- ld fails to find glfw3
- Visual Studio 2017 .Net Core 2.0 Angular Publish Fails
- SHGetKnownFolderItem - fails on Wow64
- IVssBackupComponents::InitializeForBackup fails
- strftime() fails on Raspberry Pi (Raspbian)
- c++ fails to find includes
- ASSERT(AfxGetThread() == NULL); fails
- SSL_CTX_load_verify_locations Fails with SSL_ERROR_NONE
- dijkstra_shortest_paths Boost Graph Lib 1.57.0 fails
- C++ MapViewOfFile fails
- D3D11CreateDeviceAndSwapChain Fails to succeed
- 窗口在进程启动前没有弹出 ->尝试了 sleep() 方法,但"fails"
- ace register_handler fails
- std::atomic.compare_and_exchange_strong() fails