PRB: IoRaiseInformationalHardError Does Not Behave as Expected (152201)



The information in this article applies to:

  • Microsoft Windows NT 4.0 Driver Development Kit (DDK), when used with:
    • the operating system: Microsoft Windows NT 3.51
    • the operating system: Microsoft Windows NT 4.0
  • Microsoft Windows 2000 Driver Development Kit (DDK), when used with:
    • the operating system: Microsoft Windows 2000
  • Microsoft Windows XP Driver Development Kit (DDK), when used with:
    • the operating system: Microsoft Windows XP

This article was previously published under Q152201

SYMPTOMS

IoRaiseInformationalHardError is currently described in the documentation as:
   VOID
      IoRaiseInformationalHardError(
         IN NTSTATUS  ErrorStatus,
         IN PUNICODE_STRING  String,      /* optional */ 
         IN PKTHREAD  Thread        /* optional */ 
         );
				

IoRaiseInformationalHardError sends a popup to the user, warning about a device I/O error that indicates why a user I/O request failed.

CAUSE

IoRaiseInformationalHardError does not behave as expected for driver writers. Many writers attempt to pass in a driver-defined ErrorStatus and/or String that is expected to be displayed in the popup. This is not the case. The API's actual behavior is as follows:
  • For any ErrorStatus defined outside of %DDK%\inc\ntstatus.h, the popup'stext reads "Unknown Hard Error" regardless of the String parameter.
  • For any ErrorStatus defined in ntstatus.h, the popup's text corresponds to the MessageText in ntstatus.h regardless of the String parameter.
  • When the Thread parameter is in an application's context, the popup's title reads: "ApplicationName.exe - System Error."
  • When the Thread parameter is NULL or in arbitrary system context, the popup's title reads: "System Process - System Error," and the MessageText is written to the Event Log if ErrorStatus is defined in ntstatus.h.

RESOLUTION

Driver writers can use the Event Log APIs to communicate driver-defined event strings to the user. See section 16.6, Error Logging and NTSTATUS Values, in the Kernel-mode Driver Design Guide, and the sample in %DDK%\src\general\errorlog for more information on this technique.

STATUS

This behavior is by design.

Modification Type:MinorLast Reviewed:5/24/2004
Keywords:kbprb kbProgramming KB152201