Jump to content

DevHelp RegisterKrnlExit: Difference between revisions

From EDM2
Created page with "DevHlp_RegisterKrnlExit allows an OS/2 device driver to handle NMIs (Non-Masked Interrupts), Trap 2 Parity Errors, and System Fatal Faults (fatal errors at Ring 0). This DevH..."
 
Ak120 (talk | contribs)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
{{DISPLAYTITLE:DevHelp_RegisterKrnlExit}}
DevHlp_RegisterKrnlExit allows an OS/2 device driver to handle NMIs (Non-Masked Interrupts), Trap 2 Parity Errors, and System Fatal Faults (fatal errors at Ring 0).
DevHlp_RegisterKrnlExit allows an OS/2 device driver to handle NMIs (Non-Masked Interrupts), Trap 2 Parity Errors, and System Fatal Faults (fatal errors at Ring 0).


This DevHlp provides a notification to the device driver that a serious error occurred in the operating system and gives the device driver limited access to system resources. This DevHlp is valid at initialization time and in kernel mode.  
This DevHlp provides a notification to the device driver that a serious error occurred in the operating system and gives the device driver limited access to system resources. This DevHlp is valid at initialization time and in kernel mode.


==Syntax==
==Syntax==
Line 55: Line 56:


==Remarks==
==Remarks==
When DevHlp_RegisterKrnlExit is initialized, it is the only active thread in the system. Therefore, this exit must return control to the operating system.
When DevHlp_RegisterKrnlExit is initialized, it is the only active thread in the system. Therefore, this exit must return control to the operating system.


; NMI's : The DevHlp_RegisterKrnlExit will stop enumerating through the NMI device driver chain when an NMI condition is handled.
; NMI's : The DevHlp_RegisterKrnlExit will stop enumerating through the NMI device driver chain when an NMI condition is handled.
Line 67: Line 68:
'''NMI Handling'''
'''NMI Handling'''


              Entry:
Entry:
                      EAX        = Kernel Exit Routine's DS
EAX        = Kernel Exit Routine's DS
Exit:
              Exit:
EAX        = Return Code Kernel Exit Routine
                      EAX        = Return Code Kernel Exit Routine
              0xffffffff (is the only valid one)
                                    0xffffffff (is the only valid one)
 
The following are restored registers the exit routine can use:


The following are restored registers the exit routine can use:
               EAX, EBX, ECX, EDX, EBP, ESI, EDI,
               EAX, EBX, ECX, EDX, EBP, ESI, EDI,
               ESP, DS,  ES,  FS,  GS,  Flags
               ESP, DS,  ES,  FS,  GS,  Flags
The exit routine can handle the the NMI or allow OS/2 to handle the NMI. If the exit routine handled the NMI, it must return with EAX - set to 0xffffffff.
The exit routine can handle the the NMI or allow OS/2 to handle the NMI. If the exit routine handled the NMI, it must return with EAX - set to 0xffffffff.


The DevHlp_RegisterKrnlExit will stop enumerating through the NMI device driver chain when an NMI condition is handled.
The DevHlp_RegisterKrnlExit will stop enumerating through the NMI device driver chain when an NMI condition is handled.


; SFF (System Fatal Fault) Handling
;SFF (System Fatal Fault) Handling:SFF is only a notification to the device driver.


SFF is only a notification to the device driver.
Entry:
 
EAX        = Kernel Exit Routine's DS
              Entry:
Exit:
                      EAX        = Kernel Exit Routine's DS
No Return Codes from this function
 
              Exit:
 
                      No Return Codes from this function


The following are restored registers the exit routine could have used:
The following are restored registers the exit routine could have used:
 
EAX, EBX, ECX, EDX, EBP, ESI, EDI,
                                EAX, EBX, ECX, EDX, EBP, ESI, EDI,
ESP, DS,  ES,  FS,  GS,  Flags
                                ESP, DS,  ES,  FS,  GS,  Flags
   
   
              IF EBX =  -9L
IF EBX =  -9L
                  this is a debug kernel
  this is a debug kernel
                  and the debugger will display
  and the debugger will display
                  the registers.
  the registers.
              ELSE (this is a Retail Kernel)
