Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2011, 05:21   #1
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию Виртуальная память

Написал программу, которая выделяет указанное количество байт и меняет атрибуты их защиты на указанные, но вылазит ошибка при исрользовании функции VirtualProtect. Что я делаю не так?
Код:
//---------------------------------------------------------------------------

...
public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
        HANDLE lpAddres;
        DWORD flOldProtect;
        TMemoryBasicInformation mem;
        int temp;
        void func();
...

//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        lpAddres = VirtualAlloc(NULL, Edit6->Text.ToInt(), MEM_RESERVE, PAGE_EXECUTE_READWRITE);
        func();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        if(ComboBox1->Text == "PAGE_NOACCESS")
                         temp = 1;
        if(ComboBox1->Text == "PAGE_READONLY")
                         temp = 2;
        if(ComboBox1->Text == "PAGE_READWRITE")
                         temp = 4;
        if(ComboBox1->Text == "PAGE_WRITECOPY")
                         temp = 8;
        if(ComboBox1->Text == "PAGE_EXECUTE")
                         temp = 16;
        if(ComboBox1->Text == "PAGE_EXECUTE_READ")
                         temp = 32;
        if(ComboBox1->Text == "PAGE_EXECUTE_READWRITE")
                         temp = 64;
        if(ComboBox1->Text == "PAGE_EXECUTE_WRITECOPY")
                         temp = 128;
        VirtualProtect(&lpAddres, Edit6->Text.ToInt(), temp, &flOldProtect);
        func();
}
//---------------------------------------------------------------------------
void  TForm1::func()
{
        VirtualQuery(&lpAddres, &mem, sizeof(MEMORY_BASIC_INFORMATION));
        switch(mem.AllocationProtect)
        {
                case 1:
                         Edit1->Text = "PAGE_NOACCESS";
                case 2:
                         Edit1->Text = "PAGE_READONLY";
                case 4:
                         Edit1->Text = "PAGE_READWRITE";
                case 8:
                         Edit1->Text = "PAGE_WRITECOPY";
                case 16:
                         Edit1->Text = "PAGE_EXECUTE";
                case 32:
                         Edit1->Text = "PAGE_EXECUTE_READ";
                case 64:
                         Edit1->Text = "PAGE_EXECUTE_READWRITE";
                case 128:
                         Edit1->Text = "PAGE_EXECUTE_WRITECOPY";
                case 256:
                         Edit1->Text = "PAGE_GUARD";
                case 512:
                         Edit1->Text = "PAGE_NOCACHE";
                case 1024:
                         Edit1->Text = "PAGE_WRITECOMBINE";
        }
        Edit2->Text = mem.RegionSize;
        Edit3->Text = mem.State;
        switch(mem.State)
        {
                case 4096:
                         Edit3->Text = "MEM_COMMIT";
                case 8192:
                         Edit3->Text = "MEM_RESERVE";
                case 65536:
                         Edit3->Text = "MEM_FREE";
        }
        switch(mem.Protect)
        {
                case 1:
                         Edit4->Text = "PAGE_NOACCESS";
                case 2:
                         Edit4->Text = "PAGE_READONLY";
                case 4:
                         Edit4->Text = "PAGE_READWRITE";
                case 8:
                         Edit4->Text = "PAGE_WRITECOPY";
                case 16:
                         Edit4->Text = "PAGE_EXECUTE";
                case 32:
                         Edit4->Text = "PAGE_EXECUTE_READ";
                case 64:
                         Edit4->Text = "PAGE_EXECUTE_READWRITE";
                case 128:
                         Edit4->Text = "PAGE_EXECUTE_WRITECOPY";
                case 256:
                         Edit4->Text = "PAGE_GUARD";
                case 512:
                         Edit4->Text = "PAGE_NOCACHE";
                case 1024:
                         Edit4->Text = "PAGE_WRITECOMBINE";
        }
        switch(mem.Type)
        {
                case 131072:
                         Edit5->Text = "MEM_PRIVATE";
                case 262144:
                         Edit5->Text = "MEM_MAPPED";
                case 16777216:
                         Edit5->Text = "MEM_TOP_DOWN";
        }
}
ordoss вне форума Ответить с цитированием
Старый 12.01.2011, 18:00   #2
like-nix
Форумчанин
 
Регистрация: 09.11.2009
Сообщений: 104
По умолчанию

Потомучто в VirtualProtect
flNewProtect
The memory protection option. This parameter can be one of the memory protection constants.

For pages that are already valid, this setting is ignored if it conflicts with the page's current setting specified using VirtualAlloc or VirtualAllocEx.
like-nix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Виртуальная клавиатура basil Общие вопросы Delphi 6 02.10.2014 08:16
виртуальная машина technik_312 Софт 8 12.01.2010 15:06
- Что есть вообще виртуальная операционка? - Для каких целей она нужна? Alex Cones Операционные системы общие вопросы 7 24.12.2009 22:54
Виртуальная клавиатура Alex Cones Мультимедиа в Delphi 2 10.05.2009 20:03
Физическая, виртуальная память процесса!!!! metamfetamin Помощь студентам 2 07.11.2007 09:27