PDA

Просмотр полной версии : Работа с виртуальной памятью,проблемы



Fektenus
25.09.2006, 09:01
Собственно,имеется данная программа,которая должна резервировать некий регион виртуальной памяти и выводить информацию об этом участке памяти с помощью функции VirtualQuery...Проблемы появляются при выводе на рабочую область информации ,содержащейся в структуре MEMORY_BASIC_INFORMATION ссылка на которую находится, в свою очередь, в функции VirtualQuery...Собственно,необход имо сделать так,чтобы информация из этой структуры выводилась обычным TextOut при выборе пункта меню с идентификатором IDM_VUVOD.Если кто может помочь,то напишите ,как вывести информацию о регионе из функции VirtualQuery с помощью TextOut.Иначе говоря,необходимо при выборе пункта меню с идентификатором IDM_VUVOD сформировать некий цикл вызова функции VirtualQuery,и при каждом вызове формировать строку ,содержащую элементы структуры MEMORY_BASIC_INFORMATION и передавать эту строку в TextOut.И проблема в том,КАК СФОРМИРОВАТЬ эту строку.
Вот листинг программы:

#include <windows.h>
#include "labrab6.h"
#include <stdafx.h>
#define IDC_MYICON 2
#define IDD_LABRAB6_DIALOG 102
#define IDS_APP_TITLE 103
#define IDD_ABOUTBOX 103
#define IDM_ABOUT 104
#define IDM_EXIT 105
#define IDI_LABRAB6 107
#define IDI_SMALL 108
#define IDC_LABRAB6 109
#define IDR_MAINFRAME 128
#define ID_FILE_32771 32771
#define ID_FILE_32772 32772
#define ID_FILE_32773 32773
#define ID_FILE_32774 32774
#define ID_32775 32775
#define ID_32776 32776
#define ID_32777 32777
#define IDM_Sver 32778
#define ID 32779
#define IDM_ 32780
#define IDM_Razv 32781
#define IDM_RAZM 32782
#define IDM_PEREM 32783
#define IDM_ZAKR 32784
#define IDM_VUDEL 32785
#define IDM_VUVOD 32786
#define IDM_UDAL 32787
#define IDM_AVTOR 32788
#define IDC_STATIC -1
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32789
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 110
#endif
#endif
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK AboutDlgProc(HWND, UINT, WPARAM, LPARAM);
TCHAR szAppName[] = TEXT("Virtualmemory");
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd;
PVOID p;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = TEXT("MENUFOR22VARIANT");
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
hwnd = CreateWindow(szAppName, TEXT("Variant22"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
static HINSTANCE hInstance;
static WNDPROC lpfnAboutDlgProc;
PVOID p;
DWORD d;
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
HMENU hMenu;
switch(iMsg)
{
case WM_COMMAND :
hMenu = GetMenu(hwnd);
switch(LOWORD(wParam))
{
case IDM_Sver:
ShowWindow(hwnd,SW_SHOWMINIMIZED);
return 0;

case IDM_Razv:
ShowWindow(hwnd,SW_SHOWMAXIMIZED);
return 0;

case IDM_ZAKR :
SendMessage(hwnd, WM_CLOSE, 0, 0L);
return 0;

case IDM_VUDEL:
{
MEMORY_BASIC_INFORMATION MBI;
p= VirtualAlloc((PVOID)00020000,100*1024,MEM_COMMIT,P AGE_READWRITE);
d=VirtualQuery((PVOID)00020000,&MBI,sizeof(&MBI));
MessageBox(hwnd, TEXT("Регион памяти выделен успешно"),
szAppName, MB_ICONINFORMATION | MB_OK);
}
return 0;
case IDM_VUVOD:

hdc=GetDC(hwnd);
TextOut(hdc,10,10,TEXT("Vnimanie"),sizeof("vnimanie"));
ReleaseDC(hwnd,hdc);
return 0;
break;
case IDM_UDAL:
VirtualFree((PVOID)00020000,0,MEM_RELEASE);
MessageBox(hwnd, TEXT("Регион памяти удален успешно"),
szAppName, MB_ICONINFORMATION | MB_OK);
return 0;
case IDM_AVTOR :
DialogBox(hInstance,TEXT("DIALOGFOR22VARIANT"),hwnd,AboutDlgProc);
return 0;
}
break;
case WM_DESTROY :
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
switch(iMsg)
{
case WM_INITDIALOG :
return TRUE;
case WM_COMMAND :
switch(LOWORD(wParam))
{
case IDOK :
case IDCANCEL :
EndDialog(hDlg, 0);
return TRUE;
}
break;
}
return FALSE;
}
« Последнее