编程中遇到的问题,高手进 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”这些已经去掉了 展开
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”这些已经去掉了 展开
1个回答
展开全部
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 块呢?
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_ )
这句代码中 “__stdcall” 应该是 1个下划线(“_”)还是两个下划线(“_”)?
为什么typedef struct _UNICODE_STRING 后的程序体是以“{”和“}”括起来的,但这个
typedef NTSTATUS ( __stdcall *NtSetValueKey_ ) 后面却是以“(”和“)”括起来的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询