none
请教真机上CreateToolhelp32Snapshot问题 RRS feed

  • 问题

  • 下面代码在真机上马上出错,不知道怎么回事? 是不是需要签名?而且在模拟器上OpenProcess只能打开2次,包括NK.exe还有自己的程序,请问是怎么回事的? 谢谢。
    HANDLE procSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
       if(procSnap == INVALID_HANDLE_VALUE)
       {
         //真机上出错。
           return FALSE;
       }
       PROCESSENTRY32 pe32 = { 0 };
       pe32.dwSize = sizeof( PROCESSENTRY32 );
       char           szFileName[ MAX_PATH ] ;
       HANDLE         hProcess ;
       DWORD dwRes = 0;
       DWORD idx;
       HMODULE hMod;
       DWORD addr;
       strResult = "";
       CString str;
       HMODULE hModule;
       DWORD  dwSize;
       DWORD offset = 0;
       BOOL bRet = Process32First(procSnap,&pe32);
       while(bRet)
       {
         //wprintf(L"PID: %d (%s) ", procEntry.th32ProcessID, procEntry.szExeFile);
        //
            szFileName[0] = 0 ;
           
            hProcess = OpenProcess(
                PROCESS_CREATE_THREAD |
    PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_READ |
    PROCESS_VM_WRITE,
                FALSE, pe32.th32ProcessID) ;
     }
     if(hProcess)
    {
    CloseHandle( hProcess ) ;
                hProcess =NULL;
    }
        }
            bRet = Process32Next(procSnap, &pe32);
        //
       }
       CloseHandle(procSnap);
    2009年10月22日 2:56

答案

  • 默认情况下CreateToolhelp32Snapshot生成的快照包含所有的heap,我们可以增加TH32CS_SNAPNOHEAPS标识来解决。用下面的参数来调用这个方法:

    CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPNOHEAPS, 0);



    Please remember to mark the replies as answers if they help and unmark them if they provide no help
    • 已标记为答案 anyjoy 2009年10月27日 7:54
    2009年10月27日 7:53
    版主

全部回复

  • 获取的错误居然是内存部够(8). 但是我查了一下可用内存,用GlobalMemoryStatus查到的可用内存还有10来M.
    2009年10月22日 6:50
  • 默认情况下CreateToolhelp32Snapshot生成的快照包含所有的heap,我们可以增加TH32CS_SNAPNOHEAPS标识来解决。用下面的参数来调用这个方法:

    CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPNOHEAPS, 0);



    Please remember to mark the replies as answers if they help and unmark them if they provide no help
    • 已标记为答案 anyjoy 2009年10月27日 7:54
    2009年10月27日 7:53
    版主
  • 默认情况下CreateToolhelp32Snapshot生成的快照包含所有的heap,我们可以用下面的参数来调用这个方法:

    CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPNOHEAPS, 0);



    Please remember to mark the replies as answers if they help and unmark them if they provide no help

    你好,我的机器上用了这种方法也是不行,后来我干脆用了多个CreateToolhelp32Snapshot,就解决了,谢谢.
    2009年10月27日 7:54