home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
sp.zip
/
SETPRDD.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-09-15
|
3KB
|
179 lines
.386p ;Privilegierte Befehle zulassen
MODEL FLAT
include setprdd.inc
ASSUME CS:FLAT, DS:FLAT, SS:FLAT, ES:FLAT
PUBLIC _VDDINIT
INSTANCE_DATA SEGMENT DWORD USE32 PUBLIC 'DATA' ;Instanz-Datenfeld
this_VDM DD 0H
this_CLASS DD 0H
INSTANCE_DATA ENDS
INIT_CODE SEGMENT DWORD USE32 PUBLIC 'CODE'
;***** 11 BOOL EXPENTRY SetPrioVDDInit(void)
ALIGN 04H
_VDDINIT PROC NEAR
PUSH EBP
MOV EBP,ESP
PUSH VDM_TERMINATE ;Terminate Hook einklinken
PUSH OFFSET FLAT: SetPrioTerminate
CALL VDHINSTALLUSERHOOK
OR EAX,EAX
JNE FELB1
XOR EAX,EAX
JMP FELB2
ALIGN 04H
FELB1:
;18 if ((VDHINSTALLUSERHOOK( /* Start Hook einklinken */
PUSH VDM_CREATE
PUSH OFFSET FLAT: SetPrioCreate
CALL VDHINSTALLUSERHOOK
OR EAX,EAX
JNE FELB3
;***** 19 (ULONG)VDM_CREATE,
;***** 20 (PUSERHOOK)SetPrioCreate))==0)
;***** 21 return FALSE;
XOR EAX,EAX
JMP FELB2
ALIGN 04H
FELB3:
;***** 23 return TRUE;
MOV EAX,01H
JMP FELB2
ALIGN 04H
FELB2:
LEAVE
RET
_VDDINIT ENDP
INIT_CODE ENDS
; Initialisierungsroutinen
SWAP_CODE SEGMENT DWORD USE32 PUBLIC 'CODE'
ALIGN 04H
PUBLIC SetPrioCreate
SetPrioCreate PROC NEAR
PUSH EBP
MOV EBP,ESP
;***** 10 this_VDM=hvdm;
MOV EAX,[EBP+08H]; hvdm
MOV DWORD PTR this_VDM,EAX
PUSH 0h ;VDHINSTALLINTHOOK aufrufen
PUSH IntVector
PUSH OFFSET FLAT:PrioIntHook
PUSH VDH_ASM_HOOK
CALL VDHINSTALLINTHOOK
;***** 11 return TRUE;
MOV EAX,01H
LEAVE
RET 4
SetPrioCreate ENDP
ALIGN 04H
PUBLIC SetPrioTerminate
SetPrioTerminate PROC NEAR
PUSH EBP
MOV EBP,ESP
PUSH EBX
PUSH EDI
PUSH ESI
MOV EAX, this_CLASS ;Ermitteln, ob Prioritätsklasse verwen-
CMP EAX,0H ;det, wenn ja, Klasse verlassen
JE TERM1
OR EAX, 00030000h
PUSH this_VDM
PUSH EAX
PUSH 0H
CALL VDHSETPRIORITY
ALIGN 04H
TERM1:
;***** 11 return TRUE;
MOV EAX,01H
POP ESI
POP EDI
POP EBX
LEAVE
RET 4
SetPrioTerminate ENDP
;PrioIntHook Function
ALIGN 04H
PUBLIC PrioIntHook
PrioIntHook PROC NEAR
PUSH EBP
MOV EBP,ESP
MOV EAX,DWORD PTR [EBX+1Ch] ;CLASS auswerten
AND EAX,0000FFFFh
CMP EAX,0H
JE INTHOOK_CONTINUE
MOV EDX,this_CLASS
CMP EDX,0H
JE INTHOOK_INITIAL
CMP EAX,EDX
JE INTHOOK_CONTINUE
OR EDX,00030000h ;alte Klasse abwählen
PUSH EAX ;zur Sicherheit
PUSH this_VDM
PUSH EDX
PUSH DWORD PTR [EBX+14H]
CALL VDHSETPRIORITY
POP EAX
INTHOOK_INITIAL:
ALIGN 04H
MOV this_CLASS,EAX ;neue Klasse merken
OR EAX,00010000h ;neue Klasse anwählen
PUSH this_VDM
PUSH EAX
PUSH DWORD PTR [EBX+14H]
CALL VDHSETPRIORITY
JMP INTHOOK_READY
INTHOOK_CONTINUE:
ALIGN 04H
PUSH this_VDM
CMP EAX,0H
JE INTHOOK_CONTINUE1
OR EAX,00020000h ;Klasse weiterbenutzen
INTHOOK_CONTINUE1:
ALIGN 04H
AND EAX,0000FFFFh ;Default- Änderung
PUSH EAX
PUSH DWORD PTR [EBX+14H] ;Delta übergeben
CALL VDHSETPRIORITY
INTHOOK_READY:
ALIGN 04H
CLC
CMC
LEAVE
RET
PrioIntHook ENDP
SWAP_CODE ENDS
END _VDDINIT