Process, Exist, notepad.exe ProcessID := ErrorLevel DllUnInject(ProcessID, "mydll.dll") ; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=68716 DllUnInject(ProcessID, ModuleName) { static TH32CS_SNAPMODULE := 0x00000008 static STANDARD_RIGHTS_REQUIRED := 0x000F0000 static SYNCHRONIZE := 0x00100000 static PROCESS_ALL_ACCESS := (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF) static INFINITE := 0xFFFFFFFF static WAIT_FAILED := 0xFFFFFFFF static WAIT_OBJECT_0 := 0x00000000 try { ; take a snapshot of all modules in the specified process if !(hSnapshot := DllCall("CreateToolhelp32Snapshot", "uint", TH32CS_SNAPMODULE, "uint", ProcessID, "ptr")) throw Exception("CreateToolhelp32Snapshot failed: " A_LastError, -1) ; set the size of the structure before using it. NumPut(VarSetCapacity(MODULEENTRY32, (A_PtrSize = 8 ? 568 : 548), 0), MODULEENTRY32, "uint") ; retrieve information about the first module and exit if unsuccessful if !(DllCall("Module32First", "ptr", hSnapshot, "ptr", &MODULEENTRY32)) throw Exception("Module32First failed: " A_LastError, -1) ; walk the module list of the process and gets the base address of the module while (DllCall("Module32Next", "ptr", hSnapshot, "ptr", &MODULEENTRY32)) if (ModuleName = StrGet(&MODULEENTRY32+ (A_PtrSize = 8 ? 48 : 32), 256, "cp0")) modBaseAddr := NumGet(MODULEENTRY32, (A_PtrSize = 8 ? 24 : 20), "uptr") ; exit if module is not found if !(modBaseAddr) throw Exception("Module not found", -1) ; opens an existing local process object if !(hProcess := DllCall("OpenProcess", "uint", PROCESS_ALL_ACCESS, "int", 0, "uint", ProcessID, "ptr")) throw Exception("OpenProcess failed: " A_LastError, -1) ; retrieves a module handle for the specified module if !(hModule := DllCall("GetModuleHandle", "str", "kernel32.dll", "ptr")) throw Exception("GetModuleHandle failed: " A_LastError, -1) ; retrieves the address of an exported function or variable from the specified dynamic-link library (DLL) if !(pThreadProc := DllCall("GetProcAddress", "ptr", hModule, "astr", "FreeLibrary", "ptr")) throw Exception("GetProcAddress failed with: " A_LastError, -1) ; creates a thread that runs in the virtual address space of another process if !(hThread := DllCall("CreateRemoteThread", "ptr", hProcess, "ptr", 0, "uptr", 0, "ptr", pThreadProc, "ptr", modBaseAddr, "uint", 0, "uint*", 0)) throw Exception("CreateRemoteThread failed with: " A_LastError, -1) ; waits until the specified object is in the signaled state or the time-out interval elapses if ((WaitResult := DllCall("WaitForSingleObject", "ptr", hThread, "uint", INFINITE)) = WAIT_FAILED) throw Exception("WaitForSingleObject failed with: " A_LastError, -1) ; if the state of the specified object is signaled (thread has terminated) if (WaitResult = WAIT_OBJECT_0) { ; retrieves the termination status of the specified thread if !(DllCall("GetExitCodeThread", "ptr", hThread, "uint*", ExitCode)) throw Exception("GetExitCodeThread failed with: " A_LastError, -1) } } catch exception { ; represents errors that occur during application execution throw Exception } finally { ; cleaning up resources if (hThread) DllCall("CloseHandle", "ptr", hThread) if (hProcess) DllCall("CloseHandle", "ptr", hProcess) if (hSnapshot) DllCall("CloseHandle", "ptr", hSnapshot) } return ExitCode }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)