home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / sp.zip / SETPRDD.ASM < prev    next >
Assembly Source File  |  1993-09-15  |  3KB  |  179 lines

  1.     .386p                                                                ;Privilegierte Befehle zulassen
  2.     MODEL FLAT
  3.  
  4.     include setprdd.inc
  5.  
  6.     ASSUME    CS:FLAT, DS:FLAT, SS:FLAT, ES:FLAT
  7.  
  8.     PUBLIC  _VDDINIT
  9.  
  10. INSTANCE_DATA    SEGMENT    DWORD USE32 PUBLIC 'DATA'    ;Instanz-Datenfeld
  11. this_VDM    DD 0H
  12. this_CLASS DD 0H
  13. INSTANCE_DATA    ENDS
  14.  
  15. INIT_CODE    SEGMENT DWORD USE32 PUBLIC 'CODE'
  16.  
  17. ;***** 11 BOOL EXPENTRY SetPrioVDDInit(void)
  18.     ALIGN 04H
  19. _VDDINIT    PROC NEAR
  20.     PUSH    EBP
  21.     MOV    EBP,ESP
  22.  
  23.     PUSH VDM_TERMINATE                                    ;Terminate Hook einklinken
  24.     PUSH OFFSET FLAT: SetPrioTerminate
  25.     CALL VDHINSTALLUSERHOOK
  26.     OR EAX,EAX
  27.     JNE FELB1
  28.     XOR EAX,EAX
  29.     JMP FELB2
  30.     ALIGN 04H
  31.  
  32. FELB1:
  33. ;18     if ((VDHINSTALLUSERHOOK(                /* Start Hook einklinken             */
  34.     PUSH VDM_CREATE
  35.     PUSH OFFSET FLAT: SetPrioCreate
  36.     CALL    VDHINSTALLUSERHOOK
  37.     OR    EAX,EAX
  38.     JNE    FELB3
  39.  
  40. ;***** 19             (ULONG)VDM_CREATE,
  41. ;***** 20             (PUSERHOOK)SetPrioCreate))==0)
  42. ;***** 21         return FALSE;
  43.     XOR    EAX,EAX
  44.     JMP    FELB2
  45.     ALIGN 04H
  46. FELB3:
  47.  
  48. ;***** 23     return TRUE;
  49.     MOV    EAX,01H
  50.     JMP    FELB2
  51.     ALIGN 04H
  52.  
  53. FELB2:
  54.     LEAVE
  55.     RET    
  56. _VDDINIT    ENDP
  57. INIT_CODE    ENDS
  58.  
  59. ; Initialisierungsroutinen
  60.  
  61. SWAP_CODE    SEGMENT DWORD USE32 PUBLIC 'CODE'
  62.     ALIGN 04H
  63.     PUBLIC SetPrioCreate
  64. SetPrioCreate    PROC NEAR
  65.     PUSH    EBP
  66.     MOV    EBP,ESP
  67.  
  68. ;***** 10     this_VDM=hvdm;
  69.     MOV    EAX,[EBP+08H];    hvdm
  70.     MOV    DWORD PTR  this_VDM,EAX
  71.  
  72.     PUSH 0h                                                            ;VDHINSTALLINTHOOK aufrufen
  73.     PUSH IntVector
  74.     PUSH OFFSET FLAT:PrioIntHook
  75.     PUSH VDH_ASM_HOOK
  76.     CALL VDHINSTALLINTHOOK
  77.  
  78. ;***** 11     return TRUE;
  79.     MOV    EAX,01H
  80.     LEAVE
  81.     RET 4
  82. SetPrioCreate    ENDP
  83.  
  84.     ALIGN 04H
  85.     PUBLIC SetPrioTerminate
  86. SetPrioTerminate    PROC NEAR
  87.     PUSH    EBP
  88.     MOV    EBP,ESP
  89.     PUSH EBX
  90.     PUSH EDI
  91.     PUSH ESI
  92.  
  93.     MOV EAX, this_CLASS                           ;Ermitteln, ob Prioritätsklasse verwen-
  94.     CMP EAX,0H                          ;det, wenn ja, Klasse verlassen
  95.     JE TERM1
  96.  
  97.     OR EAX, 00030000h
  98.  
  99.     PUSH this_VDM
  100.     PUSH EAX
  101.     PUSH 0H
  102.     CALL VDHSETPRIORITY
  103.  
  104.     ALIGN 04H
  105.  
  106. TERM1:
  107. ;***** 11     return TRUE;
  108.     MOV    EAX,01H
  109.  
  110.     POP ESI
  111.     POP EDI
  112.     POP EBX
  113.     LEAVE
  114.     RET 4
  115. SetPrioTerminate    ENDP
  116.  
  117. ;PrioIntHook Function
  118.     ALIGN 04H
  119.     PUBLIC PrioIntHook
  120. PrioIntHook PROC NEAR
  121.     PUSH  EBP
  122.     MOV    EBP,ESP
  123.  
  124.     MOV EAX,DWORD PTR [EBX+1Ch]                    ;CLASS auswerten
  125.     AND EAX,0000FFFFh
  126.     CMP EAX,0H
  127.     JE INTHOOK_CONTINUE
  128.     MOV EDX,this_CLASS
  129.     CMP EDX,0H
  130.     JE INTHOOK_INITIAL
  131.     CMP EAX,EDX
  132.     JE INTHOOK_CONTINUE
  133.  
  134.     OR EDX,00030000h                                        ;alte Klasse abwählen
  135.     PUSH EAX                                                        ;zur Sicherheit
  136.     PUSH this_VDM
  137.     PUSH EDX
  138.     PUSH DWORD PTR [EBX+14H]
  139.     CALL VDHSETPRIORITY
  140.     POP EAX
  141.  
  142. INTHOOK_INITIAL:
  143.     ALIGN 04H
  144.     MOV this_CLASS,EAX                                    ;neue Klasse merken
  145.     OR EAX,00010000h                                        ;neue Klasse anwählen
  146.     PUSH this_VDM
  147.     PUSH EAX
  148.     PUSH DWORD PTR [EBX+14H]
  149.     CALL VDHSETPRIORITY
  150.     JMP INTHOOK_READY
  151.  
  152. INTHOOK_CONTINUE:
  153.     ALIGN 04H
  154.     PUSH    this_VDM
  155.     CMP EAX,0H
  156.     JE INTHOOK_CONTINUE1
  157.  
  158.     OR EAX,00020000h                                         ;Klasse weiterbenutzen
  159.  
  160. INTHOOK_CONTINUE1:
  161.     ALIGN 04H
  162.  
  163.     AND EAX,0000FFFFh                                        ;Default- Änderung
  164.     PUSH EAX
  165.     PUSH DWORD PTR [EBX+14H]                        ;Delta übergeben
  166.     CALL    VDHSETPRIORITY
  167.  
  168. INTHOOK_READY:
  169.     ALIGN 04H
  170.  
  171.     CLC
  172.     CMC
  173.     LEAVE
  174.     RET
  175. PrioIntHook ENDP
  176.  
  177. SWAP_CODE    ENDS
  178.  
  179. END _VDDINIT