颈椎牵引器哪种款式好:几种获取进程列表的方法

来源:百度文库 编辑:偶看新闻 时间:2024/04/20 16:01:41
几种获取进程列表的方法1.CreateToolhelp32Snapshot法:// //////////////////////////////////////////////////////////////////////////
// // CreateToolhelp32Snapshot 法            #include
// //////////////////////////////////////////////////////////////////////////
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
BOOL bRet;
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
bRet = Process32First(hProcessSnap,&pe32);
while (bRet)
{
bRet = Process32Next(hProcessSnap,&pe32);
printf("%s\n",&pe32.szExeFile);
}
return 0;
复制代码
如果想输出文件路径,在其中加入提权代码后再OpenProcess,GetModuleFileNameEx即可。
2.EnumProcesses 法//////////////////////////////////////////////////////////////////////////
// EnumProcesses 法      #include    #pragma comment(lib,"Psapi.lib")
//////////////////////////////////////////////////////////////////////////
DWORD PID[1024];
DWORD needed,NumProcess;
EnumProcesses(PID,sizeof(PID),&needed);
NumProcess = needed/sizeof(DWORD);
char FilePatch[MAX_PATH];
for (DWORD i=0;i{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,PID[i]);
if (hProcess)
{
GetModuleFileNameEx(hProcess,NULL,FilePatch,sizeof(FilePatch));
printf("%s\n",FilePatch);
}
}
CloseHandle(hProcess);
printf("一共%d个进程\n",NumProcess);
return 0;
复制代码
3.WTSOpenServer 法//////////////////////////////////////////////////////////////////////////
// WTSOpenServer 法   #include #pragma comment(lib,"Wtsapi32.lib")   用nbtstat -an获取本机NetBios名称,并在命令行下输入即可
//////////////////////////////////////////////////////////////////////////
char *szServerName = argv[1];
PWTS_PROCESS_INFO wts;
DWORD dwCount;
HANDLE hWtsServer = WTSOpenServer(szServerName);
if(!WTSEnumerateProcesses(hWtsServer,0,1,&wts,&dwCount))
return 0;
for (DWORD i=0;i{
printf("%s\n",wts[i].pProcessName);
}
return 0;
复制代码
4. ZwQuerySystemInformation 法//////////////////////////////////////////////////////////////////////////
// ZwQuerySystemInformation 法
//////////////////////////////////////////////////////////////////////////
/*
* Author: Leng_que
* Date: 2010年1月26日23:44:28
* E-mail: [email]leng_que@yahoo.com.cn[/email]
* Description: 演示了如何通过ZwQuerySystemInformation这个函数获取系统的相关信息
*/
#include
#include
typedef LONG NTSTATUS;
#define STATUS_SUCCESS                  ((NTSTATUS)0x00000000L)
#define STATUS_UNSUCCESSFUL             ((NTSTATUS)0xC0000001L)
#define STATUS_NOT_IMPLEMENTED          ((NTSTATUS)0xC0000002L)
#define STATUS_INVALID_INFO_CLASS       ((NTSTATUS)0xC0000003L)
#define STATUS_INFO_LENGTH_MISMATCH     ((NTSTATUS)0xC0000004L)
typedef enum _SYSTEM_INFORMATION_CLASS
{
SystemBasicInformation,                 // 0 Y N
SystemProcessorInformation,             // 1 Y N
SystemPerformanceInformation,           // 2 Y N
SystemTimeOfDayInformation,             // 3 Y N
SystemNotImplemented1,                  // 4 Y N
SystemProcessesAndThreadsInformation,   // 5 Y N
SystemCallCounts,                       // 6 Y N
SystemConfigurationInformation,         // 7 Y N
SystemProcessorTimes,                   // 8 Y N
SystemGlobalFlag,                       // 9 Y Y
SystemNotImplemented2,                  // 10 Y N
SystemModuleInformation,                // 11 Y N
SystemLockInformation,                  // 12 Y N
SystemNotImplemented3,                  // 13 Y N
SystemNotImplemented4,                  // 14 Y N
SystemNotImplemented5,                  // 15 Y N
SystemHandleInformation,                // 16 Y N
SystemObjectInformation,                // 17 Y N
SystemPagefileInformation,              // 18 Y N
SystemInstructionEmulationCounts,       // 19 Y N
SystemInvalidInfoClass1,                // 20
SystemCacheInformation,                 // 21 Y Y
SystemPoolTagInformation,               // 22 Y N
SystemProcessorStatistics,              // 23 Y N
SystemDpcInformation,                   // 24 Y Y
SystemNotImplemented6,                  // 25 Y N
SystemLoadImage,                        // 26 N Y
SystemUnloadImage,                      // 27 N Y
SystemTimeAdjustment,                   // 28 Y Y
SystemNotImplemented7,                  // 29 Y N
SystemNotImplemented8,                  // 30 Y N
SystemNotImplemented9,                  // 31 Y N
SystemCrashDumpInformation,             // 32 Y N
SystemExceptionInformation,             // 33 Y N
SystemCrashDumpStateInformation,        // 34 Y Y/N
SystemKernelDebuggerInformation,        // 35 Y N
SystemContextSwitchInformation,         // 36 Y N
SystemRegistryQuotaInformation,         // 37 Y Y
SystemLoadAndCallImage,                 // 38 N Y
SystemPrioritySeparation,               // 39 N Y
SystemNotImplemented10,                 // 40 Y N
SystemNotImplemented11,                 // 41 Y N
SystemInvalidInfoClass2,                // 42
SystemInvalidInfoClass3,                // 43
SystemTimeZoneInformation,              // 44 Y N
SystemLookasideInformation,             // 45 Y N
SystemSetTimeSlipEvent,                 // 46 N Y
SystemCreateSession,                    // 47 N Y
SystemDeleteSession,                    // 48 N Y
SystemInvalidInfoClass4,                // 49
SystemRangeStartInformation,            // 50 Y N
SystemVerifierInformation,              // 51 Y Y
SystemAddVerifier,                      // 52 N Y
SystemSessionProcessesInformation       // 53 Y N
} SYSTEM_INFORMATION_CLASS;
typedef struct _LSA_UNICODE_STRING
{
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING, UNICODE_STRING, *PUNICODE_STRING;
typedef struct _CLIENT_ID
{
HANDLE UniqueProcess;
HANDLE UniqueThread;
} CLIENT_ID;
typedef enum _THREAD_STATE
{
StateInitialized,
StateReady,
StateRunning,
StateStandby,
StateTerminated,
StateWait,
StateTransition,
StateUnknown
} THREAD_STATE;
typedef enum _KWAIT_REASON
{
Executive,
FreePage,
PageIn,
PoolAllocation,
DelayExecution,
Suspended,
UserRequest,
WrExecutive,
WrFreePage,
WrPageIn,
WrPoolAllocation,
WrDelayExecution,
WrSuspended,
WrUserRequest,
WrEventPair,
WrQueue,
WrLpcReceive,
WrLpcReply,
WrVirtualMemory,
WrPageOut,
WrRendezvous,
Spare2,
Spare3,
Spare4,
Spare5,
Spare6,
WrKernel
} KWAIT_REASON;
typedef struct _IO_COUNTERS
{
LARGE_INTEGER ReadOperationCount;   //I/O读操作数目
LARGE_INTEGER WriteOperationCount; //I/O写操作数目
LARGE_INTEGER OtherOperationCount; //I/O其他操作数目
LARGE_INTEGER ReadTransferCount;    //I/O读数据数目
LARGE_INTEGER WriteTransferCount;   //I/O写数据数目
LARGE_INTEGER OtherTransferCount;   //I/O其他操作数据数目
} IO_COUNTERS, *PIO_COUNTERS;
typedef struct _VM_COUNTERS
{
ULONG PeakVirtualSize;              //虚拟存储峰值大小
ULONG VirtualSize;                  //虚拟存储大小
ULONG PageFaultCount;               //页故障数目
ULONG PeakWorkingSetSize;           //工作集峰值大小
ULONG WorkingSetSize;               //工作集大小
ULONG QuotaPeakPagedPoolUsage;      //分页池使用配额峰值
ULONG QuotaPagedPoolUsage;          //分页池使用配额
ULONG QuotaPeakNonPagedPoolUsage;   //非分页池使用配额峰值
ULONG QuotaNonPagedPoolUsage;       //非分页池使用配额
ULONG PagefileUsage;                //页文件使用情况
ULONG PeakPagefileUsage;            //页文件使用峰值
} VM_COUNTERS, *PVM_COUNTERS;
typedef LONG KPRIORITY;
typedef struct _SYSTEM_THREADS
{
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER CreateTime;
ULONG WaitTime;
PVOID StartAddress;
CLIENT_ID ClientId;
KPRIORITY Priority;
KPRIORITY BasePriority;
ULONG ContextSwitchCount;
THREAD_STATE State;
KWAIT_REASON WaitReason;
} SYSTEM_THREADS, *PSYSTEM_THREADS;
typedef struct _SYSTEM_PROCESSES
{
ULONG NextEntryDelta;
ULONG ThreadCount;
ULONG Reserved1[6];
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
UNICODE_STRING ProcessName;
KPRIORITY BasePriority;
ULONG ProcessId;
ULONG InheritedFromProcessId;
ULONG HandleCount;
ULONG Reserved2[2];
VM_COUNTERS VmCounters;
IO_COUNTERS IoCounters;
SYSTEM_THREADS Threads[1];
} SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
typedef struct _SYSTEM_BASIC_INFORMATION
{
BYTE Reserved1[24];
PVOID Reserved2[4];
CCHAR NumberOfProcessors;
} SYSTEM_BASIC_INFORMATION;
typedef NTSTATUS (WINAPI *NTQUERYSYSTEMINFORMATION)(IN SYSTEM_INFORMATION_CLASS, IN OUT PVOID, IN ULONG, OUT PULONG OPTIONAL);
int main(void)
{
HINSTANCE ntdll_dll = GetModuleHandle("ntdll.dll");
if ( ntdll_dll!=NULL )
{
NTQUERYSYSTEMINFORMATION dwFunAddress = (NTQUERYSYSTEMINFORMATION)GetProcAddress(ntdll_dll, "ZwQuerySystemInformation");
if ( dwFunAddress!=NULL )
{
//执行 SystemBasicInformation
SYSTEM_BASIC_INFORMATION sbi = {0};
NTSTATUS status = dwFunAddress(SystemBasicInformation, (PVOID)&sbi, sizeof(sbi), NULL);
if ( status == STATUS_SUCCESS )
{
printf("处理器个数:%d\r\n", sbi.NumberOfProcessors);
printf("\r\n");
}
else
{
printf("\r\n SystemBasicInformation error");
}
//执行 SystemProcessesAndThreadsInformation
PSYSTEM_PROCESSES pSp=NULL;
ULONG retureSize=0;
status = dwFunAddress(SystemProcessesAndThreadsInformation, NULL, 0, &retureSize);
if ( status == STATUS_INFO_LENGTH_MISMATCH )
{
unsigned char *buf = new unsigned char[retureSize];
if ( buf!=NULL )
{
status = dwFunAddress(SystemProcessesAndThreadsInformation, (PVOID)buf, retureSize, NULL);
if ( status == STATUS_SUCCESS )
{
pSp = (PSYSTEM_PROCESSES)buf;
printf("===============所有进程信息=============\r\n");
do {
printf("进程ID:%d\r\n", pSp->ProcessId);
printf("进程名:");
wprintf(L"%s\r\n", pSp->ProcessName.Buffer);
printf("线程数:%d\r\n", pSp->ThreadCount);
printf("工作集大小:%dKB\r\n", pSp->VmCounters.WorkingSetSize/1024);
printf("\r\n\r\n");
pSp = (PSYSTEM_PROCESSES)( (unsigned long)pSp + pSp->NextEntryDelta );
} while ( pSp->NextEntryDelta != 0 );
printf("========================================\r\n");
delete[] buf;
buf = NULL;
pSp = NULL;
}
else if ( status == STATUS_UNSUCCESSFUL )
{
printf("\r\n STATUS_UNSUCCESSFUL");
}
else if ( status == STATUS_NOT_IMPLEMENTED )
{
printf("\r\n STATUS_NOT_IMPLEMENTED");
}
else if ( status == STATUS_INVALID_INFO_CLASS )
{
printf("\r\n STATUS_INVALID_INFO_CLASS");
}
else if ( status == STATUS_INFO_LENGTH_MISMATCH )
{
printf("\r\n STATUS_INFO_LENGTH_MISMATCH");
}
}
else
{
printf("\r\n new operation error!");
}
}
}
else
{
printf("\r\n get ZwQuerySystemInformation address error!");
}
FreeLibrary(ntdll_dll);
}
system("pause > nul");
return 0;
}
复制代码