79 lines
3.3 KiB
PHP
79 lines
3.3 KiB
PHP
; =============================================================================
|
|
; Модуль : HGCM Params
|
|
; Назначение : Формирование параметров HGCM_PARM
|
|
; Файл : hgcm/params.inc
|
|
; Версия : 1.1
|
|
; Дата : 2025.01.15
|
|
; =============================================================================
|
|
|
|
; hgcm_param_32 — заполнить 32-битный параметр
|
|
;
|
|
; Вход : p — указатель на HGCM_PARM, value — значение
|
|
proc hgcm_param_32 uses edi, p:dword, value:dword
|
|
mov edi, [p]
|
|
mov dword [edi + HGCM_PARM.type], HGCM_PARM_TYPE_32BIT
|
|
mov eax, [value]
|
|
mov dword [edi + HGCM_PARM.u.value32], eax
|
|
ret
|
|
endp
|
|
|
|
; -----------------------------------------------------------------------------
|
|
; hgcm_param_64 — заполнить 64-битный параметр
|
|
;
|
|
; Вход : p — указатель на HGCM_PARM, lo/hi — младшая/старшая часть
|
|
; -----------------------------------------------------------------------------
|
|
proc hgcm_param_64 uses edi, p:dword, lo:dword, hi:dword
|
|
mov edi, [p]
|
|
mov dword [edi + HGCM_PARM.type], HGCM_PARM_TYPE_64BIT
|
|
mov eax, [lo]
|
|
mov dword [edi + HGCM_PARM.u.value64_lo], eax
|
|
mov eax, [hi]
|
|
mov dword [edi + HGCM_PARM.u.value64_hi], eax
|
|
ret
|
|
endp
|
|
|
|
; -----------------------------------------------------------------------------
|
|
; hgcm_param_linaddr_in — линейный буфер IN (гость → хост)
|
|
;
|
|
; Вход : p — указатель на HGCM_PARM, addr — адрес буфера, size — размер
|
|
; -----------------------------------------------------------------------------
|
|
proc hgcm_param_linaddr_in uses edi, p:dword, addr:dword, size:dword
|
|
mov edi, [p]
|
|
mov dword [edi + HGCM_PARM.type], HGCM_PARM_TYPE_LINADDR_IN
|
|
mov eax, [size]
|
|
mov dword [edi + HGCM_PARM.u.LinAddr.size], eax
|
|
mov eax, [addr]
|
|
mov dword [edi + HGCM_PARM.u.LinAddr.offset], eax
|
|
ret
|
|
endp
|
|
|
|
; -----------------------------------------------------------------------------
|
|
; hgcm_param_linaddr_out — линейный буфер OUT (хост → гость)
|
|
;
|
|
; Вход : p — указатель на HGCM_PARM, addr — адрес буфера, size — размер
|
|
; -----------------------------------------------------------------------------
|
|
proc hgcm_param_linaddr_out uses edi, p:dword, addr:dword, size:dword
|
|
mov edi, [p]
|
|
mov dword [edi + HGCM_PARM.type], HGCM_PARM_TYPE_LINADDR_OUT
|
|
mov eax, [size]
|
|
mov dword [edi + HGCM_PARM.u.LinAddr.size], eax
|
|
mov eax, [addr]
|
|
mov dword [edi + HGCM_PARM.u.LinAddr.offset], eax
|
|
ret
|
|
endp
|
|
|
|
; -----------------------------------------------------------------------------
|
|
; hgcm_param_linaddr_inout — линейный буфер INOUT (двунаправленный)
|
|
;
|
|
; Вход : p — указатель на HGCM_PARM, addr — адрес буфера, size — размер
|
|
; -----------------------------------------------------------------------------
|
|
proc hgcm_param_linaddr_inout uses edi, p:dword, addr:dword, size:dword
|
|
mov edi, [p]
|
|
mov dword [edi + HGCM_PARM.type], HGCM_PARM_TYPE_LINADDR_INOUT
|
|
mov eax, [size]
|
|
mov dword [edi + HGCM_PARM.u.LinAddr.size], eax
|
|
mov eax, [addr]
|
|
mov dword [edi + HGCM_PARM.u.LinAddr.offset], eax
|
|
ret
|
|
endp
|