MS Detours - DetourAttach fails

MS Detours - DetourAttach fails

本文关键字:fails DetourAttach Detours MS      更新时间:2023-10-16

在这里感到愚蠢,但是为什么此代码在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功能详细信息。