Files
VBoxGuest/vmmdev/guest_info.inc
2026-03-04 22:03:47 +03:00

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