Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ typedef c++;_C++_Winapi_Dll_Header - Fatal编程技术网

C++ typedef c++;

C++ typedef c++;,c++,winapi,dll,header,C++,Winapi,Dll,Header,我目前正致力于从各种漏洞数据库文件中将ntdll函数的一些声明组合在一起,以便创建一个键盘记录器(从教育角度)。 我试着在这里搜索,在普通网络上搜索。我找不到任何足够类似的东西,我可以理解如何使用它来解决我的问题。很抱歉,如果有重复的,我找不到任何相关的 我把它们放在一个头文件中,当我试图编译它们时,我得到了与头文件中的typedef相关的各种错误,我得到了关于decltype的错误消息,我承认我似乎根本无法理解它。我从来没有真正弄乱过标题或decltype,我到处搜索,但仍然不能真正理解它。出

我目前正致力于从各种漏洞数据库文件中将ntdll函数的一些声明组合在一起,以便创建一个键盘记录器(从教育角度)。 我试着在这里搜索,在普通网络上搜索。我找不到任何足够类似的东西,我可以理解如何使用它来解决我的问题。很抱歉,如果有重复的,我找不到任何相关的

我把它们放在一个头文件中,当我试图编译它们时,我得到了与头文件中的typedef相关的各种错误,我得到了关于decltype的错误消息,我承认我似乎根本无法理解它。我从来没有真正弄乱过标题或decltype,我到处搜索,但仍然不能真正理解它。出现以下错误:

typedef (NTSTATUS) (WINAPI *LPFUN_NtCreateThreadEx)
(
    OUT PHANDLE hThread,
    IN ACCESS_MASK DesiredAccess,
    IN LPVOID ObjectAttributes,
    IN HANDLE ProcessHandle,
    IN LPTHREAD_START_ROUTINE lpStartAddress,
    IN LPVOID lpParameter,
    IN BOOL CreateSuspended,
    IN DWORD StackZeroBits,
    IN DWORD SizeOfStackCommit,
    IN DWORD SizeOfStackReserve,
    OUT LPVOID lpBytesBuffer
);

typedef NTSTATUS(NTAPI *lNtAllocVirtMem)(
    IN  HANDLE  ProcessHandle,
    IN  PVOID   *BaseAddress,
    IN  PULONG  ZeroBits,
    IN  PSIZE_T RegionSize,
    IN  ULONG   AllocationType,
    IN  ULONG   Protect
);
main.cpp中的另一个错误是:(很抱歉线路太长)

我的错误是(我得到两个的两倍):


我想知道如何解决这些问题(因为我计划添加更多),更重要的是,我如何确保我不会从这里得到这些问题

答案非常简单。在我添加的标题中:

typedef long NTSTATUS;
它似乎编译正确,据我所知,其中一个函数运行良好。我感谢那些帮助我走上正确的思维过程和正确的方向的人:)

编辑:
通过使用visualstudios,我可以访问winternl.h,在那里正确定义了NTSTATUS,我最初的答案不是解决方案

类型
NTSTATUS
在Windows SDK头文件winternl.h中定义:


您需要包含该头文件,而不是自己定义
NTSTATUS
。SDK提供的定义在两个方面有所不同:
1
它包含允许您运行静态代码分析的SAL注释<代码>2它提供正确的别名,与平台无关。在x86和x64平台上,它都应该是32位整数值<代码>长可能比这个长。

您是在gcc中编译的吗?这是特定于编译器的代码,因此您可能必须在正确使用编译器时查找规范。谷歌搜索显示,基本上,
NTSTATUS
是。因此,typedef毫无意义。使用typedef,不清楚您到底想要别名什么。如果
NTSTATUS
是函数的返回值,则不应在括号中。更多的谷歌搜索揭示了
WINAPI
——编译器特有的关键字。不清楚它是否需要在
*
@Nonanon之前或之后。我正在使用带有gcc版本4的Mingw。9@SamVarshavchik老实说,我不知道我在谷歌上搜索的东西是否会给出好的答案,所以请跟我说。我也不确定代码到底是什么,只是它们在源代码中,而不是标题中。我可能和你一样困惑:(公平地说,这对我来说并不像一个有效的C++代码,即使在对前面提到的MySoSt.To的允许之后,也不需要。你需要包括定义NtStand的文件。你是正确的,我编辑了我的声明,包括了为我工作的,并正常工作。谢谢,程序一旦我添加了那个定义,那么我就工作了。我不认为我需要添加任何其他内容,我会立即更改。好的,我正在使用Netbeans与Mingw,winternl.h无法导入,有什么建议吗?@JayM:我不知道,什么“winternl.h无法导入”应该是指。包含了头文件。如果没有更好的问题说明,就没有什么帮助了。头文件无法包含,看起来不在那里。我不确定我还可以提供哪些信息,我正在用谷歌搜索。我似乎找不到它。winternl.h是Windows SDK的一部分。请确保已经正确安装了SDK,并建立了构建环境。MinGW被称为薄片。如果可以,请考虑使用具有官方支持的构建环境(例如)。
error: expected primary-expression before '__attribute__'
error: typedef 'NTSTATUS' is initialized (use decltype instead)
typedef long NTSTATUS;
typedef _Return_type_success_(return >= 0) LONG NTSTATUS;