调用WinApi查询内存信息

Pnig0s1992:

列出当前系统信息,当前系统内存状况。

枚举进程,列出每个进程所有内存块的页面类型,页面属性,保护属性等信息

//Code by Pnig0s1992
//Date:2012,3,15
#include <stdio.h>
#include <Windows.h>
#include <TlHelp32.h> 

VOID getMemoryInfo(SYSTEM_INFO si,HANDLE hProcess); 

int main(void)
{
    SYSTEM_INFO si;
    MEMORYSTATUS ms;
    ms.dwLength = sizeof(ms);
    GetSystemInfo(&si);
    printf("\n当前内存页大小%uKB",si.dwPageSize/1024);
    printf("\n小于0x%x为系统保留区.",si.lpMinimumApplicationAddress);
    printf("\n大于0x%x为系统内核区.",si.lpMaximumApplicationAddress);
    printf("\nCPU数量:%u",si.dwNumberOfProcessors);
    GlobalMemoryStatus(&ms);
    printf("\n当前系统内存使用率:%u%%:",ms.dwMemoryLoad);
    printf("\n当前系统总物理内存:%uM",ms.dwTotalPhys/1024/1024);
    printf("\n当前系统可用物理内存:%uM",ms.dwAvailPhys/1024/1024);
    printf("\n当前系统总虚拟内存:%uM",ms.dwTotalVirtual/1024/1024);
    printf("\n当前系统可用虚拟内存:%uM",ms.dwAvailVirtual/1024/1024);
    printf("\n当前系统总页文件:%uM",ms.dwTotalPageFile/1024/1024);
    printf("\n当前系统可用页文件:%uM",ms.dwAvailPageFile/1024/1024);
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(pe32);
    HANDLE hProcessSnap;
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if(hProcessSnap == INVALID_HANDLE_VALUE)
    {
        printf("\n获取进程快照失败");
        return -1;
    }else
    {
        Process32First(hProcessSnap,&pe32);
        do
        {
            printf("\n当前进程名:%S PID:%u",pe32.szExeFile,pe32.th32ProcessID);
            if(pe32.th32ProcessID != GetCurrentProcessId())
            {
                HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,pe32.th32ProcessID);
                getMemoryInfo(si,hProcess);
            }
        } while (Process32Next(hProcessSnap,&pe32));
    }
    system("pause");
    return 0;
} 

VOID getMemoryInfo(SYSTEM_INFO si,HANDLE hProcess)
{
    printf("\n内存地址 保护属性 页面类型");
    DWORD dwCurPos = (DWORD)si.lpMinimumApplicationAddress;//第一次查询位置为可访问的最小内存地址
    while(dwCurPos <(DWORD)si.lpMaximumApplicationAddress) //结束条件为最大内存地址
    {
        MEMORY_BASIC_INFORMATION mbi;
        DWORD dwRc = VirtualQueryEx(hProcess,(LPVOID)dwCurPos,&mbi,sizeof(mbi));
        printf("\n0x%x %u %u",mbi.BaseAddress,mbi.AllocationProtect,mbi.Type);
        dwCurPos = (DWORD)mbi.BaseAddress+mbi.RegionSize;//当前块儿基址加块儿大小
    }
}

本文出自 “About:Blank H4cking” 博客,请务必保留此出处http://pnig0s1992.blog.51cto.com/393390/807029

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索内存
, printf
, 系统
, 进程
, 32
当前
显存不够用 调用内存、易语言内存调用dll、显存不够怎么调用内存、内存调用dll、ios 调用相机内存警告,以便于您获取更多的相关知识。

时间: 2024-10-29 15:38:51

调用WinApi查询内存信息的相关文章

asp.net 中调用cmd并查询IP信息

asp.net 中调用cmd并查询ip信息 private static string cmdping(string cmd)   {       process p = new process();       p.startinfo.filename = "cmd.exe";       p.startinfo.useshellexecute = false;       p.startinfo.redirectstandardinput = true;       p.start

.NET获取快递100提供的查询快递信息的方法

  #region 获取快递100提供的查询快递信息的函数    /// <summary>    /// 获取快递100提供的查询快递信息的函数    /// 调用示例:    /// Dictionary<string, string> kuaidi100 = StaticFunApp.GetKuaidi100("优速物流", "669009108318");    ///foreach (KeyValuePair<string,s

python实现上传样本到virustotal并查询扫描信息的方法_python

本文实例讲述了python实现上传样本到virustotal并查询扫描信息的方法.分享给大家供大家参考.具体方法如下: import simplejson import urllib import urllib2 import os MD5 = "5248f774d2ee0a10936d0b1dc89107f1" MD5 = "12fa5fb74201d9b6a14f63fbf9a81ff6" #do not have report on virustotal.co

使用VB.net调用WinAPI方法介绍

本贴精华段:    Declare Auto Function MBox Lib "user32.dll" _       Alias "MessageBox" (ByVal hWnd As Integer, _       ByVal txt As String, ByVal caption As String, _       ByVal Typ As Integer) As Integer    '定义一些要调用参数    Const MB_ICONQUEST

Sybase ASA中查询元信息的几个常用SQL函数

Sybase ASA中查询元信息的几个常用SQL函数: sp_column_privileges Unsupported sp_columns table-name [, table-owner ] [, table-qualifier] [, column-name] 返回指定列的数据类型 sp_databases Unsupported sp_datatype_info Unsupported sp_fkeys pktable_name [, pktable-owner][, pktable

查看Linux系统CPU、内存信息和操作系统的版本信息

经常要查看Linux服务器的CPU,内存信息以及操作系统版本等信息,总结一下常用的命令,以便以后查阅 . 1.查看CPU型号(8个逻辑CPU) [[root@mail ~]# cat /proc/cpuinfo |grep "name" |cut -f2 -d: |uniq -c      8  Intel(R) Xeon(R) CPU           E5506  @ 2.13GHz 2.查看物理CPU个数(两个4核CPU) [root@mail ~]# cat /proc/cp

excel怎么查询版本信息?

  excel怎么查询版本信息? 1.首先打开我们桌面这个excel,看看这个是什么版本 2.我们点击帮助,点击关于这个的版本号 3.版本号出来,我们这是excel2003,下边还有id的 4.我们在打开一个,这个明显比上一个页面更加漂亮 5.我们点击右上角的自定义快速访问工具 6.最后提示我们这个版本是表格2007,其他版本也是大同小异的.

php查询whois信息的方法

  本文实例讲述了php查询whois信息的方法.分享给大家供大家参考.具体如下: 这里使用php通过查询whois信息的网站列表进行查询 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 6

鲁大师内存信息有哪些

内存信息包括: 插槽.品牌.速度.容量.制造日期以及型号和序列号. 检测到的电脑硬件品牌,其品牌或厂商图标会显示在页面右侧,点击这些厂商图标可以访问这些厂商的官方网站.