CreateRemoteThread可否直接调用远程函数?
我用VB调用这个api 目的是实现调用另一个程序的某个函数,比如:
被调用:
Function xx()
msgbox "123"
end function
我想在其它vb中通过FindWindow 找到被调用程序窗体句柄
getprocessthreadid 搞到pid
openprocess 获取进程权限
createremotethread 创建远程线程
其中被调用函数地址已经用OD找到了(不知道对不对,地址对应的汇编代码是一个Call 下断之后弹出对话框之前是中断在那里的)
为什么一创建被调用程序就自动崩溃呢?我是WIn7
附上代码
Private Sub Form_Click()
Dim ss As a'本想传参的 可是总是出现错误,干脆就重新写了一个子程序 把参数去掉了,所以这行暂时没用了
ss.in = 0 '同上
ss.in2 = 0 'And so on...
Dim hwnd As Long, pid As Long, pHandle!, pid2 As Long
hwnd = FindWindow(vbNullString, "AA") 'Caption是AA
GetWindowThreadProcessId hwnd, pid 'GetPid
pHandle = OpenProcess(&H1F0FFF, False, pid) GetpHandle
'VirtualAllocEx pHandle, 0, 10, 0, 0 '不想用这个....因为我只是单纯的调用一个已经存在的函数
CreateRemoteThread pHandle, Null, 0, &H40109B, Null, 0&, pid2 '就是这里执行后被调用的程序出现错误,然后退出...
End Sub
求大神帮帮小弟
vb function 线程 汇编 api
[解决办法]
bool AdjustPrivileges() {
HANDLE hToken;
TOKEN_PRIVILEGES tp;
TOKEN_PRIVILEGES oldtp;
DWORD dwSize=sizeof(TOKEN_PRIVILEGES);
LUID luid;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
[解决办法]
TOKEN_QUERY, &hToken)) {
if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) return true;
else return false;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
CloseHandle(hToken);
return false;
}
ZeroMemory(&tp, sizeof(tp));
tp.PrivilegeCount=1;
tp.Privileges[0].Luid=luid;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
/* Adjust Token Privileges */
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize)) {
CloseHandle(hToken);
return false;
}
// close handles
CloseHandle(hToken);
return true;
}