向高手请教关于CreateRemoteThread()远程创建线程问题 我在远程创建线程时,当创建的线程执行时(线程函数LoadLibrary(“dll.dll”),dll.dll代码是个死循环)为什么远程进程中其他的线程都没了响应。希望高手能解答。谢谢~~~~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 paste your code, or you can send your project to me using e-mail. 插入函数为BOOL WINAPI InjectLib(DWORD dwProcessId, PCSTR pszLibFile) { BOOL fOk = FALSE; HANDLE hProcess = NULL, hThread = NULL; PWSTR pszLibFileRemote = NULL; hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | // Required by Alpha PROCESS_CREATE_THREAD | // For CreateRemoteThread PROCESS_VM_OPERATION | // For VirtualAllocEx/VirtualFreeEx PROCESS_VM_WRITE, // For WriteProcessMemory FALSE, dwProcessId); if (hProcess == NULL) return fOk; int cch = 1 + lstrlen(pszLibFile); int cb = cch * sizeof(CHAR); pszLibFileRemote = (PWSTR) VirtualAllocEx(hProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE); if (pszLibFileRemote == NULL) return fOk; if (!WriteProcessMemory(hProcess, pszLibFileRemote, (PVOID) pszLibFile, cb, NULL)) return fOk; PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA"); if (pfnThreadRtn == NULL) return fOk; hThread = CreateRemoteThread(hProcess, NULL, 0, pfnThreadRtn, pszLibFileRemote, 0, NULL); if (hThread == NULL) return fOk; WaitForSingleObject(hThread, INFINITE); fOk = TRUE; // Everything executed successfully return(fOk);}dll的初始化代码为while(1){sleep(100);}但不知道为什么远程进程只是执行dll的初始化代码,而远程进程的其他线程堵塞。请问高手这是为什么。 在 InjectLib 函数中有这句:WaitForSingleObject(hThread, INFINITE);这句会等待线程的结束,你写个死循环会导致一直等待 to zzz3265,我想wyz_wjp说的是远程进程,不是InjectLib所在的进程吧。to wyz_wjp:试试看在DLL中写代码另外创建一个线程作事情,不要在DllMain中死循环。Dll初始化(DLL_PROCESS_ATTACH, etc....)的时候会自动获得Loader Lock,一旦其他线程调用会获得LoadLock的API的话,这些线程就会被锁住。所以这种做法还是应该要尽量避免。此外请注意在DLLMain中创建的新线程会暂停执行直到DllMain结束执行,所以DllMain不能等待新的线程中的某个Event,不然又会死锁。 在DLL_PROCESS_ATTACH中可以用_beginthread来创建线程,那样,不管你作什么,都正常,我试过 LZ是在远程进程内部调用LoadLibary的.这是远程的LoadLibary是由主线程执行的,因为DllMain一直不结束,导致LoadLibary不返回,所以远程进程的主线程就不动了. 怎么把一个硬件的驱动程序打包到自己的应用程序的安装程序里 像这样一种情况,应该选择什么实现比较好? WINDOWS如何设置IP地址? 获取Https服务器上的文件遇到问题,请大家帮忙啊 特急!在vc里的文件操作 我把文件路径写入另一文件 在读出后用读出的文件路径采用open函数是提示非法操作? 敢问路在何方 句柄会不会引起竞争?WORK线程里出现MessageBox时程序挂了,怎么回事?如何解决? 请各位大虾救命 网络浏览器控件有人用过否? 向数据库中增加自定义列 运行没问题,调试倒不行了 一个简单的mfc作业
BOOL WINAPI InjectLib(DWORD dwProcessId, PCSTR pszLibFile) { BOOL fOk = FALSE;
HANDLE hProcess = NULL, hThread = NULL;
PWSTR pszLibFileRemote = NULL;
hProcess = OpenProcess(
PROCESS_QUERY_INFORMATION | // Required by Alpha
PROCESS_CREATE_THREAD | // For CreateRemoteThread
PROCESS_VM_OPERATION | // For VirtualAllocEx/VirtualFreeEx
PROCESS_VM_WRITE, // For WriteProcessMemory
FALSE, dwProcessId);
if (hProcess == NULL) return fOk;
int cch = 1 + lstrlen(pszLibFile);
int cb = cch * sizeof(CHAR);
pszLibFileRemote = (PWSTR)
VirtualAllocEx(hProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);
if (pszLibFileRemote == NULL) return fOk; if (!WriteProcessMemory(hProcess, pszLibFileRemote,
(PVOID) pszLibFile, cb, NULL)) return fOk;
PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA");
if (pfnThreadRtn == NULL) return fOk;
hThread = CreateRemoteThread(hProcess, NULL, 0,
pfnThreadRtn, pszLibFileRemote, 0, NULL);
if (hThread == NULL) return fOk; WaitForSingleObject(hThread, INFINITE); fOk = TRUE; // Everything executed successfully return(fOk);
}
dll的初始化代码为
while(1)
{
sleep(100);
}
但不知道为什么远程进程只是执行dll的初始化代码,而远程进程的其他线程堵塞。请问高手这是为什么。
WaitForSingleObject(hThread, INFINITE);
这句会等待线程的结束,你写个死循环会导致一直等待
我想wyz_wjp说的是远程进程,不是InjectLib所在的进程吧。to wyz_wjp:
试试看在DLL中写代码另外创建一个线程作事情,不要在DllMain中死循环。Dll初始化(DLL_PROCESS_ATTACH, etc....)的时候会自动获得Loader Lock,一旦其他线程调用会获得LoadLock的API的话,这些线程就会被锁住。所以这种做法还是应该要尽量避免。
此外请注意在DLLMain中创建的新线程会暂停执行直到DllMain结束执行,所以DllMain不能等待新的线程中的某个Event,不然又会死锁。