Воспринимает два параметра: 1-й – количество байт памяти, 2-й флаги, определяющие тип выделяемой памяти. Наиболее часто встречаемый флаг – HEAPZEROINIT, который означает, что выделяемую память необходимо инициализировать нулями. Без этого флага состояние памяти не определено.
Возвращает в EAX линейный адрес начала выделенного участка в случае успешного выполнения операции.
Пример вызова:
VMMCall _HeapAllocate, <65536, HEAPZEROINIT>
mov [Buf1], eax
_HeapFree – освобождает выделенную драйверу память. Вызывается с двумя параметрами: 1-й – адрес памяти, предварительно выделенной с помощью _HeapAllocate, второй – зарезервирован и должен быть ноль.
Пример:
VMMCall _HeapFree, <[Buf1], 0>
Следует отметить, что драйверу не следует слишком часто обращаться к функциям выделения и освобождений системной памяти, т.к. при этом она фрагментируется (т.е. разбивается на маленькие кусочки), а средств, позволяющих дефрагментировать системную «кучу» в Windows 9x нет.
Поэтому, разработчик драйвера должен вначале оценить требуемое ему количество памяти, а после этого начинать создавать драйвер.
В данном методическом пособии был затронут очень важный для современного этапа развития компьютерной техники вопрос – защита и безопасность электронной информации от вредоносного программного обеспечения (или компьютерных вирусов).
При анализе причины заражения компьютера вирусом и принципа попадания вируса в компьютер было принято решение создать антивирусный монитор, который будет встраиваться в ядро операционной системы и контролировать операции с файлами, производимыми ею. При нахождении вируса, монитор должен запретить доступ к такому файлу.
Для решения поставленной задачи был выбран вариант написания драйвера виртуального устройства (файл VxD) под операционные системы Windows-95 OSR2, Windows 98 и Windows Millennium Edition с помощью применения программирования на языке низкого уровня – ассемблере.
В результате проведенной работы был создан монитор, который проверяет все открываемые текстовые файлы на компьютере на наличие «вируса», т.е. в данном случае – это заранее определенная последовательность байт.
При тестировании монитора было выявлено, что он 100% отслеживает все обращения к файловой системе, независимо от того, где они производятся (проводник Windows, Windows Commander, Far Manager, Дос-задача, другой драйвер и т.д.). На основании этого можно считать, что поставленная при написании этого методического пособия цель была достигнута.
Файл «AV.ASM»
.686p
include vmm.inc
include vwin32.inc
include shell.inc
include ifs.inc
include ifsmgr.inc
;-- Declare device
DECLARE_VIRTUAL_DEVICE AV, 4, 0, AV_Control,\
UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER
;-- Locked data
VxD_LOCKED_DATA_SEG
pOldFSHook dd 0 ;ptr to Old IFS hook
Buf1 dd 0 ;ptr to Memory buffer
FileNameBuf dd 0
FileBuf dd 0 ;ptr to File buffer
MyReq dd 0 ;Flag = 1 if my request, 0 otherwise
HelloTxt db 'Antiviral monitor started...', 0
VirusTxt db '!Virus!', 0
VirusFoundTxt db 'Warning! Virus found in this file:', 0
VxD_LOCKED_DATA_ENDS
;-- Locked code
VxD_LOCKED_CODE_SEG
Begin_control_dispatch AV
Control_Dispatch W32_DeviceIoControl, OnDeviceIoControl
Control_Dispatch SYS_DYNAMIC_DEVICE_INIT, OnSysInit
Control_Dispatch SYS_DYNAMIC_DEVICE_EXIT, OnSysExit
End_control_dispatch AV
;-- OnSysInit
BeginProc FileSysApiHook
push ebp
mov ebp,esp
@@pISF equ ebp + 08h
@@FuncNum equ ebp + 0Ch
@@Drive equ ebp + 10h
@@ResFlag equ ebp + 14h
@@CodePage equ ebp + 18h
@@PioReq equ ebp + 1Ch
cmp [MyReq], 0
jnz @@def
cmp dword ptr [@@FuncNum], IFSFN_OPEN
jz @@OpFile
@@def:
mov eax, [pOldFSHook]
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.