ELSE (this is a Retail Kernel)
                  IF EBX =  -1
  IF EBX =  -1
                    this is a TSF or VSF  stack frame
    this is a TSF or VSF  stack frame
                    and ESI is the Trap Number
    and ESI is the Trap Number
                  ELSE
  ELSE
                    this is a KSF stack frame
    this is a KSF stack frame
                    and ESI is the Trap Number
    and ESI is the Trap Number
                  ENDIF
  ENDIF
              ENDIF
ENDIF
 
 


[[Category:DevHlps]]
[[Category:DevHlps]]

Latest revision as of 14:16, 2 January 2020

DevHlp_RegisterKrnlExit allows an OS/2 device driver to handle NMIs (Non-Masked Interrupts), Trap 2 Parity Errors, and System Fatal Faults (fatal errors at Ring 0).

This DevHlp provides a notification to the device driver that a serious error occurred in the operating system and gives the device driver limited access to system resources. This DevHlp is valid at initialization time and in kernel mode.

Syntax

C

None available.

Assembler

         MOV       ax,0x1000           ; Kernel Exit Flags
                                       ;   Add     0x1000
                                       ;   Delete  0x0000
                                       ;
         MOV       cx,0x0001           ; Kernel Exit Type
                                       ;   NMI     0x0000
                                       ;   SFF     0x0001
                                       ;
         MOV       bx,SEL Sel          ; 16-bit Selector to User Exit
         MOV       si,OFF Off          ; 16-bit Offset   to User Exit
         MOV       dl,DevHlp_RegisterKrnlExit

         CALL      Device_Help

Parameters

C

None available.

Assembler

         MOV       ax,0x1000           ; Kernel Exit Flags
                                       ;   Add     0x1000
                                       ;   Delete  0x0000
                                       ;
         MOV       cx,0x0001           ; Kernel Exit Type
                                       ;   NMI     0x0000
                                       ;   SFF     0x0001
                                       ;
         MOV       bx,SEL Sel          ; 16-bit Selector to User Exit
         MOV       si,OFF Off          ; 16-bit Offset   to User Exit

Return Code

C

None available.

Assembler

         EAX is any system return code
              0  = success
        non-zero = Error

Remarks

When DevHlp_RegisterKrnlExit is initialized, it is the only active thread in the system. Therefore, this exit must return control to the operating system.

NMI's
The DevHlp_RegisterKrnlExit will stop enumerating through the NMI device driver chain when an NMI condition is handled.

Note: If the exit routine handled the NMI, it must return with EAX - set to 0xffffffff.

System Fatal Faults
System Fatal Faults are notifications to the device driver that the operating system encountered a non-recoverable error. At this point, you can attempt device-specific shutdown or cleanup.

If the device driver does not handle the error condition correctly, the result can be a hung system. The device driver must perform a Return Far to return control to OS/2.

NMI Handling

Entry:

EAX         = Kernel Exit Routine's DS

Exit:

EAX         = Return Code Kernel Exit Routine
              0xffffffff (is the only valid one)

The following are restored registers the exit routine can use:

              EAX, EBX, ECX, EDX, EBP, ESI, EDI,
              ESP, DS,  ES,  FS,  GS,  Flags

The exit routine can handle the the NMI or allow OS/2 to handle the NMI. If the exit routine handled the NMI, it must return with EAX - set to 0xffffffff.

The DevHlp_RegisterKrnlExit will stop enumerating through the NMI device driver chain when an NMI condition is handled.

SFF (System Fatal Fault) Handling
SFF is only a notification to the device driver.

Entry:

EAX         = Kernel Exit Routine's DS

Exit:

No Return Codes from this function

The following are restored registers the exit routine could have used:

EAX, EBX, ECX, EDX, EBP, ESI, EDI,
ESP, DS,  ES,  FS,  GS,  Flags

IF EBX =  -9L
  this is a debug kernel
  and the debugger will display
  the registers.
ELSE (this is a Retail Kernel)
  IF EBX =  -1
    this is a TSF or VSF  stack frame
    and ESI is the Trap Number
  ELSE
    this is a KSF stack frame
    and ESI is the Trap Number
  ENDIF
ENDIF