297 lines
13 KiB
HTML
297 lines
13 KiB
HTML
; =============================================================================
|
||
; 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 |