home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / m / msjmar93.zip / MEMMAN.ZIP / VMMAP.ZIP / VMMAP.C < prev    next >
Text File  |  1993-03-01  |  4KB  |  139 lines

  1. /****************************************************************************
  2. Module name: VMMap.C
  3. *****************************************************************************/
  4.  
  5. #include <windows.h>
  6. #include <windowsx.h>
  7. #include <stdio.h>    // for sprintf
  8. #include <string.h>   // for strchr
  9. #include "VMMap.H"
  10.  
  11. HANDLE hFile;
  12.  
  13. void ConstructMemInfoLine (PMEMORY_BASIC_INFORMATION pMBI, LPTSTR szLine) {
  14.    char *sz, szBuf[25];
  15.  
  16.    sprintf(szLine, "%08lX   ", pMBI->BaseAddress);
  17.  
  18.    sprintf(strchr(szLine, 0),
  19.       (pMBI->State != MEM_FREE) ? "%08lX" : "   N/A  ",
  20.       pMBI->AllocationBase);
  21.  
  22.    if (pMBI->State != MEM_FREE) {
  23.       switch (pMBI->AllocationProtect) {
  24.          case PAGE_NOACCESS: sz = "PAGE_NOACCESS"; break;
  25.          case PAGE_READONLY: sz = "PAGE_READONLY"; break;
  26.          case PAGE_READWRITE: sz = "PAGE_READWRITE"; break;
  27.          default:
  28.             sprintf(sz = szBuf, "Unknown(%d)",
  29.                pMBI->AllocationProtect);
  30.             break;
  31.       }
  32.    } else sz = "N/A";
  33.    sprintf(strchr(szLine, 0), "   %-14s   ", sz);
  34.  
  35.    sprintf(strchr(szLine, 0), "%10lu   ", pMBI->RegionSize);
  36.  
  37.    switch (pMBI->State) {
  38.       case MEM_COMMIT: sz = "MEM_COMMIT"; break;
  39.       case MEM_FREE: sz = "MEM_FREE"; break;
  40.       case MEM_RESERVE: sz = "MEM_RESERVE"; break;
  41.       default:
  42.          sprintf(sz = szBuf, "Unknown(%d)",
  43.             pMBI->State);
  44.          break;
  45.    }
  46.    sprintf(strchr(szLine, 0), "%-11s   ", sz);
  47.  
  48.    if ((pMBI->State != MEM_FREE) &&
  49.        (pMBI->State != MEM_RESERVE)) {
  50.       switch (pMBI->Protect) {
  51.          case PAGE_NOACCESS: sz = "PAGE_NOACCESS"; break;
  52.          case PAGE_READONLY: sz = "PAGE_READONLY"; break;
  53.          case PAGE_READWRITE: sz = "PAGE_READWRITE"; break;
  54.          default:
  55.             sprintf(sz = szBuf, "Unknown(%d)",
  56.                pMBI->Protect);
  57.             break;
  58.       }
  59.    } else sz = "N/A";
  60.    sprintf(strchr(szLine, 0), "%-14s   ", sz);
  61.  
  62.    if ((pMBI->State != MEM_FREE)) {
  63.       switch (pMBI->Type) {
  64.          case MEM_PRIVATE: sz = "MEM_PRIVATE"; break;
  65.          default:
  66.             sprintf(sz = szBuf, "Unknown(%d)",
  67.                pMBI->Type);
  68.             break;
  69.       }
  70.    } else sz = "N/A";
  71.    sprintf(strchr(szLine, 0), "%-11s", sz);
  72. }
  73.  
  74.  
  75. BOOL Dlg_OnInitDialog (HWND hwnd, HWND hwndFocus, LPARAM lParam) {
  76.    HWND hWndLB = GetDlgItem(hwnd, ID_LISTBOX);
  77.    MEMORY_BASIC_INFORMATION MemoryBasicInfo;
  78.    PVOID lpAddress = 0;
  79.    char szLine[100];
  80.  
  81.    hFile = CreateFile("VMMAP.DAT", GENERIC_WRITE, 0, NULL,
  82.                       CREATE_ALWAYS, 0, NULL);
  83.  
  84.    // Walk the Virtual address space adding entries to the ListBox.
  85.    do {
  86.       int x = VirtualQuery(lpAddress, &MemoryBasicInfo,
  87.          sizeof(MemoryBasicInfo));
  88.  
  89.       if (x != sizeof(MemoryBasicInfo)) {
  90.          // Attempt to walk beyond the range which Windows allows.
  91.          break;
  92.       }
  93.  
  94.  
  95.       // Construct the line to be displayed an add it to the listbox.
  96.       ConstructMemInfoLine(&MemoryBasicInfo, szLine);
  97.       ListBox_AddString(hWndLB, szLine);
  98.  
  99.       { DWORD dw;
  100.       WriteFile(hFile, szLine, strlen(szLine), &dw, NULL);
  101.       WriteFile(hFile, "\r\n", 2, &dw, NULL);
  102.       }
  103.  
  104.       // Get address of the next region to test.
  105.       lpAddress = ((char *) MemoryBasicInfo.BaseAddress) +
  106.          MemoryBasicInfo.RegionSize;
  107.    } while (lpAddress != 0);
  108.    CloseHandle(hFile);
  109.  
  110.    return(TRUE);
  111. }
  112.  
  113.  
  114. void Dlg_OnCommand (HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) {
  115.    switch (id) {
  116.       case IDCANCEL: EndDialog(hwnd, id); break;
  117.    }
  118. }
  119.  
  120.  
  121. BOOL CALLBACK DlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  122.    BOOL fProcessed = TRUE;
  123.    switch (uMsg) {
  124.       HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
  125.       HANDLE_MSG(hDlg, WM_COMMAND, Dlg_OnCommand);
  126.  
  127.       default: fProcessed = FALSE; break;
  128.    }
  129.    return(fProcessed);
  130. }
  131.  
  132.  
  133. int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  134.    LPSTR lpszCmdLine, int nCmdShow) {
  135.  
  136.    DialogBox(hInstance, MAKEINTRESOURCE(DLG_VMMAP), NULL, DlgProc);
  137.    return(0);
  138. }
  139.