virtualquery()这个函数你可以用它来得到

解决方案 »

  1.   

    assert001(true):这个函数只有在 win2000下才可以用的。我要在任何系统下都 行。 qish(chen:
       我试 一下
      

  2.   

    GeProcessMemoryInfo 要在2000下用才行。
    virtualqueryex为什么我得到的大小始终是0??
      

  3.   

    要得到一个程序所占的内存大小等情况,可以用VirtualQuery()或者VirtualQueryEx()函数。其中后者在Windows NT 3.1及其以后的版本和Window95及其以后的系统中均支持。VirtualQueryEx函数的功能是提供了一指定线程在某虚拟地址空间的一些相邻且属性相同的内存页的信息,它的原型是这样的:
    DWORD VirtualQueryEx(
      HANDLE hProcess,                     // handle to process
      LPCVOID lpAddress,                   // address of region
      PMEMORY_BASIC_INFORMATION lpBuffer,  // information buffer
      SIZE_T dwLength                      // size of buffer
    );该函数的返回值是在information buffer中实际返回的字节数。如果在调用的时候传递了一个核心态的指针给VirtualQueryEx函数,则会导致没有信息返回,这是由于安全性的要求,在这种情况下,返回值总是0。这是一种调用该函数,返回值为正常的做法,您可以参考一下:unsigned long GetTotalCommittedMemory(){
    //HANDLE handle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE);
    HANDLE handle = GetCurrentProcess(); MEMORY_BASIC_INFORMATION mi; LPVOID pAddr = 0L; DWORD dwTotalCommit = 0; DWORD retvalue = 0; while ( (retvalue = VirtualQueryEx(handle, pAddr, &mi, sizeof(MEMORY_BASIC_INFORMATION))) == sizeof(MEMORY_BASIC_INFORMATION)) { // Count allocated memory
    // retvalue在我的机器上正常时返回28(WinXP) if (mi.State == MEM_COMMIT) dwTotalCommit += mi.RegionSize; pAddr = ((BYTE*) mi.BaseAddress + mi.RegionSize); } return dwTotalCommit;}关于进一步的信息,您可以参考:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/memman_6im0.asp- 微软全球技术中心 VC技术支持本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。为了为您创建更好的讨论环境,请参加我们的用户满意度调查
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
      

  4.   

    用CreateToolhelp32Snapshot (98 2000都有)
      

  5.   

    if  (mi.State  ==  MEM_COMMIT && (MEM_IMAGE==mi.Type))好像加上这句得出来得总和好像都不对
      

  6.   

    是和win2000中看到的不一样?   首先感谢各位在百忙之中回答我的问题。我给帖子加点分。请各位回头看看:还有点小问题:就是当我用VirtualQueryEx得到相关的内存信息后。就得到我baseAddress传递给一个
    ReadProcessMemory函数。结果我始终读取的到的数据是自己的程序中的。连程序的源代码都读出来了。
    可以保证的是ReadProcssMemory中的handle为其它的程序的。????