70 lines
2.7 KiB
HTML
70 lines
2.7 KiB
HTML
; =============================================================================
|
||
; VBoxGuest Driver for KolibriOS - Structures HGCM
|
||
; =============================================================================
|
||
|
||
; =============================================================================
|
||
; HGCM Structures
|
||
; =============================================================================
|
||
|
||
struct HGCM_HEADER
|
||
header VMMDEV_HEADER
|
||
flags dd ?
|
||
result dd ?
|
||
ends ; 32 байта
|
||
|
||
struct HGCM_CONNECT
|
||
header HGCM_HEADER
|
||
location_type dd ?
|
||
service_name rb HGCM_SERVICE_NAME_MAX ; имя сервиса
|
||
client_id dd ?
|
||
ends
|
||
|
||
struct HGCM_DISCONNECT
|
||
header HGCM_HEADER
|
||
client_id dd ?
|
||
ends
|
||
|
||
struct HGCM_CALL
|
||
header HGCM_HEADER ; 32
|
||
client_id dd ? ; +4 = 36 // ID клиента
|
||
function dd ? ; +4 = 40 // Номер функции (1=MSG_OLD_GET_WAIT и т.д.)
|
||
param_count dd ? ; +4 = 44 // Количество параметров
|
||
; params[0] начинаются с offset 44
|
||
; Далее идут параметры: struct vmmdev_hgcm_function_parameter params[parm_count];
|
||
ends
|
||
|
||
struct HGCM_PARM
|
||
type dd ? ; тип параметра (VMMDevHGCMParmType)
|
||
u rb 8 ; union { uint32_t value32; RTGCPTR pointer; }
|
||
ends
|
||
|
||
HGCM_PARM.u.value32 equ HGCM_PARM.u
|
||
HGCM_PARM.u.value_or_size equ HGCM_PARM.u
|
||
|
||
HGCM_PARM.u.value64_lo equ HGCM_PARM.u
|
||
HGCM_PARM.u.value64_hi equ HGCM_PARM.u+4
|
||
|
||
HGCM_PARM.u.LinAddr.size equ HGCM_PARM.u
|
||
HGCM_PARM.u.LinAddr.offset equ HGCM_PARM.u+4
|
||
|
||
HGCM_PARM.value_or_size equ HGCM_PARM.u
|
||
HGCM_PARM.offset_or_addr equ HGCM_PARM.u+4
|
||
|
||
|
||
|
||
; sizeof(vmmdev_request_header) = 24
|
||
; sizeof(vmmdev_hgcmreq_header) = 32 // header(24) + flags(4) + result(4)
|
||
; sizeof(vmmdev_hgcm_call) = 44 // header(32) + client_id(4) + function(4) + parm_count(4)
|
||
; sizeof(vmmdev_hgcm_function_parameter) = 12
|
||
; sizeof(vmmdev_hgcm_pagelist) = 16 + (cPages * 8)
|
||
|
||
; struct vmmdev_hgcm_pagelist {
|
||
; u32 flags; // Direction flags (1,2,3)
|
||
; u16 offFirstPage; // Смещение в первой странице
|
||
; u16 cPages; // Количество страниц
|
||
; u64 pages[1]; // Массив физических адресов страниц (RTGCPHYS64)
|
||
; };
|
||
|
||
; Размер буфера для PageList HGCM вызовов
|
||
; = sizeof.HGCM_CALL(44) + 32*sizeof.HGCM_PARM(12) + 8192 = 8620 → 3 страницы
|
||
HGCM_PL_BUF_SIZE equ sizeof.HGCM_CALL + (VMMDEV_MAX_HGCM_PARMS * sizeof.HGCM_PARM) + HGCM_MAX_PAGELIST_TAIL |