[cpp]
view plain
copy
#include <stdio.h> #include <windows.h> #include <TLHELP32.H> #include <ntsecapi.h> #include "psapi.h" #pragma comment (lib,"psapi.lib") void SetColor(unsigned short ForeColor=4,unsigned short BackGroundColor=0) { HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor); }; BOOL GetProcessList(){ HANDLE hProcessSnap; HANDLE hModuleSnap; BOOL bRet=FALSE; BOOL bModule=FALSE; PROCESSENTRY32 pe32={0}; MODULEENTRY32 me32={0}; pe32.dwSize=sizeof(PROCESSENTRY32); me32.dwSize=sizeof(MODULEENTRY32); hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); bRet=Process32First(hProcessSnap,&pe32); while(bRet){ SetColor(0,2); printf("进程:%s\n",pe32.szExeFile); SetColor(0,7); hModuleSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0); bModule=Module32First(hModuleSnap,&me32); while(bModule){ printf("\t模块:%s\n",me32.szExePath); bModule=Module32Next(hModuleSnap,&me32); } bRet=Process32Next(hProcessSnap,&pe32); } CloseHandle(hProcessSnap); CloseHandle(hModuleSnap); return TRUE; } BOOL GetProcessListByPSAPi(){ DWORD ProcessCount; DWORD cbNeeded; DWORD ProcessId[1024]; EnumProcesses(ProcessId,sizeof(ProcessId),&cbNeeded); ProcessCount = cbNeeded/sizeof(DWORD); HMODULE hModule; char szPath[MAX_PATH]; for(DWORD i = 0; i < ProcessCount; i ++) { HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,ProcessId[i]); if(hProcess) { EnumProcessModules(hProcess,&hModule,sizeof(hModule),&cbNeeded); GetModuleFileNameEx(hProcess,hModule,szPath,sizeof(szPath)); SetColor(0,6); printf("PID:%d ",ProcessId[i]); SetColor(0,7); printf("\t%s\n",szPath); } else continue; } return TRUE; } typedef struct _WTS_PROCESS_INFO{ DWORD SessionId; DWORD ProcessId; LPTSTR pProcessName; PSID pUserSid; }WTS_PROCESS_INFO,*PWTS_PROCESS_INFO; typedef HANDLE (WINAPI *WTSOPENSERVER)(LPTSTR pServerName); typedef BOOL (WINAPI *WTSENUMRATEPROCESSES)(HANDLE hServer,DWORD Reserved,DWORD Version,PWTS_PROCESS_INFO* ppProcessInfo,DWORD *pCount); BOOL GetProcessByWTSAPI(){ HMODULE hWtsApi32 = LoadLibrary("wtsapi32.dll"); if(hWtsApi32==NULL){ printf("请升级sdk,没有找到wtsapi.dll"); return FALSE; } WTSOPENSERVER pWtsOpenServer = (WTSOPENSERVER)GetProcAddress(hWtsApi32,"WTSOpenSeverA"); WTSENUMRATEPROCESSES pWtsEnumrateProcesses = (WTSENUMRATEPROCESSES)GetProcAddress(hWtsApi32,"WTSEnumrateProcessesA"); char *szServerName = " 1FB978629C104D4"; HANDLE hWtsServer = pWtsOpenServer(szServerName); PWTS_PROCESS_INFO pWtsapi; DWORD dwCount; if(!pWtsEnumrateProcesses(hWtsServer,0,1,&pWtsapi,&dwCount)) return FALSE; for(DWORD i = 0; i < dwCount; i ++) { printf("ProcessID: %d (%s)\n",pWtsapi[i].ProcessId,pWtsapi[i].pProcessName); } return TRUE; } #define SystemProcessesAndThreadsInformation 5 typedef DWORD (WINAPI *ZWQUERYSYSTEMINFORMATION) (DWORD, PVOID, DWORD, PDWORD); typedef struct _SYSTEM_PROCESS_INFORMATION{ DWORD NextEntryDelta; DWORD ThreadCount; DWORD Reserved1[6]; FILETIME ftCreateTime; FILETIME ftUserTime; FILETIME ftKernelTime; UNICODE_STRING ProcessName; DWORD BasePriority; DWORD ProcessId; DWORD InheritedFromProcessId; DWORD HandleCount; DWORD Reserved2[2]; DWORD VmCounters; DWORD dCommitCharge; PVOID ThreadInfos[1]; }SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION; BOOL GetProcessListByNTDLL(){ HMODULE hNtDll = GetModuleHandle("ntdll.dll"); ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)GetProcAddress(hNtDll,"ZwQuerySystemInformation"); ULONG cbBuffer = 0x10000; LPVOID pBuffer = NULL; pBuffer = malloc(cbBuffer); if(pBuffer == NULL) return -1; ZwQuerySystemInformation(SystemProcessesAndThreadsInformation,pBuffer,cbBuffer,NULL); PSYSTEM_PROCESS_INFORMATION pInfo = (PSYSTEM_PROCESS_INFORMATION)pBuffer; for(;;) { SetColor(0,13); printf("PID:%d ",pInfo->ProcessId); SetColor(0,7); printf("\t%ls\n",pInfo->ProcessName.Buffer); if(pInfo->NextEntryDelta == 0) break; pInfo = (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pInfo)+pInfo->NextEntryDelta); } free(pBuffer); return TRUE; } void main(){ GetProcessListByNTDLL(); }
原文地址
http://blog.csdn.net/earbao/article/details/8464715
相关资源:C语言 ExitWindowsEx()函数 调用多个API,获取关机进程特权,重新启动计算机