Windows API 進程狀態信息函數


這里的進程狀態信息函數主要分為兩類,一類是PS(PROCESS STATUS HELPER) API,另外一類是Th(TOOL HELP) API。

話說第一次遇到這個ToolHelp函數時我在看《windows核心編程》時遇到的。那時還僅僅是簡單的看了一下,並未深入。

Ps API 函數列表及其功能說明:MSDN地址連接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684894(v=vs.85).aspx

使用Ps API需要包含Psapi.h文件以及Psapi.lib

EmptyWorkingSet 從執行的工作集中盡可能的多刪除頁(page),內存優化工具就使用了這個軟件。

  原型:BOOL WINAPI EmptyWorkingSet( _In_  HANDLE hProcess );

 

EnumDeviceDrivers 枚舉設備驅動

  原型:BOOL WINAPI EnumDeviceDrivers( _Out_  LPVOID *lpImageBase, _In_   DWORD cb, _Out_  LPDWORD lpcbNeeded );

 

EnumPageFiles 枚舉頁文件

  原型:BOOL WINAPI EnumPageFiles( _Out_  PENUM_PAGE_CALLBACK pCallbackRoutine, _In_   LPVOID lpContext );

 

EnumProcesses 枚舉進程

  原型:BOOL WINAPI EnumProcesses( _Out_  DWORD *pProcessIds, _In_   DWORD cb, _Out_  DWORD *pBytesReturned );

 

 

EnumProcessModules 枚舉進程模塊

  原型:BOOL WINAPI EnumProcessModules( _In_   HANDLE hProcess, _Out_  HMODULE *lphModule, _In_   DWORD cb, _Out_  LPDWORD lpcbNeeded );

 

GetDeviceDriverBaseName 獲取驅動的base name(我並不清楚base name是什么東西)

  原型:DWORD WINAPI GetDeviceDriverBaseName( _In_   LPVOID ImageBase, _Out_  LPTSTR lpBaseName, _In_   DWORD nSize );

 

GetDeviceDriverFileName 這個是用來獲取驅動的文件名

  原型:DWORD WINAPI GetDeviceDriverFileName( _In_   LPVOID ImageBase, _Out_  LPTSTR lpFilename, _In_   DWORD nSize );

 

GetMappedFileName 這個很函數檢測參數地址是不是在指定進程的地址空間的內存映射文件中,如果是,則返回內存映射文件名

  原型:DWORD WINAPI GetMappedFileName( _In_   HANDLE hProcess, _In_   LPVOID lpv, _Out_  LPTSTR lpFilename, _In_   DWORD nSize );

 

GetModuleBaseName 獲取模塊的基址名稱

  原型:DWORD WINAPI GetModuleBaseName( _In_      HANDLE hProcess, _In_opt_  HMODULE hModule, _Out_     LPTSTR lpBaseName, _In_      DWORD nSize );

 

GetModuleFileNameEx 獲取模塊文件名

  原型:DWORD WINAPI GetModuleFileNameEx( _In_      HANDLE hProcess, _In_opt_  HMODULE hModule, _Out_     LPTSTR lpFilename, _In_      DWORD nSize );

 

GetModuleInformation 獲取模塊文件信息原型:

  原型:BOOL WINAPI GetModuleInformation( _In_   HANDLE hProcess, _In_   HMODULE hModule, _Out_  LPMODULEINFO lpmodinfo, _In_   DWORD cb );

 

GetPerformanceInfo 返回一個包含性能信息的PERFORMANCE_INFORMATION 結構體

  原型:BOOL WINAPI GetPerformanceInfo( _Out_  PPERFORMANCE_INFORMATION pPerformanceInformation, _In_   DWORD cb );

 

GetProcessimagefilename 獲取指定進程的可執行文件名

  原型:DWORD WINAPI GetProcessImageFileName( _In_   HANDLE hProcess, _Out_  LPTSTR lpImageFileName, _In_   DWORD nSize );

 

