编程中遇到的问题,高手进 20

#include<windows.h>typedefstruct_UNICODE_STRING{USHORTLength;USHORTMaximumLength;WCHA... #include <windows.h>

typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
WCHAR *Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

typedef NTSTATUS ( __stdcall *NtSetValueKey_ ) (
IN HANDLE KeyHandle,
IN PUNICODE_STRING ValueName,
IN ULONG TitleIndex,
IN ULONG Type,
IN PVOID Data,
IN ULONG DataSize
);
NtSetValueKey_ NtSetValueKey = NULL;

int main()
{
BYTE RegBuf[0x28] = {0};
HKEY hKey;

if ( RegOpenKey(HKEY_CURRENT_USER,L"EUDC\\936",&hKey) != ERROR_SUCCESS )
return FALSE;

NtSetValueKey = (NtSetValueKey_)GetProcAddress(GetModuleHandle(L"ntdll.dll"),"NtSetValueKey");
if ( NtSetValueKey == NULL )
return FALSE;

WCHAR lpszName[22] = L"SystemDefaultEUDCFont";//21个字符

UNICODE_STRING ValueName;
ValueName.Buffer = lpszName;
ValueName.Length = 21 * 2 + 2;//长度+2,指明多了一个NULL,这是关键之处!
ValueName.MaximumLength = 21 * 2 + 2;//长度+2,指明多了一个NULL

NtSetValueKey( (HANDLE)hKey, &ValueName, NULL,REG_BINARY, (BYTE *)RegBuf, 0x28 );

RegCloseKey(hKey);
}

错误为
D:\My Documents\Cpp1.cpp(9) : error C2059: syntax error : '__stdcall'
D:\My Documents\Cpp1.cpp(16) : error C2091: function returns function
D:\My Documents\Cpp1.cpp(17) : error C2146: syntax error : missing ';' before identifier 'NtSetValueKey'
D:\My Documents\Cpp1.cpp(17) : error C2501: 'NtSetValueKey_' : missing storage-class or type specifiers
D:\My Documents\Cpp1.cpp(17) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.
这个是摘抄来的,不知哪里有错,还有,“//21个字符,//长度+2,指明多了一个NULL,这是关键之处!//长度+2,指明多了一个NULL”这些已经去掉了
展开
 我来答
lu_zhao_long
2013-09-02 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.3万
采纳率:79%
帮助的人:2678万
展开全部
D:\My Documents\Cpp1.cpp(9) : error C2059: syntax error : '__stdcall' :第9行语法错误;
D:\My Documents\Cpp1.cpp(16) : error C2091: function returns function :第16行函数返回函数错误;
D:\My Documents\Cpp1.cpp(17) : error C2146: syntax error : missing ';' before identifier 'NtSetValueKey' :第 17行语法错误,在'NtSetValueKey'前面缺了';'
D:\My Documents\Cpp1.cpp(17) : error C2501: 'NtSetValueKey_' : missing storage-class or type specifiers :第 17行错误,缺失类型
D:\My Documents\Cpp1.cpp(17) : fatal error C1004: unexpected end of file found:第17行致命性错误。

我不太熟悉 C语言,但我总觉得“NtSetValueKey_ NtSetValueKey = NULL;” 这句话为什么放在这个地方呢?它是属于哪个子程序或 Type 块呢?
追问
这是为了绕过360,所以加的null,可以再详细解释一下错误吗?
追答

因为我不太熟悉 C 语言,只是猜测一下:

typedef NTSTATUS ( __stdcall *NtSetValueKey_ )

  1. 这句代码中 “__stdcall” 应该是 1个下划线(“_”)还是两个下划线(“_”)?

  2. 为什么typedef struct _UNICODE_STRING 后的程序体是以“{”和“}”括起来的,但这个

    typedef NTSTATUS ( __stdcall *NtSetValueKey_ ) 后面却是以“(”和“)”括起来的?

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式