Проблемы с VirtualLocal.
От: D-NICKNAME  
Дата: 19.03.03 13:38
Оценка:
Всем привет!
У меня проблема, мне нужно доступиться у определённому адресу памяти и поменять значение, к примеру:
я писал след образом:

PUINT p1;
p1 = (PUINT) 0xA7000024;
*p1 |= 0x00010000;

Понял, что для доступа к физ памяти необходим VirtualLocal, но никак не могу понять, как в этом случае сюда прикрутить.

Подскажите, если кто в курсе.

Заранее благодарен.
Re: Проблемы с VirtualLocal.
От: SergH Россия  
Дата: 19.03.03 13:41
Оценка:
Здравствуйте, D-NICKNAME, Вы писали:

DN>Всем привет!

DN>У меня проблема, мне нужно доступиться у определённому адресу памяти и поменять значение, к примеру:
DN>я писал след образом:

DN>PUINT p1;

DN>p1 = (PUINT) 0xA7000024;
DN>*p1 |= 0x00010000;

DN>Понял, что для доступа к физ памяти необходим VirtualLocal, но никак не могу понять, как в этом случае сюда прикрутить.


DN>Подскажите, если кто в курсе.


DN>Заранее благодарен.


К физической памяти из обычного приложения ты так просто не залезешь. Ни одной стандартной API функцией (как-то можно в NT\2000 через CreateFile("что-то"), где-то это было). Хуже того, скорее всего тебе туда и не надо. Опиши задачу.
Делай что должно, и будь что будет
Re: Проблемы с VirtualLocal.
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 19.03.03 13:44
Оценка:
Здравствуйте, D-NICKNAME, Вы писали:

[]

Приложению пользовательского режима память выше 0x8000000 не доступна. Ты лезешь выше. (0xA7000024) и VirtualAlloc тут не при чем. С помощью него память во втором гигабайте не выделется. Она может выделяться неявно при создании какого-либо объекта.
Re: Проблемы с VirtualLocal.
От: Patalog Россия  
Дата: 19.03.03 13:47
Оценка:
Здравствуйте, D-NICKNAME, Вы писали:

Смотри топики tyt
Автор: Den''
Дата: 17.07.02
и tyt
Автор: SPavel
Дата: 17.01.03
Почетный кавалер ордена Совка.
Re[2]: Проблемы с VirtualLocal.
От: D-NICKNAME  
Дата: 19.03.03 13:51
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, D-NICKNAME, Вы писали:


DN>>Всем привет!

DN>>У меня проблема, мне нужно доступиться у определённому адресу памяти и поменять значение, к примеру:
DN>>я писал след образом:

DN>>PUINT p1;

DN>>p1 = (PUINT) 0xA7000024;
DN>>*p1 |= 0x00010000;

DN>>Понял, что для доступа к физ памяти необходим VirtualLocal, но никак не могу понять, как в этом случае сюда прикрутить.


DN>>Подскажите, если кто в курсе.


DN>>Заранее благодарен.


SH>К физической памяти из обычного приложения ты так просто не залезешь. Ни одной стандартной API функцией (как-то можно в NT\2000 через CreateFile("что-то"), где-то это было). Хуже того, скорее всего тебе туда и не надо. Опиши задачу.


На самом деле я это использую под WinCE. Мне надо, чтобы адрес 0xA7000024 соответствовал физическому. Выполнение этой процедуры, нужно для включение подсветки кнопок под Mitec.
Коментарии, которые мне дали были следующие:
"Что касается адресов, то их надо получать через VirtualAlloc, чтоб они соответсвовали физическим."

А изначально решение этой проблемы было продемонстрировано как:
unsigned int p1,p2;

p1=0xA7000024;
p2=0xA7000018;

*p1 |= 0x00010000;// LED ON
*p2 |= 0x00010000;// LED OFF
Re[2]: Проблемы с VirtualLocal.
От: D-NICKNAME  
Дата: 19.03.03 13:52
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Здравствуйте, D-NICKNAME, Вы писали:


AS>[]


AS>Приложению пользовательского режима память выше 0x8000000 не доступна. Ты лезешь выше. (0xA7000024) и VirtualAlloc тут не при чем. С помощью него память во втором гигабайте не выделется. Она может выделяться неявно при создании какого-либо объекта.


На самом деле я это использую под WinCE. Мне надо, чтобы адрес 0xA7000024 соответствовал физическому. Выполнение этой процедуры, нужно для включение подсветки кнопок под Mitec.
Коментарии, которые мне дали были следующие:
"Что касается адресов, то их надо получать через VirtualAlloc, чтоб они соответсвовали физическим."

А изначально решение этой проблемы было продемонстрировано как:
unsigned int p1,p2;

p1=0xA7000024;
p2=0xA7000018;

*p1 |= 0x00010000;// LED ON
*p2 |= 0x00010000;// LED OFF
Re: Проблемы с VirtualLocal.
От: payglobal  
Дата: 19.03.03 13:55
Оценка:
Здравствуйте, D-NICKNAME, Вы писали:

DN>PUINT p1;

DN>p1 = (PUINT) 0xA7000024;
DN>*p1 |= 0x00010000;

DN>Понял, что для доступа к физ памяти необходим VirtualLocal, но никак не могу понять, как в этом случае сюда прикрутить.


В физическую память можно писАть только с 0го кольца.
в 9х можно обмануть и выйти на 0е кольцо
а в NT придется драйверок писать
... << RSDN@Home 1.0 beta 6a >>
Re[3]: Проблемы с VirtualLocal.
От: SergH Россия  
Дата: 19.03.03 13:58
Оценка:
Здравствуйте, D-NICKNAME, Вы писали:

