(转)SystemProcessesAndThreadsInformation
生活随笔
收集整理的這篇文章主要介紹了
(转)SystemProcessesAndThreadsInformation
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
http://hi.baidu.com/hanjdud8606/item/7a970408a95acc843d42e27f
NTSTATUS NTAPI ZwQuerySystemInformation(ULONG SystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength,PULONG ReturnLength );第一個參數(shù)是一個枚舉類型,傳入的是你需要查詢的信息的類型,如果你要查詢進(jìn)程的相關(guān)信息,則你需要傳入SystemProcessesAndThreadsInformation,以下是這個enmu類型的定義。
typedef enum _SYSTEM_INFORMATION_CLASS {SystemBasicInformation, // 0 Y NSystemProcessorInformation, // 1 Y NSystemPerformanceInformation, // 2 Y NSystemTimeOfDayInformation, // 3 Y NSystemNotImplemented1, // 4 Y NSystemProcessesAndThreadsInformation, // 5 Y NSystemCallCounts, // 6 Y NSystemConfigurationInformation, // 7 Y NSystemProcessorTimes, // 8 Y NSystemGlobalFlag, // 9 Y YSystemNotImplemented2, // 10 Y NSystemModuleInformation, // 11 Y NSystemLockInformation, // 12 Y NSystemNotImplemented3, // 13 Y NSystemNotImplemented4, // 14 Y NSystemNotImplemented5, // 15 Y NSystemHandleInformation, // 16 Y NSystemObjectInformation, // 17 Y NSystemPagefileInformation, // 18 Y NSystemInstructionEmulationCounts, // 19 Y NSystemInvalidInfoClass1, // 20SystemCacheInformation, // 21 Y YSystemPoolTagInformation, // 22 Y NSystemProcessorStatistics, // 23 Y NSystemDpcInformation, // 24 Y YSystemNotImplemented6, // 25 Y NSystemLoadImage, // 26 N YSystemUnloadImage, // 27 N YSystemTimeAdjustment, // 28 Y YSystemNotImplemented7, // 29 Y NSystemNotImplemented8, // 30 Y NSystemNotImplemented9, // 31 Y NSystemCrashDumpInformation, // 32 Y NSystemExceptionInformation, // 33 Y NSystemCrashDumpStateInformation, // 34 Y Y/NSystemKernelDebuggerInformation, // 35 Y NSystemContextSwitchInformation, // 36 Y NSystemRegistryQuotaInformation, // 37 Y YSystemLoadAndCallImage, // 38 N YSystemPrioritySeparation, // 39 N YSystemNotImplemented10, // 40 Y NSystemNotImplemented11, // 41 Y NSystemInvalidInfoClass2, // 42SystemInvalidInfoClass3, // 43SystemTimeZoneInformation, // 44 Y NSystemLookasideInformation, // 45 Y NSystemSetTimeSlipEvent, // 46 N YSystemCreateSession, // 47 N YSystemDeleteSession, // 48 N YSystemInvalidInfoClass4, // 49SystemRangeStartInformation, // 50 Y NSystemVerifierInformation, // 51 Y YSystemAddVerifier, // 52 N YSystemSessionProcessesInformation // 53 Y N }SYSTEM_INFORMATION_CLASS;當(dāng)我們第一個參數(shù)傳入的是SystemProcessesAndThreadsInformation則返回的一片內(nèi)存空間一個PSYSTEM_PROCESSES的結(jié)構(gòu)。
typedef struct _SYSTEM_PROCESSES {ULONG NextEntryDelta; //構(gòu)成結(jié)構(gòu)序列的偏移量;ULONG ThreadCount; //線程數(shù)目;ULONG Reserved1[6];LARGE_INTEGER CreateTime; //創(chuàng)建時間;LARGE_INTEGER UserTime;//用戶模式(Ring 3)的CPU時間;LARGE_INTEGER KernelTime; //內(nèi)核模式(Ring 0)的CPU時間;UNICODE_STRING ProcessName; //進(jìn)程名稱;KPRIORITY BasePriority;//進(jìn)程優(yōu)先權(quán);ULONG ProcessId; //進(jìn)程標(biāo)識符;ULONG InheritedFromProcessId; //父進(jìn)程的標(biāo)識符;ULONG HandleCount; //句柄數(shù)目;ULONG Reserved2[2];VM_COUNTERS VmCounters; //虛擬存儲器的結(jié)構(gòu),見下;IO_COUNTERS IoCounters; //IO計數(shù)結(jié)構(gòu),見下;SYSTEM_THREADS Threads[1]; //進(jìn)程相關(guān)線程的結(jié)構(gòu)數(shù)組 }SYSTEM_PROCESSES,*PSYSTEM_PROCESSES;如果要遍歷系統(tǒng)中的進(jìn)程,我們只需要使用NextEntryDelta這個指針即可。
獲取進(jìn)程示例代碼#include <windows.#include <ntsecapi.h>
#include "stdio.h"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; // 進(jìn)程名. DWORD BasePriority; DWORD ProcessId;DWORD InheritedFromProcessId;DWORD HandleCount;DWORD Reserved2[2];DWORD VmCounters; DWORD dCommitCharge; PVOID ThreadInfos[1]; } SYSTEM_PROCESS_INFORMATION, * PSYSTEM_PROCESS_INFORMATION;#define SystemProcessesAndThreadsInformation 5void main() {HMODULE hNtDLL = GetModuleHandle( "ntdll.dll" );if (!hNtDLL )return;ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)GetProcAddress(hNtDLL,"ZwQuerySystemInformation");ULONG cbBuffer = 0x20000; // 設(shè)置緩沖大小,與系統(tǒng)有關(guān).LPVOID pBuffer = NULL;pBuffer = malloc(cbBuffer);if (pBuffer == NULL)
return;ZwQuerySystemInformation(SystemProcessesAndThreadsInformation, pBuffer, cbBuffer, NULL);PSYSTEM_PROCESS_INFORMATION pInfo = (PSYSTEM_PROCESS_INFORMATION)pBuffer;for (;;){printf("ProcessID: %d (%ls)\n", pInfo->ProcessId, pInfo->ProcessName.Buffer);if (pInfo->NextEntryDelta == 0)break;// 查找下一個進(jìn)程的結(jié)構(gòu)地址.pInfo = (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pInfo) + pInfo->NextEntryDelta);}
free(pBuffer);getchar(); //暫停. }
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/himessage/archive/2013/01/25/2876175.html
總結(jié)
以上是生活随笔為你收集整理的(转)SystemProcessesAndThreadsInformation的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server 中 RAISERR
- 下一篇: 利用Theme自定义Activity进入