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;
請問我翻譯的哪里不對?請斧正下!謝謝~只有這么多分了,都給了!
uj5u.com熱心網友回復:
pFunc這個是什么型別?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/101781.html
下一篇:delphi2007 indy
