本帖最后由 yhon宇少 于 2011-10-4 10:14 编辑
RT
应该是调用API实现、
但是调用的是哪个API呢、、
就像DOS命令wmic process get一样
求解、、调用的是哪个DLL
-----
我自己找到了....
DLL如下:
[e].版本 2 .DLL命令 OpenProcess_API, 整数型, , "OpenProcess" .参数 dwDesiredAccess, 整数型 .参数 bInheritHandle, 逻辑型 .参数 dwProcessId, 整数型 .DLL命令 CloseHandle, 逻辑型 .参数 hObject, 整数型 .DLL命令 GetModuleHandleA, 整数型 .参数 lpModuleName, 文本型 .DLL命令 GetProcAddress, 整数型 .参数 hModule, 整数型 .参数 lpProcName, 文本型 .DLL命令 CreateRemoteThread, 整数型 .参数 hProcess, 整数型 .参数 lpThreadAttributes, 整数型 .参数 dwStackSize, 整数型 .参数 lpStartAddress, 整数型 .参数 lpParameter, 整数型 .参数 dwCreationFlags, 整数型 .参数 lpThreadId, 整数型 .DLL命令 GetExitCodeThread, 逻辑型, , "GetExitCodeThread" .参数 hThread .参数 lpExitCode, , 传址 .DLL命令 WaitForSingleObject, 整数型 .参数 hHandle, 整数型 .参数 dwMilliseconds, 整数型 .DLL命令 ReadProcessMemory, 逻辑型 .参数 hProcess, 整数型 .参数 lpBaseAddress, 整数型 .参数 lpBuffer, 文本型 .参数 nSize, 整数型 .参数 lpNumberOfBytesRead, 整数型, 传址 [/e]
还有一个类
[e].版本 2 .程序集 CImagePathAndCommandLine, , 公开 .程序集变量 m_hProcess, 整数型 .子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用 .子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用 .子程序 OpenProcess, 逻辑型, 公开, 打开目标进程。成功返回真,失败返回假。备注:若不再操作目标进程,请调用“Close”方法释放资源。 .参数 dwProcessId, 整数型, , 目标进程ID m_hProcess = OpenProcess_API (位或 (#PROCESS_VM_READ, #PROCESS_DUP_HANDLE, #PROCESS_VM_OPERATION, #PROCESS_CREATE_THREAD, #PROCESS_QUERY_INFORMATION), 假, dwProcessId) ' 打开目标进程 返回 (m_hProcess ≠ 0) .子程序 Close, 逻辑型, 公开, 关闭已打开的句柄,释放资源。成功返回真,失败返回假。 .如果真 (m_hProcess ≠ 0) .如果真 (CloseHandle (m_hProcess)) ' 关闭进程句柄 m_hProcess = 0 返回 (真) .如果真结束 .如果真结束 返回 (假) .子程序 SetHandle, , 公开, 置入进程句柄,可通过本类的实例操作目标进程。 .参数 hProcess, 整数型, , 目标进程ID .参数 bCloseOldHandle, 逻辑型, 可空, 是否把已打开的句柄释放。建议该参数为真。否则有可能会导致内存泄漏。 .如果真 (bCloseOldHandle) CloseHandle (m_hProcess) ' 关于进程句柄 .如果真结束 m_hProcess = hProcess .子程序 GetSaveHandle, 整数型, 公开, 获取已保存的句柄 返回 (m_hProcess) .子程序 GetProcessImagePathAndCommandLine, 逻辑型, 公开, 获取目标进程的映像路径及命令行参数。成功返回真,失败返回假。 .参数 lpstrImagePathAndCommandLine, 文本型, 参考, 用于保存目标进程的映像路径及命令行参数的文本型变量 .局部变量 GetCommandLineA_addr, 整数型, , , GetCommandLineA的地址 .局部变量 hRemoteThread, 整数型, , , 远程线程句柄 .局部变量 lptstr, 整数型, , , 远程进程的映像路径及命令行参数的基址 .局部变量 lstrlenA_addr, 整数型, , , lstrlenA的地址 .局部变量 strlen, 整数型, , , 长度 GetCommandLineA_addr = GetProcAddress (GetModuleHandleA (“Kernel32.dll”), “GetCommandLineA”) ' 获取 GetCommandLineA 的地址 hRemoteThread = CreateRemoteThread (m_hProcess, 0, 0, GetCommandLineA_addr, 0, 0, 0) ' 创建远程线程执行 GetCommandLineA 函数,并获取该线程的线程句柄 .如果 (hRemoteThread ≠ 0) WaitForSingleObject (hRemoteThread, #INFINITE) ' 等待线程结束 GetExitCodeThread (hRemoteThread, lptstr) ' 获取线程退出代码 CloseHandle (hRemoteThread) ' 关闭线程句柄 .否则 返回 (假) .如果结束 lstrlenA_addr = GetProcAddress (GetModuleHandleA (“Kernel32.dll”), “lstrlenA”) ' 获取 lstrlenA 的地址 hRemoteThread = CreateRemoteThread (m_hProcess, 0, 0, lstrlenA_addr, lptstr, 0, 0) ' 创建远程线程执行 lstrlenA 函数,并获取该线程的线程句柄 .如果 (hRemoteThread ≠ 0) WaitForSingleObject (hRemoteThread, #INFINITE) ' 等待线程结束 GetExitCodeThread (hRemoteThread, strlen) ' 获取线程退出代码 CloseHandle (hRemoteThread) ' 关闭线程句柄 .否则 返回 (假) .如果结束 lpstrImagePathAndCommandLine = 取空白文本 (strlen) ' 申请内存空间,用于保存远程进程的映像路径及命令行参数的基址 .如果真 (ReadProcessMemory (m_hProcess, lptstr, lpstrImagePathAndCommandLine, strlen, 0)) ' 读取远程进程的映像路径及命令行参数 返回 (真) .如果真结束 返回 (假) [/e]
窗口: 超列 按钮[e].版本 2 .支持库 eAPI .支持库 iext .程序集 窗口程序集1 .子程序 _按钮1_被单击 .局部变量 ipacl, CImagePathAndCommandLine .局部变量 strBuffer, 文本型 .局部变量 ProcessInfo, 进程信息, , "0" .局部变量 n, 整数型 .局部变量 nIndex, 整数型 超级列表框1.全部删除 () ProcessInfo = 取系统进程列表 () .计次循环首 (取数组成员数 (ProcessInfo), n) nIndex = 超级列表框1.插入表项 (, ProcessInfo [n].进程名称, , , , ) .如果 (ipacl.OpenProcess (ProcessInfo [n].进程标识符)) ipacl.GetProcessImagePathAndCommandLine (strBuffer) ipacl.Close () 超级列表框1.置标题 (nIndex, 1, strBuffer) .否则 超级列表框1.置标题 (nIndex, 1, “打开进程失败,请先提升进程权限。”) .如果结束 .计次循环尾 () [/e]
|