78 lines
2.4 KiB
PHP
78 lines
2.4 KiB
PHP
; =============================================================================
|
|
; Модуль : VMMDev Guest Info
|
|
; Назначение : ReportGuestInfo / ReportGuestInfo2
|
|
; Файл : vmmdev/guest_info.inc
|
|
; =============================================================================
|
|
|
|
; Отправка ReportGuestInfo (REQ 50)
|
|
proc guest_info_report uses ebx esi
|
|
mov esi, [vbox_device.guestinfo_virt]
|
|
mov ebx, [vbox_device.guestinfo_phys]
|
|
test esi, esi
|
|
jz .bad
|
|
test ebx, ebx
|
|
jz .bad
|
|
|
|
stdcall vmmdev_send_request, ebx
|
|
mov eax, [esi + VMMDEV_HEADER.rc]
|
|
test eax, eax
|
|
jnz .error
|
|
|
|
DEBUGF 2, "[VBoxGuest] [VMMDev] Guest info sent (interface 0x%x)\n", VMMDEV_VERSION
|
|
xor eax, eax
|
|
ret
|
|
|
|
.error:
|
|
DEBUGF 2, "[VBoxGuest] [VMMDev] send_guest_info failed, rc=0x%x\n", eax
|
|
mov eax, VERR_GENERAL_FAILURE
|
|
ret
|
|
|
|
.bad:
|
|
mov eax, VERR_INVALID_PARAMETER
|
|
ret
|
|
endp
|
|
|
|
|
|
; Отправка ReportGuestInfo2 (REQ 58), версия заполняется из host_version
|
|
proc guest_info_2_report uses ebx esi edi
|
|
mov esi, [vbox_device.guestinfo2_virt]
|
|
mov ebx, [vbox_device.guestinfo2_phys]
|
|
test esi, esi
|
|
jz .bad
|
|
test ebx, ebx
|
|
jz .bad
|
|
|
|
; Заполнить версию GA из полученной версии хоста
|
|
mov edi, [vbox_device.host_version_virt]
|
|
test edi, edi
|
|
jz .send ; нет данных — отправляем как есть (нули)
|
|
|
|
movzx eax, word [edi + VMMDEV_GET_HOST_VERSION.major]
|
|
mov word [esi + VMMDEV_REPORT_GUEST_INFO2.guest_info.additions_major], ax
|
|
movzx eax, word [edi + VMMDEV_GET_HOST_VERSION.minor]
|
|
mov word [esi + VMMDEV_REPORT_GUEST_INFO2.guest_info.additions_minor], ax
|
|
mov eax, [edi + VMMDEV_GET_HOST_VERSION.build]
|
|
mov dword [esi + VMMDEV_REPORT_GUEST_INFO2.guest_info.additions_build], eax
|
|
mov eax, [edi + VMMDEV_GET_HOST_VERSION.revision]
|
|
mov dword [esi + VMMDEV_REPORT_GUEST_INFO2.guest_info.additions_revision], eax
|
|
|
|
.send:
|
|
stdcall vmmdev_send_request, ebx
|
|
mov eax, [esi + VMMDEV_HEADER.rc]
|
|
test eax, eax
|
|
jnz .error
|
|
|
|
DEBUGF 2, "[VBoxGuest] [VMMDev] Guest info 2 sent (interface 0x%x)\n", VMMDEV_VERSION
|
|
xor eax, eax
|
|
ret
|
|
|
|
.error:
|
|
DEBUGF 2, "[VBoxGuest] [VMMDev] send_guest_info_2 failed, rc=0x%x\n", eax
|
|
mov eax, VERR_GENERAL_FAILURE
|
|
ret
|
|
|
|
.bad:
|
|
mov eax, VERR_INVALID_PARAMETER
|
|
ret
|
|
endp
|