Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с физической памятью [D6, Win95/98, WinME, NT4, Win2k, WinXP]


Izyum ©   (2006-05-17 14:01:00) 

Есть необходимость работы с физической памятью из своей программы. Нужно выделить 64К непрерывной, неперемещаемой, некэшируемой памяти, ну и есно после завершения ее освободить. Есть ли возможность сделать это средствами ВинАПИ из Ринг3? Или это прерагатива Ринг0?

Заранее спасибо!


Сергей М.   (2006-05-18 08:25:00) [1]


> Я же и не говорю, что это неправильно


Нет, это правильно как раз правильно.
А неправильно будет работа в Ринг0 вне контекста драйвера.


Izyum   (2006-05-17 16:45:00) [2]

Я же и не говорю, что это неправильно... Просто хотелось проанализировать _все_ возможные варианты:)


Сергей М.   (2006-05-17 16:43:00) [3]


> казали умные люди - правильным способом является написание
> драйвера, который будет это делать в Ринг0


И они были, imho, правы..


Izyum   (2006-05-17 16:41:00) [4]

MHDD только под ДОСом, что не всегда удобно, а для меня так и воще не удобно, и не умеет прога Димы Постриганя работать в ДМА, только ПИО.
Это же относитс я  и к Викории Сергея Казанского. А идти путем Артема Рубцова и его HDDScan (использование ДевайсИОКонтрол) по некотрым соображениям не хочется.


Игорь Шевченко   (2006-05-17 16:33:00) [5]

Izyum ©   (17.05.06 16:30) [9]


> все это нужно для развития пректа http://dalas.hardw.net


Интересно. А способ какой-нибудь MHDD не проще ? (Загружаться в DOS и делать свое дело)


Izyum   (2006-05-17 16:30:00) [6]

Ясно...
По каместь еще и печально...

Спасибо за внимание!

ЗЫ: все это нужно для развития пректа http://dalas.hardw.net


Игорь Шевченко   (2006-05-17 16:27:00) [7]


> или еще и единственный?


Единственный.


Izyum   (2006-05-17 16:25:00) [8]

Хорошо, уточняю:
необходимо осуществить из программы обмен с дисковой подсистемой в ДМА-режиме, а не в ПИО. Т.е. в дыух словах - программирование БасМастеринга. В общем с проблемой разобрался, но для этого нужно выделить в _физической_ памяти буфер, который будет последовательным (нефрагментированым), неперемещаемым, некэшируемым, выровняным по границе 8 байт. Как сказали умные люди - правильным способом является написание драйвера, который будет это делать в Ринг0. Но хотелось бы выяснить - это только правильный способ или еще и единственный?


Игорь Шевченко   (2006-05-17 16:13:00) [9]

Izyum ©   (17.05.06 14:39) [3]


> Функции типа Virtual**** на скоко я понял работают не с
> физической памятью, а с плоскими 4ГБ, или я ошибаюсь?


Функции работают с вирутальным адресным простанством процесса, страницы которого отображаются на физическую память.
Если ты скажешь, в связи с чем возникла задача, может найтись другой, более оптимальный способ.


Izyum   (2006-05-17 15:51:00) [10]

конечно прочитал:

GlobalAlloc
Функция GlobalAlloc выделяет из кучи указанное число байт. В Win32 менеджер памяти не выполняет различия между локальной и глобальной кучей.

Где в ней написано, что она работает с _физической_ памятью, а не с кучей???


Сергей М.   (2006-05-17 14:55:00) [11]


> Izyum ©   (17.05.06 14:39) [3]


Ты справку к GlobalAlloc() прочитал ? Вник ?


Izyum   (2006-05-17 14:39:00) [12]

Такая необходимость есть!;)

Функции типа Virtual**** на скоко я понял работают не с физической памятью, а с плоскими 4ГБ, или я ошибаюсь?


Игорь Шевченко   (2006-05-17 14:33:00) [13]

Не уверен, но посмотри в сторону VirtualAlloc + VirtualLock


Сергей М.   (2006-05-17 14:08:00) [14]


> Есть ли возможность сделать это средствами ВинАПИ из Ринг3?


Есть.

см. GlobalAlloc()


> необходимость работы с физической памятью


В Ring3 нет такой необходимости.


Наверх

Титульная страница Поиск, карта сайта Написать письмо