DN>На самом деле я это использую под WinCE.


Про неё я мало чего знаю.

DN>Мне надо, чтобы адрес 0xA7000024 соответствовал физическому.


Какому именно физическому? Ты хочешь сказать, что у тебя больше 2Гб оперативки?

DN>"Что касается адресов, то их надо получать через VirtualAlloc, чтоб они соответсвовали физическим."

Не понимаю смысла этой фразы.

DN>А изначально решение этой проблемы было продемонстрировано как:

DN>unsigned int p1,p2;
DN>
DN>p1=0xA7000024;
DN>p2=0xA7000018;
DN>
DN>*p1 |= 0x00010000;// LED ON
DN>*p2 |= 0x00010000;// LED OFF
И этого кода. Хотя, может в WinCE....
Делай что должно, и будь что будет
Re[2]: Проблемы с VirtualLocal.
От: D-NICKNAME  
Дата: 19.03.03 13:58
Оценка:
Здравствуйте, payglobal, Вы писали:

P>Здравствуйте, D-NICKNAME, Вы писали:


DN>>PUINT p1;

DN>>p1 = (PUINT) 0xA7000024;
DN>>*p1 |= 0x00010000;

DN>>Понял, что для доступа к физ памяти необходим VirtualLocal, но никак не могу понять, как в этом случае сюда прикрутить.


P>В физическую память можно писАть только с 0го кольца.

P>в 9х можно обмануть и выйти на 0е кольцо
P>а в NT придется драйверок писать

На самом деле я это использую под WinCE. Мне надо, чтобы адрес 0xA7000024 соответствовал физическому. Выполнение этой процедуры, нужно для включение подсветки кнопок под Mitec.
Коментарии, которые мне дали были следующие:
"Что касается адресов, то их надо получать через VirtualAlloc, чтоб они соответсвовали физическим."

А изначально решение этой проблемы было продемонстрировано как:
unsigned int p1,p2;

p1=0xA7000024;
p2=0xA7000018;

*p1 |= 0x00010000;// LED ON
*p2 |= 0x00010000;// LED OFF
Re[4]: Проблемы с VirtualLocal.
От: D-NICKNAME  
Дата: 19.03.03 15:26
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, D-NICKNAME, Вы писали:


DN>>На самом деле я это использую под WinCE.


SH>Про неё я мало чего знаю.


DN>>Мне надо, чтобы адрес 0xA7000024 соответствовал физическому.


SH>Какому именно физическому? Ты хочешь сказать, что у тебя больше 2Гб оперативки?


DN>>"Что касается адресов, то их надо получать через VirtualAlloc, чтоб они соответсвовали физическим."

SH>Не понимаю смысла этой фразы.

DN>>А изначально решение этой проблемы было продемонстрировано как:

DN>>unsigned int p1,p2;
DN>>
DN>>p1=0xA7000024;
DN>>p2=0xA7000018;
DN>>
DN>>*p1 |= 0x00010000;// LED ON
DN>>*p2 |= 0x00010000;// LED OFF
SH>И этого кода. Хотя, может в WinCE....

Допустим, что да.

Как просто прочитать и записать в адрес значение, используя VirtualLocal. (На значения пока не надо обращать внимание)
Re[5]: Проблемы с VirtualLocal.
От: SergH Россия  
Дата: 19.03.03 16:43
Оценка:
Здравствуйте, D-NICKNAME, Вы писали:

DN>>>Мне надо, чтобы адрес 0xA7000024 соответствовал физическому.

SH>>Какому именно физическому? Ты хочешь сказать, что у тебя больше 2Гб оперативки?

Всё-таки, уточни, нужно ли какое-то соответствие виртуального адреса физическому или нет, если нужно, то какое. Просто я не могу даже представить, зачем оно может понадобиться. И я сомневаюсь, что по фиксированному в физической памяти адресу есть какие-то структуры. Да и адрес уж больно большой. Я могу предположить, что эти стуктуры есть по фиксированному в виртуальной памяти адресе. Таких и в NT полно. PEB тот же..

DN>Допустим, что да.


DN>Как просто прочитать и записать в адрес значение, используя VirtualLocal. (На значения пока не надо обращать внимание)


Есть функция VirtualAllocEx. Она умеет выделять память по заданному виртуальному адресу. Соответственно, выделяешь и пишешь.. Но, как тебе уже сказал Alexey Shirshov, она работает только для первых двух гигабайт. В нормальных ОС. Кстати, есл по этому адресу уже что-то хранится, то и выделять ничего не надо — оно уже выделено. Просто к таким адресам у тебя нет доступа.

Резюме: либо тебя накололи, либо в WinCE все сильно отличается от нормальных Windows-ов.
Делай что должно, и будь что будет
Re: Проблемы с VirtualLocal.
От: Whisperer  
Дата: 19.03.03 16:48
Оценка: 21 (1)
Здравствуйте, D-NICKNAME, Вы писали:

[skip]

DN>Это не WinNT, а WinCE...


А сразу это нельзя было сказать . Я в WinCE нешарю .

Но VirtualAlloc тебе точно неподойдет — так как занимается резервированием памяти и автоматически заполняет ее нулями

Но посмотрев MSDN могу сказать что тебе нужно

1.GlobalMemoryStatus (это так что-бы знать сколько ее есть )
2. IsBadWritePtr
3. IsBadReadPtr

Пришлось второй раз запостить а то сообщения сейчас удалят
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.