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

305 lines
15 KiB
HTML
Raw Permalink 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.
; =============================================================================
; VirtualBox SharedFolder Structures
; =============================================================================
; -----------------------------------------------------------------------------
; Глобальное состояние SharedFolder драйвера
; -----------------------------------------------------------------------------
struct SF_STATE
connected dd ? ; 1 = HGCM подключен к сервису
client_id dd ? ; HGCM client ID
; Динамически выделяемые init-буферы
packet_ptr dd ? ; sf_packet (KernelAlloc 4096)
mappings_ptr dd ? ; sf_mappings (часть small_bufs)
namebuf_ptr dd ? ; sf_namebuf
cp866_buf_ptr dd ? ; sf_cp866_buf
listbuf_ptr dd ? ; sf_listbuf (KernelAlloc 4096)
createparms_ptr dd ? ; sf_createparms
dir_path_ptr dd ? ; sf_dir_path
small_bufs_ptr dd ? ; единый блок мелких буферов (KernelAlloc 4096)
; Динамически выделяемые FS-буферы
fs_packet_ptr dd ? ; vboxsf_fs_packet (KernelAlloc 4096)
fs_listbuf_ptr dd ? ; vboxsf_fs_listbuf (KernelAlloc 4096)
fs_iobuf_ptr dd ? ; vboxsf_fs_iobuf (KernelAlloc 65536)
fs_cparms_ptr dd ? ; vboxsf_fs_cparms (KernelAlloc 4096)
fs_pathbuf_ptr dd ? ; vboxsf_fs_pathbuf
fs_pathbuf2_ptr dd ? ; vboxsf_fs_pathbuf2
fs_tmpname_ptr dd ? ; vboxsf_fs_tmpname
fs_small_bufs_ptr dd ? ; единый блок мелких FS-буферов (KernelAlloc 4096)
ends
; -----------------------------------------------------------------------------
; Информация об одной shared folder (выделяется через KernelAlloc)
; -----------------------------------------------------------------------------
struct SF_FOLDER
root_handle dd ? ; SHFL root handle (от MAP_FOLDER)
active dd ? ; 1 = folder активен и подключен
name rb 256 ; Имя mapping (UTF-8, null-terminated)
ends
; -----------------------------------------------------------------------------
; Данные для виртуального диска /vbox/
; -----------------------------------------------------------------------------
struct VBOXSF_DISK
folders rd SHFL_MAX_FOLDERS ; Указатели на SF_FOLDER
count dd ? ; Количество папок
disk_handle dd ? ; Handle от DiskAdd
ends
; =============================================================================
; Структура DISKMEDIAINFO для querymedia callback
; =============================================================================
struct DISKMEDIAINFO
flags dd ? ; флаги медиа
sectorsize dd ? ; размер сектора
capacity dq ? ; емкость в секторах (64-bit)
ends
; =============================================================================
; Смещения внутренних структур ядра KolibriOS
; (нужны для create_partition callback)
; =============================================================================
KPARTITION_OFS_DISK = 16 ; PARTITION.Disk -> DISK*
KPARTITION_OFS_FSUSERFUNCTIONS = 20 ; PARTITION.FSUserFunctions -> UserFuncs*
KDISK_OFS_USERDATA = 16 ; DISK.UserData -> void*
; =============================================================================
; BDFE (Block Data File Entry) — формат записи в директории KolibriOS
; =============================================================================
BDFE_SIZE = 304 ; Размер одной BDFE записи (CP866)
BDFE_HEADER_SIZE = 32 ; Размер заголовка ответа ReadFolder
; Структура заголовка ReadFolder ответа
struct BDFE_HEADER
version dd ? ; Версия формата (1)
entries_placed dd ? ; Количество возвращенных записей
total_entries dd ? ; Общее количество записей
reserved rd 5 ; Зарезервировано (20 байт)
ends
; Смещения полей BDFE
BDFE_OFS_ATTR = 0 ; dword: атрибуты
BDFE_OFS_ENCODING = 4 ; byte: кодировка (0=CP866, 1=UTF-16, 2=UTF-8)
BDFE_OFS_CTIME = 8 ; dword: время создания
BDFE_OFS_CDATE = 12 ; dword: дата создания
BDFE_OFS_ATIME = 16 ; dword: время доступа
BDFE_OFS_ADATE = 20 ; dword: дата доступа
BDFE_OFS_MTIME = 24 ; dword: время модификации
BDFE_OFS_MDATE = 28 ; dword: дата модификации
BDFE_OFS_SIZE_LO = 32 ; dword: размер файла (младшие 32 бита)
BDFE_OFS_SIZE_HI = 36 ; dword: размер файла (старшие 32 бита)
BDFE_OFS_NAME = 40 ; 264 байта: имя файла (null-terminated)
; Атрибуты файлов
FA_READONLY = 0x01
FA_HIDDEN = 0x02
FA_SYSTEM = 0x04
FA_LABEL = 0x08
FA_FOLDER = 0x10
FA_ARCHIVED = 0x20
; Коды ошибок KolibriOS (syscall 70)
ERROR_SUCCESS = 0
ERROR_DISK_FULL = 1
ERROR_UNSUPPORTED = 2
ERROR_UNKNOWN_FS = 3
ERROR_FILE_NOT_FOUND = 5
ERROR_END_OF_FILE = 6
ERROR_MEMORY = 7
ERROR_ACCESS_DENIED = 10
ERROR_DEVICE = 11
; =============================================================================
; Смещения внутри SHFLFSOBJINFO (92 байта)
; Используются для конвертации в BDFE при ReadFolder/GetFileInfo
; =============================================================================
SHFLOBJINFO_OFS_SIZE_LO = 0 ; int64 cbObject (low)
SHFLOBJINFO_OFS_SIZE_HI = 4 ; int64 cbObject (high)
SHFLOBJINFO_OFS_ALLOC_LO = 8 ; int64 cbAllocated (low)
SHFLOBJINFO_OFS_ALLOC_HI = 12 ; int64 cbAllocated (high)
SHFLOBJINFO_OFS_BTIME_LO = 16 ; int64 BirthTime (low, nanosec)
SHFLOBJINFO_OFS_BTIME_HI = 20 ; int64 BirthTime (high)
SHFLOBJINFO_OFS_CTIME_LO = 24 ; int64 ChangeTime (low)
SHFLOBJINFO_OFS_CTIME_HI = 28 ; int64 ChangeTime (high)
SHFLOBJINFO_OFS_MTIME_LO = 32 ; int64 ModificationTime (low)
SHFLOBJINFO_OFS_MTIME_HI = 36 ; int64 ModificationTime (high)
SHFLOBJINFO_OFS_ATIME_LO = 40 ; int64 AccessTime (low)
SHFLOBJINFO_OFS_ATIME_HI = 44 ; int64 AccessTime (high)
SHFLOBJINFO_OFS_FMODE = 48 ; uint32 Attr (RTFMODE)
; Биты fMode (RTFMODE)
S_IFDIR = 0x4000
S_IFREG = 0x8000
; =============================================================================
; HGCM пакеты для SharedFolder операций
; =============================================================================
; -----------------------------------------------------------------------------
; SHFL_FN_QUERY_MAPPINGS - Получить список доступных mappings
; -----------------------------------------------------------------------------
struct SHFL_QUERY_MAPPINGS
header HGCM_CALL
flags HGCM_PARM ; IN: флаги (обычно 0)
count HGCM_PARM ; OUT: количество mappings
buffer HGCM_PARM ; OUT: буфер для данных (SHFLMAPPING[])
ends
; -----------------------------------------------------------------------------
; SHFL_FN_QUERY_MAP_NAME - Получить имя mapping по индексу
; -----------------------------------------------------------------------------
struct SHFL_QUERY_MAP_NAME
header HGCM_CALL
index HGCM_PARM ; IN: индекс mapping (0..count-1)
name HGCM_PARM ; OUT: имя mapping (SHFLSTRING)
ends
; -----------------------------------------------------------------------------
; SHFL_FN_MAP_FOLDER - Подключить mapping
; -----------------------------------------------------------------------------
struct SHFL_MAP_FOLDER
header HGCM_CALL
path HGCM_PARM ; IN
root HGCM_PARM ; OUT
delimiter HGCM_PARM ; IN
flags HGCM_PARM ; IN
ends
; -----------------------------------------------------------------------------
; SHFL_FN_UNMAP_FOLDER - Отключить mapping
; -----------------------------------------------------------------------------
struct SHFL_UNMAP_FOLDER
header HGCM_CALL
root HGCM_PARM ; IN: root handle
ends
; -----------------------------------------------------------------------------
; SHFL_FN_CREATE - Открыть/создать файл
; -----------------------------------------------------------------------------
struct SHFL_CREATE
header HGCM_CALL
root HGCM_PARM ; IN: root handle
path HGCM_PARM ; IN: путь к файлу (SHFLSTRING)
parms HGCM_PARM ; IN/OUT: параметры (SHFLCREATEPARMS)
ends
; Параметры создания файла (108 байт)
struct SHFLCREATEPARMS
handle_lo dd ? ; +0: OUT: SHFLHANDLE low (uint64_t)
handle_hi dd ? ; +4: OUT: SHFLHANDLE high
result dd ? ; +8: OUT: SHFLCREATERESULT
flags dd ? ; +12: IN: SHFL_CF_* CreateFlags
info rb 92 ; +16: IN/OUT: SHFLFSOBJINFO
ends
; -----------------------------------------------------------------------------
; SHFLDIRINFO - одна запись в результате SHFL_FN_LIST (переменный размер)
; Фиксированная часть = 126 байт:
; SHFLFSOBJINFO (92) + cucShortName (2) + uszShortName (28) + SHFLSTRING hdr (4)
; За ней идут байты имени файла (переменная длина).
; -----------------------------------------------------------------------------
SHFLDIRINFO_FIXED_SIZE = 126
SHFLDIRINFO_OFS_INFO = 0 ; SHFLFSOBJINFO (92 bytes)
SHFLDIRINFO_OFS_SIZE_LO = 0 ; cbObject low
SHFLDIRINFO_OFS_SIZE_HI = 4 ; cbObject high
SHFLDIRINFO_OFS_FMODE = 48 ; fMode (RTFMODE)
SHFLDIRINFO_OFS_CUC_SHORT_NAME = 92 ; cucShortName (uint16)
SHFLDIRINFO_OFS_USZ_SHORT_NAME = 94 ; uszShortName (14 x uint16 = 28 bytes)
SHFLDIRINFO_OFS_NAME_SIZE = 122 ; SHFLSTRING.u16Size
SHFLDIRINFO_OFS_NAME_LENGTH = 124 ; SHFLSTRING.u16Length
SHFLDIRINFO_OFS_NAME_STRING = 126 ; SHFLSTRING.string (данные имени)
; -----------------------------------------------------------------------------
; SHFL_FN_CLOSE - Закрыть файл
; -----------------------------------------------------------------------------
struct SHFL_CLOSE
header HGCM_CALL
root HGCM_PARM ; IN: root handle
handle HGCM_PARM ; IN: file handle
ends
; -----------------------------------------------------------------------------
; SHFL_FN_READ - Читать из файла
; -----------------------------------------------------------------------------
struct SHFL_READ
header HGCM_CALL
root HGCM_PARM ; IN: root handle
handle HGCM_PARM ; IN: file handle
offset_low HGCM_PARM ; IN: offset low (64-bit)
offset_high HGCM_PARM ; IN: offset high (64-bit)
size HGCM_PARM ; IN/OUT: размер для чтения
buffer HGCM_PARM ; OUT: буфер для данных
ends
; -----------------------------------------------------------------------------
; SHFL_FN_WRITE - Писать в файл
; -----------------------------------------------------------------------------
struct SHFL_WRITE
header HGCM_CALL
root HGCM_PARM ; IN: root handle
handle HGCM_PARM ; IN: file handle
offset_low HGCM_PARM ; IN: offset low (64-bit)
offset_high HGCM_PARM ; IN: offset high (64-bit)
size HGCM_PARM ; IN/OUT: размер для записи
buffer HGCM_PARM ; IN: буфер с данными
ends
; -----------------------------------------------------------------------------
; SHFL_FN_LIST - Получить список файлов в директории
; -----------------------------------------------------------------------------
struct SHFL_LIST
header HGCM_CALL
root HGCM_PARM ; parm[0] IN: root handle (32bit)
handle HGCM_PARM ; parm[1] IN: dir handle (64bit!)
flags HGCM_PARM ; parm[2] IN: SHFL_LIST_* (32bit)
cb HGCM_PARM ; parm[3] IN/OUT: размер буфера (32bit)
path HGCM_PARM ; parm[4] IN: search pattern (опционально)
buffer HGCM_PARM ; parm[5] OUT: SHFLDIRINFO[]
resume_pt HGCM_PARM ; parm[6] IN/OUT: точка продолжения (32bit)
file_count HGCM_PARM ; parm[7] OUT: количество файлов (32bit)
ends
; -----------------------------------------------------------------------------
; SHFL_FN_INFORMATION - Получить информацию о файле
; -----------------------------------------------------------------------------
struct SHFL_INFORMATION
header HGCM_CALL
root HGCM_PARM ; IN: root handle
handle HGCM_PARM ; IN: file handle
flags HGCM_PARM ; IN: флаги
info HGCM_PARM ; OUT: информация (SHFLFSOBJINFO)
ends
; -----------------------------------------------------------------------------
; SHFL_FN_REMOVE - Удалить файл
; -----------------------------------------------------------------------------
struct SHFL_REMOVE
header HGCM_CALL
root HGCM_PARM ; IN: root handle
path HGCM_PARM ; IN: путь к файлу (SHFLSTRING)
flags HGCM_PARM ; IN: флаги
ends
; -----------------------------------------------------------------------------
; SHFL_FN_RENAME - Переименовать файл
; -----------------------------------------------------------------------------
struct SHFL_RENAME
header HGCM_CALL
root HGCM_PARM ; IN: root handle
src HGCM_PARM ; IN: исходный путь (SHFLSTRING)
dst HGCM_PARM ; IN: новый путь (SHFLSTRING)
flags HGCM_PARM ; IN: флаги
ends
; -----------------------------------------------------------------------------
; SHFL_FN_FLUSH - Flush буферов файла
; -----------------------------------------------------------------------------
struct SHFL_FLUSH
header HGCM_CALL
root HGCM_PARM ; IN: root handle
handle HGCM_PARM ; IN: file handle
ends