Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Установка атрибутов защиты памяти ядра. Как?  (Прочитано 4431 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Divine Glitch
Гость
« : 17-09-2004 20:02 » 

Добрый день!


Возникла такая проблема: необходимо изменить атрибут READONLY на READWRITE страницы памяти (есть виртуальный адрес (в верхних 2 gb)). Кто-нибудь знает как?

Пробовал так (выводит ерунду):
Код:
int GetPageAttributes(unsigned long VirtualAddress, unsigned long *PageAttributes)
{
unsigned long *PageTableEntry;

*PageAttributes = 0;


PageTableEntry = (unsigned long *)0xC0000000U + (VirtualAddress >> 12);
DbgPrint("PageDirectoryEntry: %X", *PageTableEntry);

if ((*PageTableEntry)&0x01) {
//*PageAttributes = (*PageTableEntry)&0x00000FFFU;
*PageAttributes = ((*PageTableEntry)&0xFFFFF000U) + (VirtualAddress&0x00000FFFU);//физический адрес
return 0; //status_success
} else {
#if DBG
DbgPrint("PageTableEntry was bad for %x: %X", VirtualAddress, *PageTableEntry);
#endif
return 1; //status_unsuccessfull
}
}
« Последнее редактирование: 01-12-2007 14:29 от Алексей1153++ » Записан
DivineGlitch
Гость
« Ответ #1 : 17-09-2004 20:55 » 

ага, проблема кажется разрешилась Улыбаюсь
Код:
int SetPageAttributes(unsigned long VirtualAddress, ULONG SetOrRestore, ULONG *OriAttr)
{
unsigned long *PageTableEntry;

PageTableEntry = ((ULONG) 0xc0000000 + ((VirtualAddress >> PAGE_SHIFT) * sizeof(ULONG)));

if (SetOrRestore==0)| //set
if (OriAttr!=0) *OriAttr = *PageTableEntry;
*PageTableEntry = *PageTableEntry | 0x00000802;
}else{
if (OriAttr!=0) *PageTableEntry = *OriAttr;
};
return 0;
}
« Последнее редактирование: 01-12-2007 14:29 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines