home *** CD-ROM | disk | FTP | other *** search
- .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