您的位置:首页 > 其它

获取指定进程模块handle 然后FreeLibrary掉

2009-02-02 22:39 351 查看
转网上李马大哥的,GetExitCodeThread原来可以这么用,哈



1.  // 使目标进程调用GetModuleHandle,获得DLL在目标进程中的句柄   
   2. DWORD dwHandle, dwID;   
   3. LPVOID pFunc = GetModuleHandleA;   
   4. HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID );   
   5. // 等待GetModuleHandle运行完毕   
   6. WaitForSingleObject( hThread, INFINITE );   
   7. // 获得GetModuleHandle的返回值   
   8. GetExitCodeThread( hThread, &dwHandle );   
   9. // 释放目标进程中申请的空间   
  10. VirtualFreeEx( hProcess, lpBuf, dwSize, MEM_DECOMMIT );   
  11. CloseHandle( hThread );   
  12. // 使目标进程调用FreeLibrary,卸载DLL   
  13. pFunc = FreeLibrary;   
  14. hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, (LPVOID)dwHandle, 0, &dwID );   
  15. // 等待FreeLibrary卸载完毕   
  16. WaitForSingleObject( hThread, INFINITE );   
  17. CloseHandle( hThread );   
  18. CloseHandle( hProcess );




用这个方法可以卸载一个进程中的DLL模块,当然包括那些非病毒体的DLL。所以,这段代码还是谨慎使用为好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: