Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Все так, если не так. 28.06.01 11:12 Число просмотров: 732
Автор: Xan Статус: Незарегистрированный пользователь
|
> > 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Х и в НТ, в том числе в чужих процессах. > Где-то даже исходник на дельфи валялся - но не обещаю что > найду.
Да.
В 16-битном приложении(извини, но я думаю ты спрашиваешь именно про это)
слово или к примеру кусок кода можно записать так :
LPSTR lpDosMem;
DWORD dwBlock;
dwBlock=GlobalDosAlloc(sizeof(UINT));
if(!dwBlock) {
...не смог выделить
}
lpDosMem = (LPSTR) MAKELONG(0,LOWORD(dwDosMem));
lpDosMem[0]=0x90;
lpDosMem[1]=...
В общем, все пишет.
|
|
|