GetProcessMemoryInfo 通過PROCESS_MEMORY_COUNTERS結構返回指定進程的內存使用信息

  原型:BOOL WINAPI GetProcessMemoryInfo( _In_   HANDLE Process, _Out_  PPROCESS_MEMORY_COUNTERS ppsmemCounters, _In_   DWORD cb );

 

GetWsChanges 返回自 InitializeProcessForWsWatch 函數被調用后添加到工作集(WS:working set)的頁(pages)信息

  原型:BOOL WINAPI GetWsChanges( _In_   HANDLE hProcess, _Out_  PPSAPI_WS_WATCH_INFORMATION lpWatchInfo, _In_   DWORD cb );

 

InitializeProcessForWsWatch 啟動對指定進程的ws監控

  原型:BOOL WINAPI InitializeProcessForWsWatch( _In_  HANDLE hProcess );

 

QueryWorkingSet獲取指定進程位於虛擬地址空間的頁(pages)擴展信息

  原型:BOOL WINAPI QueryWorkingSet( _In_   HANDLE hProcess, _Out_  PVOID pv, _In_   DWORD cb );

 

Ps API的相關結構信息:MSDN地址連接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684898(v=vs.85).aspx

ENUM_PAGE_FILE_INFORMATION

MODULEINFO

PERFORMANCE_INFORMATION

PROCESS_MEMORY_COUNTERS

PROCESS_MEMORY_COUNTERS_EX

PSAPI_WORKING_SET_BLOCK

PSAPI_WORKING_SET_EX_BLOCK

PSAPI_WORKING_SET_EX_INFORMATION

PSAPI_WORKING_SET_INFORMATION

PSAPI_WS_WATCH_INFORMATION

PSAPI_WS_WATCH_INFORMATION_EX

 

ToolHelp API 函數及其功能:MSDN地址連接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686832(v=vs.85).aspx

使用ToolHelp API需要包含TlHelp32.h文件

 

CreateToolhelp32Snapshot  獲取指定進程的快照,包含堆,模塊,線程

 

Heap32First  獲取指定進程的第一個堆塊的信息

Heap32ListFirst  獲取指定進程的第一個堆的信息

Heap32ListNext  獲取下一個指定進程的堆信息

Heap32Next  獲取進程分配的下一個堆塊的信息

Module32First 獲取指定進程的第一個模塊信息

Module32Next 獲取指定進程的下一個模塊信息

Process32First 獲取系統中第一個進程的信息

Process32Next 獲取系統中下一個進程的信息

Thread32First 獲取系統中的第一個線程信息,不論是哪一個進程的

Thread32Next 獲取系統中下一個線程的信息

Toolhelp32ReadProcessMemory 從指定進程的指定地址復制內存數據

ToolHelp API相關結構信息:MSDN地址連接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686844(v=vs.85).aspx

HEAPENTRY32

HEAPLIST32

MODULEENTRY32

PROCESSENTRY32

THREADENTRY32

ToolHelp函數中,其余函數的使用大多都需要CreateToolhelpSnapshot函數返回的句柄。

另外附一個前幾天在網上查到的通過進程句柄獲取窗口句柄的方法:

先調用一個函數,名為:GetTopWindo。最開始傳入參數為0,獲取到一個句柄(應該是explorer的句柄)。然后根據這個句柄調用GetWindowThreadProcessId函數,能獲取到創建這個窗口的線程ID,以及這個窗口所屬的進程ID。在這里獲取到線程ID后,需要做的是將此ID與當前ID進行比較。如果ID相同,就表明找到了窗口的句柄,返回即可。如果不同,那么就要繼續查找,這里使用函數:GetNextWindow( h , GW_HWNDNEXT);。里面的h參數為當前的窗口句柄。此函數的返回值為下一個窗口的句柄,即HWND。不過我也是今天才明確的知道,HWND句柄和HANDLE是不一樣的。

不過這里存在一個問題就是,對於一個多窗口的進程,會存在查找遺漏的問題。這個方法的原理還是很簡單的,思路就是進行窗口遍歷。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM