forked from KolibriOS/kolibrios
add function for unload driver
git-svn-id: svn://kolibrios.org@9440 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
8bf60cac6d
commit
dc2ad5b020
@ -174,9 +174,7 @@ srv_handlerEx:
|
|||||||
mov eax, [ecx+handle]
|
mov eax, [ecx+handle]
|
||||||
|
|
||||||
cmp eax, OS_BASE
|
cmp eax, OS_BASE
|
||||||
jae @f
|
jbe .fail
|
||||||
jmp .fail
|
|
||||||
@@:
|
|
||||||
|
|
||||||
cmp [eax+SRV.magic], ' SRV'
|
cmp [eax+SRV.magic], ' SRV'
|
||||||
jne .fail
|
jne .fail
|
||||||
@ -309,6 +307,7 @@ proc reg_service_ex stdcall, name:dword, handler:dword, srvsize:dword
|
|||||||
|
|
||||||
mov ecx, [handler]
|
mov ecx, [handler]
|
||||||
mov [eax+SRV.srv_proc], ecx
|
mov [eax+SRV.srv_proc], ecx
|
||||||
|
;dec [count_services]
|
||||||
pop ebx
|
pop ebx
|
||||||
ret
|
ret
|
||||||
.fail:
|
.fail:
|
||||||
|
@ -1103,7 +1103,7 @@ f68:
|
|||||||
jbe sys_sheduler
|
jbe sys_sheduler
|
||||||
cmp ebx, 11
|
cmp ebx, 11
|
||||||
jb undefined_syscall
|
jb undefined_syscall
|
||||||
cmp ebx, 29
|
cmp ebx, 30
|
||||||
ja undefined_syscall
|
ja undefined_syscall
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
jmp dword [f68call+ebx*4-11*4]
|
jmp dword [f68call+ebx*4-11*4]
|
||||||
@ -1225,28 +1225,43 @@ f68:
|
|||||||
mov [esp+SYSCALL_STACK._eax], eax
|
mov [esp+SYSCALL_STACK._eax], eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; prototype function for get list services and unload driver
|
; unload driver
|
||||||
;.30: ;get list services
|
.30: ; ecx = handl driver edx = cmdline
|
||||||
|
mov eax, -1
|
||||||
|
cmp edx, OS_BASE
|
||||||
|
jae .fail
|
||||||
|
cmp ecx, OS_BASE
|
||||||
|
jbe .fail
|
||||||
|
|
||||||
|
mov eax, [ecx+SRV.entry]
|
||||||
|
test eax, eax
|
||||||
|
jz .fail
|
||||||
|
push ecx ;save handl
|
||||||
|
|
||||||
|
push edx ;cmdline
|
||||||
|
push DRV_EXIT
|
||||||
|
call eax ;the result is not checked
|
||||||
|
lea esp, [esp+8]
|
||||||
|
push ecx
|
||||||
|
|
||||||
|
mov ebx, [ecx+SRV.base]
|
||||||
|
mov eax, -2 ;error free RAM
|
||||||
|
test ebx, ebx
|
||||||
|
jz .fail
|
||||||
|
stdcall kernel_free, ebx ;del driver
|
||||||
|
|
||||||
|
mov eax, [ecx+SRV.fd]
|
||||||
|
mov edx, [ecx+SRV.bk]
|
||||||
|
mov [edx+SRV.fd], eax
|
||||||
|
mov [eax+SRV.bk], edx
|
||||||
|
stdcall free, ecx
|
||||||
|
;dec [count_services]
|
||||||
|
|
||||||
|
mov [esp+SYSCALL_STACK._eax], eax
|
||||||
|
ret
|
||||||
|
;.31: ;prototype function for get list service
|
||||||
;
|
;
|
||||||
; ret
|
; ret
|
||||||
;.31: ;unload driver ecx = handl driver edx = cmdline
|
|
||||||
; cmp edx, OS_BASE
|
|
||||||
; jae .fail
|
|
||||||
; test ecx, OS_BASE ; when OS_BASE = 0x80000000
|
|
||||||
; jz .fail
|
|
||||||
; mov eax, [ecx+SRV.entry]
|
|
||||||
; push ecx
|
|
||||||
; push edx
|
|
||||||
; push DRV_EXIT
|
|
||||||
; call eax
|
|
||||||
; ; push eax ;
|
|
||||||
; ; push eax ;
|
|
||||||
; lea esp, [esp+8]
|
|
||||||
; push ecx
|
|
||||||
; mov ebx, [ecx+SRV.base]
|
|
||||||
; stdcall kernel_free, ebx
|
|
||||||
; mov [esp+SYSCALL_STACK._eax], eax
|
|
||||||
; ret
|
|
||||||
.fail:
|
.fail:
|
||||||
mov [esp+SYSCALL_STACK._eax], eax
|
mov [esp+SYSCALL_STACK._eax], eax
|
||||||
ret
|
ret
|
||||||
@ -1273,6 +1288,7 @@ f68call: ; keep this table closer to main code
|
|||||||
dd f68.27 ; load_file_umode
|
dd f68.27 ; load_file_umode
|
||||||
dd f68.28 ; loadFileUnicode
|
dd f68.28 ; loadFileUnicode
|
||||||
dd f68.29 ; user_ring
|
dd f68.29 ; user_ring
|
||||||
|
dd f68.30 ; unload_driver
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc load_pe_driver stdcall, file:dword, cmdline:dword
|
proc load_pe_driver stdcall, file:dword, cmdline:dword
|
||||||
|
Loading…
Reference in New Issue
Block a user