64,654
社区成员
发帖
与我相关
我的任务
分享
#include <TlHelp32.h>
bool QueryModuleInfo( DWORD processid )
{
DWORD testprocessid = 3212;
bool ret = 0;
HANDLE hSnap;
MODULEENTRY32 me32;
HANDLE m_hProcess = OpenProcess( PROCESS_ALL_ACCESS, 0, testprocessid );
hSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, GetProcessId( m_hProcess ) );
if ( hSnap != INVALID_HANDLE_VALUE )
{
me32.dwSize = sizeof( MODULEENTRY32 );
if ( !Module32First( hSnap, &me32 ) )
return false;
CloseHandle( hSnap );
}
return true;
}
BOOL GetProcessPathByPId( const DWORD dwProcessId, TCHAR *cstrPath )
{
HANDLE hProcess = NULL;
BOOL bSuccess = FALSE;
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ , FALSE, dwProcessId );
do
{
if ( NULL == hProcess )
{
break;
}
TCHAR szPath[MAX_PATH + 1] = {0};
HMODULE hMod = NULL;
DWORD cbNeeded = 0;
if( FALSE == EnumProcessModules( hProcess, &hMod, sizeof( hMod ), &cbNeeded ) )
{
break;
}
if ( 0 == GetModuleFileNameEx( hProcess, hMod, szPath, MAX_PATH ) )
{
break;
}
wcscpy(cstrPath ,szPath);
bSuccess = TRUE;
} while( 0 );
if ( NULL != hProcess )
{
CloseHandle( hProcess );
hProcess = NULL;
}
return bSuccess;
}
#include <WtsApi32.h>
#pragma comment(lib,"WtsApi32.lib")
SID_NAME_USE sUse;
WTS_PROCESS_INFO *pProInfo,*pTemp;
DWORD dwRes;
DWORD dwSize = MAX_PATH;
WCHAR wzUserName[MAX_PATH];
WCHAR wzDomainName[MAX_PATH];
if(WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE,0,1,&pProInfo,&dwRes))
{
pTemp = pProInfo;
for (DWORD i = 0; i < dwRes;i ++)
{
//if (pTemp->ProcessId == dwProcess) //可以获取特定进程
{
if(LookupAccountSid(NULL,pTemp->pUserSid,wzUserName,&dwSize,wzDomainName,&dwSize,&sUse))
{
wprintf(_T("%d %d %s %s %s\r\n"),i,pTemp->ProcessId,pTemp->pProcessName,wzUserName,wzDomainName);
}
}
pTemp ++;
}
WTSFreeMemory(pProInfo);
}