zoukankan      html  css  js  c++  java
  • 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是不一样的。

    不过这里存在一个问题就是,对于一个多窗口的进程,会存在查找遗漏的问题。这个方法的原理还是很简单的,思路就是进行窗口遍历。

     

  • 相关阅读:
    奇异值分解SVD
    Google Draco点云压缩
    C++计时函数
    NDT正态分布变换配准
    点云配准 Registration
    图像的距
    镜头基础
    道格拉斯-普克算法
    霍夫变换
    opencv基础
  • 原文地址:https://www.cnblogs.com/matrix-r/p/3307595.html
Copyright © 2011-2022 走看看