typedef DWORD64 (WINAPI *PFNTCREATETHREADEX)
(
PHANDLE ThreadHandle,
ACCESS_MASK DesiredAccess,
LPVOID ObjectAttributes,
HANDLE ProcessHandle,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
BOOL CreateSuspended,
DWORD64 dwStackSize,
DWORD64 dw1,
DWORD64 dw2,
LPVOID Unknown
);
pFunc = GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtCreateThreadEx");
if( pFunc == NULL )
{
printf("MyCreateRemoteThread() : GetProcAddress(\"NtCreateThreadEx\") 调用失败!错误代码: [%d]/n",
GetLastError());
return FALSE;
}
((PFNTCREATETHREADEX)pFunc)(
&hThread,
0x1FFFFF,
NULL,
hProcess,
pThreadProc,
pRemoteBuf,
FALSE,
NULL,
NULL,
NULL,
NULL); if( hThread == NULL )
{
printf("MyCreateRemoteThread() : NtCreateThreadEx() 调用失败!错误代码: [%d]/n", GetLastError());
return FALSE;
}
以上是VC源码,下面是我翻译的delphi代码:
TNtCreateThreadEx = function(ThreadHandle:THandle;
DesiredAccess:ACCESS_MASK;
ObjectAttributes:Pointer;
ProcessHandle:THandle;
lpStartAddress:TFNThreadStartRoutine;
lpParameter:Pointer;
CreateSuspended:BOOL;
dwStackSize:Int64;
dw1:Int64;
dw2:Int64;
Unknown:Pointer):Int64;
pFunc:= GetProcAddress(GetModuleHandle('ntdll.dll'),'NtCreateThreadEx');
if pFunc= nil then
begin
ShowMessage(IntToStr(GetLastError));
Result:=0;
end;
TNtCreateThreadEx(pFunc)(hThread,$1FFFFF,nil,hRemoteProcess,pfnStartAddr,pszLibFileRemote,False,0,0,0,nil);
if hThread=0 then
begin
ShowMessage('NtCreateThreadEx() 调用失败!错误代码:'+inttostr(GetLastError));
Result:=0;
end;请问我翻译的哪里不对?请斧正下!谢谢~只有这么多分了,都给了!
(
PHANDLE ThreadHandle,
ACCESS_MASK DesiredAccess,
LPVOID ObjectAttributes,
HANDLE ProcessHandle,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
BOOL CreateSuspended,
DWORD64 dwStackSize,
DWORD64 dw1,
DWORD64 dw2,
LPVOID Unknown
);
pFunc = GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtCreateThreadEx");
if( pFunc == NULL )
{
printf("MyCreateRemoteThread() : GetProcAddress(\"NtCreateThreadEx\") 调用失败!错误代码: [%d]/n",
GetLastError());
return FALSE;
}
((PFNTCREATETHREADEX)pFunc)(
&hThread,
0x1FFFFF,
NULL,
hProcess,
pThreadProc,
pRemoteBuf,
FALSE,
NULL,
NULL,
NULL,
NULL); if( hThread == NULL )
{
printf("MyCreateRemoteThread() : NtCreateThreadEx() 调用失败!错误代码: [%d]/n", GetLastError());
return FALSE;
}
以上是VC源码,下面是我翻译的delphi代码:
TNtCreateThreadEx = function(ThreadHandle:THandle;
DesiredAccess:ACCESS_MASK;
ObjectAttributes:Pointer;
ProcessHandle:THandle;
lpStartAddress:TFNThreadStartRoutine;
lpParameter:Pointer;
CreateSuspended:BOOL;
dwStackSize:Int64;
dw1:Int64;
dw2:Int64;
Unknown:Pointer):Int64;
pFunc:= GetProcAddress(GetModuleHandle('ntdll.dll'),'NtCreateThreadEx');
if pFunc= nil then
begin
ShowMessage(IntToStr(GetLastError));
Result:=0;
end;
TNtCreateThreadEx(pFunc)(hThread,$1FFFFF,nil,hRemoteProcess,pfnStartAddr,pszLibFileRemote,False,0,0,0,nil);
if hThread=0 then
begin
ShowMessage('NtCreateThreadEx() 调用失败!错误代码:'+inttostr(GetLastError));
Result:=0;
end;请问我翻译的哪里不对?请斧正下!谢谢~只有这么多分了,都给了!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货