Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Все не так 28.06.01 10:49 Число просмотров: 738
Автор: prop Статус: Незарегистрированный пользователь
|
> Eto chto pod DOS? GlobalDosAlloc() v WIN32 est > GlobalAlloc() > > > Вот я хочу выделить слово в первом М и записать туда > число. > > DWORD dwBlock; > > UINT uSelector; > //remove//> dwBlock=GlobalDosAlloc(sizeof(UINT)); > > dwBlock = GlobalAlloc(GPTR, sizeof(UINT)); > > > if(!dwBlock) { > > ...не смог выделить > > } > > //remove//> uSelector=LOWORD(dwBlock); > > Теперь, если попытатся записать слово: > //remove//> *uSelector=0xFFFF; > > // BOT TAK > >((DWORDdwBlock) = 0xFFFF;
> >
GlodalDosAlloc в вин32 похерена - правильно.
GlobalAlloc выделяет память из хипа - на абсолютный адрес ее не натравить.
Надо юзать VirtualAlloc или VirtualAllocEx. Они позволяют задать виртуальный адрес, по которому выделить память. Перед вызовом желательно найти свободный кусок памяти (просканировать, вызывая VirtualQuery или VirtualQueryEx).
Самое главное - это будет блок в виртуальной памяти процесса - а в вин32 у каждого процесса своя память... Но под 9х дос-машина мапится во все процессы, в одну и ту же область виртуальной памяти - "под 1М". Поэтому шанс прочитать эту память есть. Там кстати и биос мапится по своему стандартному адресу - можно и его прочитать. А вот найти там свободный блок и выделить его - это вряд ли.
Под НТ все не так, доса там нет, а что там "под 1М" я не помню, но не дос точно.
Кстати, выделять слово бессмысленно - выделяться будет все равно страница - по-моему 4кб на интеле.
Сам никогда в дос-памяти блоки не выделял, но читал их успешно и в 9Х и в НТ, в том числе в чужих процессах. Где-то даже исходник на дельфи валялся - но не обещаю что найду.
|
|
|