.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