forked from KolibriOS/kolibrios
93 lines
2.5 KiB
NASM
93 lines
2.5 KiB
NASM
; =============================================================================
|
|
; Программа : VirtualBox Guest Driver для KolibriOS
|
|
; Модуль : Main driver entry
|
|
; Назначение : Full-featured driver
|
|
; Файл : vboxguest.asm
|
|
; Автор : lex_coder(lex_coder@mail.ru), Алексей Михайлов
|
|
; При моральной поддержке сообщества KolibriOS
|
|
;
|
|
; cp /usbhd0/1/vboxguest/vboxguest /sys/Drivers/vboxguest.sys
|
|
; loaddrv vboxguest
|
|
;
|
|
; =============================================================================
|
|
format PE DLL native 0.05
|
|
entry START
|
|
|
|
section '.flat' code readable writable executable
|
|
|
|
include '/usbhd0/1/ksrc_n/DRIVERS/proc32.inc'
|
|
include '/usbhd0/1/ksrc_n/DRIVERS/struct.inc'
|
|
include '/usbhd0/1/ksrc_n/DRIVERS/macros.inc'
|
|
include '/usbhd0/1/ksrc_n/DRIVERS/peimport.inc'
|
|
include '/usbhd0/1/ksrc_n/DRIVERS/fdo.inc'
|
|
include '/usbhd0/1/ksrc_n/DRIVERS/pci.inc'
|
|
|
|
include 'config.inc'
|
|
include 'common/common.inc'
|
|
include 'data/data.inc'
|
|
include 'core/core.inc'
|
|
include 'vmmdev/vmmdev.inc'
|
|
include 'hgcm/core.inc'
|
|
include 'sys/init.inc'
|
|
include 'sys/shutdown.inc'
|
|
include 'sys/ioctl.inc'
|
|
include 'services/services.inc'
|
|
|
|
BUILD_SERVICE_TABLE
|
|
|
|
; =============================================================================
|
|
; Driver Entry Point
|
|
; =============================================================================
|
|
proc START c, state:dword, cmdline:dword
|
|
push ebx esi edi
|
|
cmp [state], DRV_ENTRY
|
|
je .entry
|
|
cmp [state], DRV_EXIT
|
|
je .exit
|
|
|
|
pop edi esi ebx
|
|
xor eax, eax
|
|
ret
|
|
|
|
.entry:
|
|
DEBUGF 2, "[VBoxGuest] VBoxGuest Driver v2.0\n"
|
|
|
|
call sys_init ;
|
|
test eax, eax
|
|
jnz .fail
|
|
|
|
; Регистрация сервиса (IOCTL интерфейс для приложений)
|
|
invoke RegService, service_name, service_proc
|
|
|
|
DEBUGF 2, "[VBoxGuest] IOCTL service '%s' registered (API v%d)\n", service_name, API_VERSION
|
|
DEBUGF 2, "[VBoxGuest] Initialization complete!\n"
|
|
pop edi esi ebx
|
|
ret
|
|
|
|
.fail:
|
|
DEBUGF 2, "[VBoxGuest] Initialization FAILED\n"
|
|
|
|
.exit:
|
|
DEBUGF 2, "[VBoxGuest] DRV_EXIT: Shutting down driver\n"
|
|
call sys_shutdown
|
|
pop edi esi ebx
|
|
xor eax, eax
|
|
ret
|
|
endp
|
|
|
|
|
|
; =============================================================================
|
|
; Data Section
|
|
; =============================================================================
|
|
align 4
|
|
service_name db 'VBOXGUEST', 0
|
|
|
|
align 4
|
|
vbox_device VBOX_DEVICE
|
|
|
|
include_debug_strings
|
|
|
|
align 4
|
|
data fixups
|
|
end data
|