所以,我的目标是获取所有当前正在运行的进程的完整命令行。为此,我所做的就是使用CreateToolhelp32Snapshot
API,然后执行一个流程来存储PROCESSENTRY32
在名为的数组中键入进程process_list
:
BOOL GetProcessList( FILE *f, PROCESSENTRY32* process_list, int process_count)
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass;
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if( hProcessSnap == INVALID_HANDLE_VALUE )
{
return( FALSE );
}
// Set the size of the structure before using it.
pe32.dwSize = sizeof( PROCESSENTRY32 );
// Retrieve information about the first process,
// and exit if unsuccessful
if( !Process32First( hProcessSnap, &pe32 ) )
{
CloseHandle( hProcessSnap ); // clean the snapshot object
return( FALSE );
}
// Now walk the snapshot of processes, and
// display information about each process in turn
int i = 0;
do
{
// Retrieve the priority class.
dwPriorityClass = 0;
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, pe32.th32ProcessID );
if( hProcess == NULL ) { }
else
{
dwPriorityClass = GetPriorityClass( hProcess );
if( !dwPriorityClass )
CloseHandle( hProcess );
}
process_list[i] = pe32;
i++;
} while( Process32Next( hProcessSnap, &pe32 ) && i <= process_count);
CloseHandle( hProcessSnap );
return( TRUE );
}
现在,是否可以遍历这个进程数组并收集每个进程的完整命令行?我怎样才能做到这一点?
如果它很重要,我会将代码编译为 64 位进程,并且需要主机上运行的所有进程的完整命令行。
对于每个进程 ID:
use OpenProcess()
得到一个HANDLE
到这个过程。
然后使用QueryFullProcessImageName() http://msdn.microsoft.com/en-us/library/windows/desktop/ms684919%28v=vs.85%29.aspx, GetProcessImageFileName() http://msdn.microsoft.com/en-us/library/windows/desktop/ms683217%28v=vs.85%29.aspx, or GetModuleFileNameEx http://msdn.microsoft.com/en-us/library/windows/desktop/ms683198%28v=vs.85%29.aspx获取进程的路径和文件名。
然后使用NtQueryInformationProcess() http://msdn.microsoft.com/en-us/library/windows/desktop/ms684280%28v=vs.85%29.aspx检索进程的地址PEB http://msdn.microsoft.com/en-us/library/windows/desktop/aa813706%28v=vs.85%29.aspx结构,其中包含一个ProcessParameters
包含进程命令行参数的成员(您还可以从PEB
以及)。使用ReadProcessMemory() http://msdn.microsoft.com/en-us/library/windows/desktop/ms680553%28v=vs.85%29.aspx阅读的内容PEB
.
请参阅以下文章了解更多详细信息:
使用 NtQueryInformationProcess 获取进程信息 http://www.codeproject.com/Articles/19685/Get-Process-Info-with-NtQueryInformationProcess
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)