Rev 269 | Rev 281 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 269 | Rev 278 | ||
---|---|---|---|
Line 279... | Line 279... | ||
279 | restore out_size |
279 | restore out_size |
280 | 280 | ||
Line 281... | Line 281... | ||
281 | align 4 |
281 | align 4 |
282 | proc get_service stdcall, sz_name:dword |
282 | proc get_service stdcall, sz_name:dword |
283 | locals |
- | |
284 | srv_ptr dd ? |
- | |
285 | counter dd ? |
- | |
286 | endl |
- | |
287 | - | ||
288 | mov eax, [sz_name] |
283 | mov eax, [sz_name] |
289 | test eax, eax |
284 | test eax, eax |
290 | jnz @F |
285 | jnz @F |
291 | ret |
286 | ret |
292 | @@: |
287 | @@: |
293 | mov [srv_ptr], srv_tab |
- | |
294 | mov [counter], 16 |
288 | mov edx, [srv.fd] |
295 | @@: |
289 | @@: |
- | 290 | cmp edx, srv.fd-SRV_FD_OFFSET |
|
- | 291 | je .not_load |
|
- | 292 | ||
296 | stdcall strncmp, [srv_ptr], [sz_name], 16 |
293 | stdcall strncmp, edx, [sz_name], 16 |
297 | test eax, eax |
294 | test eax, eax |
298 | je .ok |
295 | je .ok |
Line 299... | Line 296... | ||
299 | 296 | ||
300 | add [srv_ptr], SRV_SIZE |
- | |
301 | dec [counter] |
297 | mov edx, [edx+SRV.fd] |
302 | jnz @B |
298 | jmp @B |
303 | .not_load: |
299 | .not_load: |
304 | stdcall find_service, [sz_name] |
300 | stdcall find_service, [sz_name] |
305 | test eax, eax |
301 | test eax, eax |
306 | jnz @F |
- | |
307 | ret |
- | |
308 | @@: |
302 | jz @F |
- | 303 | stdcall load_driver, eax |
|
309 | stdcall load_driver, eax |
304 | @@: |
310 | ret |
305 | ret |
311 | .ok: |
306 | .ok: |
312 | mov eax, [srv_ptr] |
307 | mov eax, edx |
313 | ret |
308 | ret |
Line 314... | Line 309... | ||
314 | endp |
309 | endp |
315 | 310 | ||
Line 341... | Line 336... | ||
341 | ret |
336 | ret |
342 | endp |
337 | endp |
343 | 338 | ||
Line 344... | Line 339... | ||
344 | align 4 |
339 | align 4 |
345 | proc reg_service stdcall, sz_name:dword, handler:dword |
- | |
346 | locals |
340 | reg_service: |
347 | srv dd ? |
341 | .sz_name equ esp+4 |
348 | endl |
342 | .handler equ esp+8 |
349 | - | ||
350 | mov eax, [sz_name] |
343 | mov eax, [.sz_name] |
351 | test eax, eax |
344 | test eax, eax |
352 | jz .fail |
345 | jz .fail |
Line 353... | Line 346... | ||
353 | 346 | ||
354 | mov ebx, [handler] |
347 | mov ebx, [.handler] |
355 | test ebx, ebx |
348 | test ebx, ebx |
Line -... | Line 349... | ||
- | 349 | jz .fail |
|
356 | jz .fail |
350 | |
357 | 351 | mov eax, SRV_SIZE |
|
358 | call alloc_service |
352 | call malloc ;call alloc_service |
Line 359... | Line -... | ||
359 | test eax, eax |
- | |
360 | jz .fail |
353 | test eax, eax |
361 | 354 | jz .fail |
|
362 | mov [srv], eax |
355 | |
363 | mov edi, eax |
356 | mov edi, eax |
- | 357 | mov esi, [.sz_name] |
|
- | 358 | mov ecx, 16/4 |
|
- | 359 | rep movsd |
|
- | 360 | ||
- | 361 | mov [eax+SRV.magic], ' SRV' |
|
- | 362 | mov [eax+SRV.size], SRV_SIZE |
|
- | 363 | ||
- | 364 | mov ebx, srv.fd-SRV_FD_OFFSET |
|
- | 365 | mov edx, [ebx+SRV.fd] |
|
- | 366 | mov [eax+SRV.fd], edx |
|
Line 364... | Line -... | ||
364 | mov esi, [sz_name] |
- | |
365 | mov ecx, 16 |
- | |
366 | rep movsb |
- | |
367 | 367 | mov [eax+SRV.bk], ebx |
|
368 | mov edi, eax |
368 | mov [ebx+SRV.fd], eax |
369 | mov [edi+SRV.magic], ' SRV' |
- | |
370 | mov [edi+SRV.size], SRV_SIZE |
369 | mov [edx+SRV.bk], eax |
371 | mov ebx, [handler] |
370 | |
372 | mov [edi+SRV.srv_proc], ebx |
371 | mov ecx, [.handler] |
373 | mov eax, [srv] |
372 | mov [eax+SRV.srv_proc], ecx |
374 | ret |
- | |
Line 375... | Line 373... | ||
375 | .fail: |
373 | ret |
376 | xor eax, eax |
374 | .fail: |
Line 377... | Line 375... | ||
377 | ret |
375 | xor eax, eax |
Line 965... | Line 963... | ||
965 | xor eax, eax |
963 | xor eax, eax |
966 | ret |
964 | ret |
967 | endp |
965 | endp |
968 | 966 | ||
Line -... | Line 967... | ||
- | 967 | ||
969 | align 4 |
968 | align 4 |
970 | proc stop_all_services |
969 | proc stop_all_services |
- | 970 | ||
971 | not [srv_map] |
971 | mov edx, [srv.fd] |
972 | .next: |
972 | .next: |
973 | bsf eax, [srv_map] |
973 | cmp edx, srv.fd-SRV_FD_OFFSET |
974 | jnz .find |
974 | je .done |
975 | ret |
- | |
976 | .find: |
- | |
977 | btr [srv_map], eax |
- | |
978 | shl eax,0x02 |
- | |
979 | lea eax,[srv_tab+eax+eax*8] ;srv_tab+eax*36 |
- | |
980 | cmp [eax+SRV.magic], ' SRV' |
975 | cmp [edx+SRV.magic], ' SRV' |
981 | jne .next |
976 | jne .next |
982 | cmp [eax+SRV.size], SRV_SIZE |
977 | cmp [edx+SRV.size], SRV_SIZE |
983 | jne .next |
978 | jne .next |
984 | mov ebx, [eax+SRV.entry] |
979 | mov ebx, [edx+SRV.entry] |
- | 980 | mov edx, [edx+SRV.fd] |
|
- | 981 | push edx |
|
985 | stdcall ebx, dword -1 |
982 | stdcall ebx, dword -1 |
- | 983 | pop edx |
|
986 | jmp .next |
984 | jmp .next |
- | 985 | .done: |
|
- | 986 | ret |
|
987 | endp |
987 | endp |
Line 988... | Line 988... | ||
988 | 988 | ||
989 | 989 |