Уроки Iczelion'а

       

Отображение MessageBox'а


VxD может использовать сервисы Virtual Shell Device, чтобы взаимодействовать с пользователями. Один такой сервис, который мы используем, называется SHELL_Message. SHELL_Message - это регистровый сервис. Вы можете ему параметры через регистры.

  • ebx - хэндл виртуальной машины, которая ответственнена за сообщение.
  • eax - флаги MessageBox. Вы можете посмотреть их в shell.inc. Они начинаются с MB_.
  • ecx - 32-битное линейный адрес сообщения, которое должно быть отображено.
  • edi - 32-битный линейный адрес заголовка message box'а.
  • esi - 32-битный линейный адрес callback-функций, необходимой для того, чтобы узнать pеакцию пользователя. Если вам это не нужно, используйте NULL.
  • edx - дополнительные данные, которые будут передаваться callback-функции (если вы указали ее в esi).

По возвращении флаг переноса сбрасывается, если вызов прошел успешно, в противном случае флаг переноса устанавливается .

ПРИМЕР

.386p include vmm.inc include shell.inc

DECLARE_VIRTUAL_DEVICE MESSAGE,1,0, MESSAGE_Control, UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER

Begin_control_dispatch MESSAGE Control_Dispatch Create_VM, OnVMCreate

Control_Dispatch VM_Terminate2, OnVMClose End_control_dispatch MESSAGE

VxD_PAGEABLE_DATA_SEG MsgTitle db "VxD MessageBox",0 VMCreated db "A VM is created",0 VMDestroyed db "A VM is destroyed",0

VxD_PAGEABLE_DATA_ENDS

VxD_PAGEABLE_CODE_SEG

BeginProc OnVMCreate mov ecx, OFFSET32 VMCreated CommonCode: VMMCall Get_sys_vm_handle

mov eax,MB_OK+MB_ICONEXCLAMATION mov edi, OFFSET32 MsgTitle xor esi,esi xor edx,edx

VxDCall SHELL_Message ret EndProc OnVMCreate

BeginProc OnVMClose mov ecx,OFFSET32 VMDestroyed jmp CommonCode

EndProc OnVMClose VxD_PAGEABLE_CODE_ENDS

end



Содержание раздела