forked from KolibriOS/kolibrios
62 lines
1.1 KiB
NASM
62 lines
1.1 KiB
NASM
|
format PE DLL native
|
||
|
entry START
|
||
|
|
||
|
__DEBUG__ = 1
|
||
|
__DEBUG_LEVEL__ = 2
|
||
|
|
||
|
section '.flat' readable writable executable
|
||
|
|
||
|
include '../../proc32.inc'
|
||
|
include '../../struct.inc'
|
||
|
include '../../macros.inc'
|
||
|
include '../../fdo.inc'
|
||
|
|
||
|
proc START c, reason:dword
|
||
|
|
||
|
DEBUGF 2,"Loading 'asm_drv' driver\n"
|
||
|
cmp [reason], DRV_ENTRY
|
||
|
jne .fail
|
||
|
|
||
|
invoke RegService, my_service, service_proc
|
||
|
ret
|
||
|
|
||
|
.fail:
|
||
|
xor eax, eax
|
||
|
ret
|
||
|
|
||
|
endp
|
||
|
|
||
|
proc service_proc stdcall, ioctl:dword
|
||
|
|
||
|
mov ebx, [ioctl]
|
||
|
mov eax, [ebx + IOCTL.io_code]
|
||
|
cmp eax, 0 ; FUNCTION ADD(a+b);
|
||
|
jne .fail
|
||
|
|
||
|
mov eax, [ebx + IOCTL.input]
|
||
|
mov ecx, eax
|
||
|
add ecx, 4
|
||
|
|
||
|
mov eax, [eax]
|
||
|
add eax, [ecx]
|
||
|
|
||
|
mov ecx, [ebx + IOCTL.output]
|
||
|
mov [ecx], eax
|
||
|
|
||
|
xor eax, eax
|
||
|
ret
|
||
|
|
||
|
.fail:
|
||
|
or eax, -1
|
||
|
ret
|
||
|
endp
|
||
|
|
||
|
data fixups
|
||
|
end data
|
||
|
|
||
|
include '../../peimport.inc'
|
||
|
|
||
|
my_service db 'asm_drv',0 ; max 16 chars include zero
|
||
|
|
||
|
include_debug_strings
|