![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с физической памятью [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 нет такой необходимости.