Files
VBoxGuest/data/core/structs.inc
2026-03-04 22:03:47 +03:00

297 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
; =============================================================================
; VBoxGuest : Data / VMMDev структуры
; Назначение: ABI структуры протокола VMMDev (точное соответствие заголовкам VBox)
; Файл : data/core/structs.inc
; =============================================================================
; =============================================================================
; Базовый заголовок запросов VMMDev (VMMDevRequestHeader)
; =============================================================================
struct VMMDEV_HEADER
size dd ? ; 0 - размер пакета
version dd ? ; 4 - версия, = VMMDEV_REQUEST_HEADER_VERSION
request_type dd ? ; 8 - тип запроса
rc dd ? ; 12 - код возврата
reserved1 dd ? ; 16 - ВАЖНО! Это поле ДОЛЖНО быть, значение 0
f_requestor dd ? ; 20 - флаги requestor
ends ; Размер = 24 БАЙТА
; =============================================================================
; Структура VMMDevMemory v1_04
; =============================================================================
struct VMMDEV_MEMORY
size dd ? ; 0x00 размер области (в байтах)
version dd ? ; 0x04 версия структуры (u32Version)
have_events dd ?
; vb_va_memory VB_VA_MEMORY
ends
; VBVA memory layout => typedef struct VBVAMEMORY
struct VB_VA_MEMORY
; fu32_mode_flags dd ?
; off32_data dd ?
; off32_free dd ?
; au8_ring_buffer dd ? ; VMMDEV_VBVA_RING_BUFFER_SIZE
; VMMDEVVBVARECORD aRecords[VMMDEV_VBVA_MAX_RECORDS];
; index_record_first dd ?
; index_record_free dd ?
; fu32_supported_orders dd?
; reserved1 dd ? ; 0x0C: Зарезервировано
; host_features dd ? ; 0x10: Возможности хоста
; guest_features dd ? ; 0x14: Возможности гостя
; mouse_features dd ? ; 0x18: Возможности мыши
; mouse_pos_x dd ? ; 0x1C: Позиция мыши X
; mouse_pos_y dd ? ; 0x20: Позиция мыши Y
ends
; =============================================================================
; Запрос: Version Request
; =============================================================================
struct VMMDEV_GET_HOST_VERSION
header VMMDEV_HEADER
major dw ?
minor dw ?
build dd ?
revision dd ?
features dd ?
ends
; =============================================================================
; Запрос: ReportGuestInfo (VMMDevReq_ReportGuestInfo = 50)
; =============================================================================
struct VMMDEV_REPORT_GUEST_INFO
header VMMDEV_HEADER
interface_version dd ? ; VMMDEV_VERSION (0x00010004)
os_type dd ? ; VBOXOSTYPE_*
ends
; =============================================================================
; Запрос: ReportGuestInfo2 (VMMDevReq_ReportGuestInfo2 = 58)
; Используется в vgdrvReportGuestInfo
; =============================================================================
struct VMMDEV_GUEST_INFO2
additions_major dw ? ; VBOX_VERSION_MAJOR
additions_minor dw ? ; VBOX_VERSION_MINOR
additions_build dd ? ; VBOX_VERSION_BUILD
additions_revision dd ? ; VBOX_SVN_REV
additions_features dd ? ; VBOXGSTINFO2_F_REQUESTOR_INFO
szName rb 128 ; VBOX_VERSION_STRING
ends
struct VMMDEV_REPORT_GUEST_INFO2
header VMMDEV_HEADER
guest_info VMMDEV_GUEST_INFO2
ends
; =============================================================================
; Запрос: GetHypervisorInfo (VMMDevReq_GetHypervisorInfo = 2)
; =============================================================================
struct VMMDEV_REQ_HYPERVISOR_INFO
header VMMDEV_HEADER
hypervisorStart dd ? ; GCPhys32
hypervisorSize dd ?
ends
; =============================================================================
; Запрос: SetHypervisorInfo (VMMDevReq_SetHypervisorInfo = 3)
; =============================================================================
struct VMMDEV_SET_HYPERVISOR_INFO
header VMMDEV_HEADER
hypervisorStart dd ? ; GCPhys32
hypervisorSize dd ?
ends
; =============================================================================
; Запрос: AcknowledgeEvents (VMMDevReq_AcknowledgeEvents = 41)
; В коде: VMMDevEvents
; =============================================================================
struct VMMDEV_EVENTS
header VMMDEV_HEADER
events dd ? ; IN/OUT: маска событий
ends
; Алиас для совместимости
struct VMMDEV_ACKNOWLEDGE_EVENTS
header VMMDEV_HEADER
events dd ?
ends
; =============================================================================
; Запрос: CtlGuestFilterMask (VMMDevReq_CtlGuestFilterMask = 42)
; guestEventFilter = (guestEventFilter | u32OrMask) & ~u32NotMask
; =============================================================================
struct VMMDEV_CTL_GUEST_FILTER_MASK
header VMMDEV_HEADER
or_mask dd ? ; маска OR
not_mask dd ? ; маска NOT
ends
; =============================================================================
; Запрос: SetGuestCapabilities (VMMDevReq_SetGuestCapabilities = 55)
; guestCaps = (guestCaps | u32OrMask) & ~u32NotMask
; VMMDevReqGuestCapabilities2 = VMMDevReq_SetGuestCapabilities
; =============================================================================
struct VMMDEV_SET_GUEST_CAPABILITIES2
header VMMDEV_HEADER
or_mask dd ? ; маска OR
not_mask dd ? ; маска NOT
ends
; Алиас для совместимости
struct VMMDEV_GUEST_CAPS2
header VMMDEV_HEADER
or_mask dd ?
not_mask dd ?
ends
; =============================================================================
; Запрос: GetDisplayChangeRequest2 (VMMDevReq_GetDisplayChangeRequest2 = 54)
; =============================================================================
struct VMMDEV_GET_DISPLAY_CHANGE_REQUEST2
header VMMDEV_HEADER
x_res dd ?
y_res dd ?
bpp dd ?
event_ack dd ? ; BOOL: 0/1 (false/true)
display dd ? ; индекс дисплея (0 для основного)
ends
; =============================================================================
; Запрос: ReportGuestStatus (VMMDevReq_ReportGuestStatus = 61)
; =============================================================================
struct VBOXGUEST_STATUS
facility dd ? ; VBoxGuestFacilityType_*
status dd ? ; VBoxGuestFacilityStatus_*
flags dd ?
ends
struct VMMDEV_REPORT_GUEST_STATUS
header VMMDEV_HEADER
guestStatus VBOXGUEST_STATUS
ends
; =============================================================================
; Memory Ballooning Structures
; =============================================================================
; Запрос: GetMemBalloonChangeRequest
struct VMMDEV_GET_MEM_BALLOON_CHANGE_REQUEST
header VMMDEV_HEADER
eventAck dd ?
cBalloonChunks dd ?
cPhysMemChunks dd ?
ends
; Запрос: ChangeMemBalloon
struct VMMDEV_CHANGE_MEM_BALLOON
header VMMDEV_HEADER
cPages dd ?
fInflate dd ? ; true = inflate, false = deflate
aPhysPage rd VMMDEV_MEMORY_BALLOON_CHUNK_PAGES
ends
; =============================================================================
; Вспомогательные структуры
; =============================================================================
; SHFLSTRING - строка с длиной (UTF-8 или UTF-16)
struct SHFLSTRING
size dw ? ; Размер буфера в байтах
length dw ? ; Длина строки в байтах (без null terminator)
string rb 0 ; Начало строки (переменный размер)
ends
; SHFLFSOBJINFO - информация о файле/директории (92 байта)
; Источник: include/iprt/types.h — RTFSOBJINFO
struct SHFLFSOBJINFO
size_low dd ? ; +0: cbObject low (int64_t)
size_high dd ? ; +4: cbObject high
allocated_low dd ? ; +8: cbAllocated low (int64_t)
allocated_high dd ? ; +12: cbAllocated high
access_time_low dd ? ; +16: AccessTime low (RTTIMESPEC, nanoseconds)
access_time_high dd ? ; +20: AccessTime high
modification_time_low dd ? ; +24: ModificationTime low
modification_time_high dd ? ; +28: ModificationTime high
change_time_low dd ? ; +32: ChangeTime low
change_time_high dd ? ; +36: ChangeTime high
birth_time_low dd ? ; +40: BirthTime low
birth_time_high dd ? ; +44: BirthTime high
fMode dd ? ; +48: RTFMODE (тип+права: 0x4000=dir, 0x8000=file)
attr_reserved rb 40 ; +52: остаток RTFSOBJATTR (enmAdditional + union)
ends ; = 48 + 4 + 40 = 92 байт
; SHFLMAPPING - информация о mapping (для QUERY_MAPPINGS)
struct SHFLMAPPING
flags dd ? ; Флаги
root dd ? ; Root handle
; После этого идет SHFLSTRING с именем
ends
; =============================================================================
; Internal Driver Structures
; =============================================================================
struct VBOXGUEST_WAIT
Event dd ? ; RTSEMEVENTMULTI handle
ListNode_next dd ? ; RTListNode::pNext
ListNode_prev dd ? ; RTListNode::pPrev
fReqEvents dd ? ; запрашиваемые события
fResEvents dd ? ; полученные события
pSession dd ? ; сессия
pHGCMReq dd ? ; HGCM запрос (если есть)
fPendingWakeUp dd ? ; флаг отложенного пробуждения
fFreeMe dd ? ; флаг для освобождения
ends
struct VBOXGUEST_SESSION
Process dd ? ; RTPROCESS
R0Process dd ? ; RTR0PROCESS
pDevExt dd ? ; устройство
fRequestor dd ? ; VMMDEV_REQUESTOR_*
fUserSession dd ? ; bool
SessionSpinlock dd ? ; спинлок для синхронизации сессии
ListNode_next dd ? ; RTListNode::pNext
ListNode_prev dd ? ; RTListNode::pPrev
fEventFilter dd ? ; маска фильтра событий
fMouseStatus dd ? ; статус мыши
fCapabilities dd ? ; возможности
fAcquiredGuestCaps dd ? ; приобретенные возможности
aHGCMClientIds rd 32 ; HGCM client IDs
fPendingCancelWaitEvents dd ? ; bool
u32MousePosChangedSeq dd ? ; последовательность изменения позиции мыши
ends
; =============================================================================
; Memory Ballooning Internal Structures
; =============================================================================
struct VBOXGUEST_MEMBALLOON
hMtx dd ? ; мьютекс
cChunks dd ? ; текущее количество чанков
cMaxChunks dd ? ; максимальное количество чанков
fUseKernelAPI dd ? ; использовать ли API ядра
paMemObj dd ? ; указатель на массив объектов памяти
pOwner dd ? ; владелец (сессия)
ends
; =============================================================================
; Bit Usage Tracker Structure
; =============================================================================
struct VBOXGUEST_BITUSAGE_TRACKER
acPerBitUsage rd 32 ; счетчики использования битов (0..31)
fMask dd ? ; итоговая маска
ends
struct DISPLAY_STATE
width dd ?
height dd ?
bpp dd ?
lfb dd ?
pitch dd ?
refresh_rate dd ?
active dd ?
pending_change dd ?
x dd ?
y dd ?
ends