DevHelp RegisterKrnlExit: Difference between revisions
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..." |
m →Remarks |
||
(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. | |||
; 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: | |||
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, | 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. | ||
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: | 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 | |||
[[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