Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MisterMe
7 / 7 / 0
Регистрация: 25.03.2013
Сообщений: 117
#1

Почему не работает ограничение доступа к виртуальной странице? - C++

25.03.2013, 21:59. Просмотров 356. Ответов 2
Метки нет (Все метки)

Почему-то я могу записывать данные на виртуальную страницу с доступом PAGE_NOACCESS (так же и с PAGE_READONLY)
А после записи - могу спокойно считывать из этих страниц.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include "stdafx.h"
#include <windows.h>
#include <iostream>
 
using std::cin;
using std::cout;
using std::string;
#define endl "\n";
 
 
 
void Start (PVOID *pvMm)
{
      PVOID pvMem;
     cout<<"What kind of access will virtual page have?\n1 - PAGE_NOACCESS\n2 - PAGE_READONLY"<<endl;
    int iChoise;
    cin>>iChoise;
    switch (iChoise) 
    {
      case 1: 
           {
                     pvMem= VirtualAlloc(NULL, 99 * 1024, MEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS);
                     cout <<"\n Created virtual page. Access - PAGE_NOACCES"<<endl;
                     
           }break;
      case 2: 
           {
                  pvMem= VirtualAlloc(NULL, 99 * 1024, MEM_RESERVE | MEM_COMMIT, PAGE_READONLY);
                   cout <<"\n Created virtual page. Access - PAGE_READONLY"<<endl;
                  
           }break;
               
               default: {cout<<"Good bye, idiot!"<<endl; return;}
    }
    
    
    pvMm=&pvMem;
}
 
void TryRead (PVOID *pvMem)
{
 
    __try{
      char*  test = *((char* *)*pvMem);
   cout<<test;
    }
    __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION){cout<<"Error while reading from virtual page"; return;}
             
   
}
 
 
 
void TryWrite (PVOID *pvMem) 
{
    __try{
        
        char* s = new char [50];
        cin>>s;
    *((char* *)*pvMem) = s;
    }
    __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION){cout<<"Error while writing to virtual page"; return;}
}
 
 
void Trylock (PVOID *pvMem)
{
 
 
    if (!VirtualLock(*pvMem, (DWORD)(99*1024)))  
    {
        cout<<"Can't to lock virtual page"<<endl;
        return;
    }
    else 
    {
        cout<<"Lock virtual page - ok!"<<endl;
    }
 
}
 
void ShowTime (PVOID *pvMem)
{
    PVOID d = pvMem;
    Start(pvMem);
    while (1) 
    {
        cout<<"\nWhat do you want to try??\n 1 - try to write \n 2 - try to read \n 3 - try to lock \n 4 - exit"<<endl;
        int choise;
        cin>>choise;
 
        switch (choise)
        {
        case 1:
        {
            TryWrite(&d);
        }break;
        case 2:
        {
            TryRead(&d);
        }break;
        case 3:
        {
            Trylock(&d);
        }break;
        case 4:
        {
            return;
        }break;
        default: return;
        }
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
   PVOID pvMem;
   ShowTime (&pvMem);
   return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2013, 21:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не работает ограничение доступа к виртуальной странице? (C++):

Нарушение прав доступа к виртуальной функции - C++
Добрый день! Начал недавно изучать работу с файлами и попытался реализовать следующее: Есть базовый класс person, у которого 3...

почему обявление уровня доступа является нежелательным способом предявления доступа, в отличии от использования пространстрва имён? - C++
почему обявление уровня доступа является нежелательным способом предявления доступа, в отличии от использования пространстрва имён?

Ограничение доступа к файлу - C++
Короче такая ситуация Есть 2 процесса 1)my_proc.exe(моя программа), 2)game_proc.exe(программа написанная не мной - исходника нет)() -&gt; ...

Mutex ограничение доступа к переменным класса - C++
Доброго времени суток. Подскажите пожалуйста, что я делаю не так? class Bitmap { private: mutex...

Почему в VC нет виртуальной клавиши типа VK_ENTER? - C++
Почему в VC нет виртуальной клавиши типа VK_ENTER? Как тогда поймать нажатие на Enter? Кстати, а что такое VK_RETURN?

Почему вызывается перегрузка виртуальной функции из приватной секции дочернего класса? - C++
Как вообще такое происходит class A { public: virtual void foo(){std::cout&lt;&lt;&quot;A\n&quot;; } }; class B:public A { private: ...

2
nonedark2008
931 / 670 / 147
Регистрация: 28.07.2012
Сообщений: 1,827
25.03.2013, 22:15 #2
MisterMe, у тебя дерьмо с указателями.
1
MisterMe
7 / 7 / 0
Регистрация: 25.03.2013
Сообщений: 117
25.03.2013, 22:24  [ТС] #3
nonedark2008, Точно! Увидел. Заменил

C++
1
PVOID d = pvMem;
на

C++
1
PVOID d = *pvMem;
и все пашет!
Спасибо большое!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2013, 22:24
Привет! Вот еще темы с ответами:

Не работает вызов виртуальной функции из класса потомка - C++
Есть код: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;list&gt; #include &lt;algorithm&gt; #include &lt;string&gt; #include &lt;sstream&gt; ...

В чем разница между виртуальной и чисто виртуальной функцией? - C++
в чем разница между виртуальной и чисто виртуальной функцией? virtual void print(){..} virtual void ex(..)=0;

Почему выводится в виде таблицы и почему не работает сортировка - C++
почему выводится в виде таблицы? почему не работает сортировка? и как туда можно вставить классы комнат? hotel.h #include...

Ограничение доступа к странице - PHP
Как можно ограничить доступ к странице? Например: у меня есть страница которая выполняется раз в 5 минут, можно ли запретить доступ к этой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru