|
|
|
|
SHOWMEM и указатель адреса среды PSP
Другим полезным значением, сохраняемым в PSP, является адрес сегмента блока среды процесса. Мы не возвращались к этому входу в связи с тем, что он
требовал последующего разъяснения, но так как теперь мы обладаем полной информацией, необходимой для понимания всей программы SHOWMEM, включая
подпрограмму ShowMCBOwner, то:
- найдите начальный блок управления памятью, используя прерывание int 52h;
- используйте поле владельца в блоке MCB в качестве адреса PSP;
- проверьте PSP путем проверки первых двух байтов для прерывания int 20h;
- если владельцем MCB является PSP, то извлеките адрес среды. Если PSP не является владельцем, то владельцем должна быть MS-DOS;
- вычтите единицу из адреса сегмента среды для получения MCB среды, и извлеките из него размер среды;
- проверьте среду на наличие двойного нуля, который сигнализирует о конце строк ASCIIZ;
- проверьте процесс пользователя на наличие сигнатуры 0001. Если сигнатура 0001 найдена, то печатайте следующее имя. Если сигнатура 0001
отсутствует, то процесс должен быть COMMAND.COM или эквивалентным командным процессом;
- если текущий MCB не является последним, то найдите следующий MCB путем добавления размера блока (плюс 1) к адресу MCB;
- повторите выполнение со второго шага.
Программа SHOWMEM демонстрирует внутренние взаимосвязи, существующие внутри DOS и показывает как можно перейти от блока управления памятью к PSP,
к блоку среды и обратно к MCB среды, выбирая необходимые данные.
|
|