|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
vfmessage.h
Abstract:
This module contains prototypes for functions used to retrieve text and flags associated with each error.
Author:
Adrian J. Oney (adriao) 20-Apr-1998
Environment:
Kernel mode
Revision History:
AdriaO 02/10/2000 - Seperated out from ntos\io\ioassert.c
--*/
//
// The verifier uses tables of messages and with indexes into the tables.
//
typedef ULONG VFMESSAGE_TABLEID; typedef ULONG VFMESSAGE_ERRORID;
//
// VFM_ flags control how a verifier message is handled.
//
// VFM_FLAG_INITIALIZED - Set when the error template has been updated with
// error-class information
//
// VFM_FLAG_BEEP - Set if error should beep in debugger
//
// VFM_FLAG_ZAPPED - Set if error was "zapped" (ie prints instead of
// stops) via debugger
//
// VFM_FLAG_CLEARED - Set if error was cleared (disabled) in debugger
//
// VFM_DEPLOYMENT_FAILURE - Set if the error is severe enough to warrant
// removal of the driver from a production system
//
// VFM_LOGO_FAILURE - Set if the error should disallow certification
// for the hardware or the driver
//
// VFM_IGNORE_DRIVER_LIST - Set if error should fire regardless of whether
// the offending driver is being verified or not.
//
#define VFM_FLAG_INITIALIZED 0x00000001
#define VFM_FLAG_BEEP 0x00000002
#define VFM_FLAG_ZAPPED 0x00000004
#define VFM_FLAG_CLEARED 0x00000008
#define VFM_DEPLOYMENT_FAILURE 0x00000010
#define VFM_LOGO_FAILURE 0x00000020
#define VFM_IGNORE_DRIVER_LIST 0x00000040
//
// A message class contains VFM_ flags and some generic text describing the
// problem class.
//
typedef struct _VFMESSAGE_CLASS {
ULONG ClassFlags; PCSTR MessageClassText;
} VFMESSAGE_CLASS, *PVFMESSAGE_CLASS;
typedef VFMESSAGE_CLASS const *PCVFMESSAGE_CLASS;
//
// Individual error template. Identifies the index, the message class it's
// associated with, the parameters it takes along with the formatted text it
// displays. Note the ulong flags field - this should always be preinited to
// zero!
//
typedef struct _VFMESSAGE_TEMPLATE {
VFMESSAGE_ERRORID MessageID; PCVFMESSAGE_CLASS MessageClass; ULONG Flags; PCSTR ParamString; PCSTR MessageText;
} VFMESSAGE_TEMPLATE, *PVFMESSAGE_TEMPLATE;
//
// Message index 0 is reserved for use in the override tables
//
#define VIMESSAGE_ALL_IDS 0
//
// An override entry allows the verifier to special case generic assertions
// that occur against specific drivers. This is done by overriding the error
// class on the fly.
//
typedef struct _VFMESSAGE_OVERRIDE {
VFMESSAGE_ERRORID MessageID; PCSTR DriverName; PCVFMESSAGE_CLASS ReplacementClass;
} VFMESSAGE_OVERRIDE, *PVFMESSAGE_OVERRIDE;
typedef VFMESSAGE_OVERRIDE const *PCVFMESSAGE_OVERRIDE;
//
// The table of errors. Contains the TableID (used for internal lookup),
// bugcheck major ID, array of messages and array of overrides
//
typedef struct _VFMESSAGE_TEMPLATE_TABLE {
VFMESSAGE_TABLEID TableID; ULONG BugCheckMajor; PVFMESSAGE_TEMPLATE TemplateArray; ULONG TemplateCount; PCVFMESSAGE_OVERRIDE OverrideArray; ULONG OverrideCount;
} VFMESSAGE_TEMPLATE_TABLE, *PVFMESSAGE_TEMPLATE_TABLE;
//
// Retrieves an internal error table based on ID.
//
VOID VfMessageRetrieveInternalTable( IN VFMESSAGE_TABLEID TableID, OUT PVFMESSAGE_TEMPLATE_TABLE *MessageTable );
//
// Retrieves and formats the appropriate error message.
//
VOID VfMessageRetrieveErrorData( IN PVFMESSAGE_TEMPLATE_TABLE MessageTable OPTIONAL, IN VFMESSAGE_ERRORID MessageID, IN PSTR AnsiDriverName, OUT ULONG *BugCheckMajor, OUT PCVFMESSAGE_CLASS *MessageClass, OUT PCSTR *MessageTextTemplate, OUT PULONG *TemplateFlags );
//
// This file contains a set of internal message tables.
//
// The IO Verifier Table Index is...
//
#define VFMESSAGE_TABLE_IOVERIFIER 1
//
// IO Verifier Messages
//
typedef enum _DCERROR_ID {
DCERROR_UNSPECIFIED = 0x200, DCERROR_DELETE_WHILE_ATTACHED, DCERROR_DETACH_NOT_ATTACHED, DCERROR_CANCELROUTINE_FORWARDED, DCERROR_NULL_DEVOBJ_FORWARDED, DCERROR_QUEUED_IRP_FORWARDED, DCERROR_NEXTIRPSP_DIRTY, DCERROR_IRPSP_COPIED, DCERROR_INSUFFICIENT_STACK_LOCATIONS, DCERROR_QUEUED_IRP_COMPLETED, DCERROR_FREE_OF_INUSE_TRACKED_IRP, DCERROR_FREE_OF_INUSE_IRP, DCERROR_FREE_OF_THREADED_IRP, DCERROR_REINIT_OF_ALLOCATED_IRP_WITH_QUOTA, DCERROR_PNP_IRP_BAD_INITIAL_STATUS, DCERROR_POWER_IRP_BAD_INITIAL_STATUS, DCERROR_WMI_IRP_BAD_INITIAL_STATUS, DCERROR_SKIPPED_DEVICE_OBJECT, DCERROR_BOGUS_FUNC_TRASHED, DCERROR_BOGUS_STATUS_TRASHED, DCERROR_BOGUS_INFO_TRASHED, DCERROR_PNP_FAILURE_FORWARDED, DCERROR_PNP_IRP_STATUS_RESET, DCERROR_PNP_IRP_NEEDS_HANDLING, DCERROR_PNP_IRP_HANDS_OFF, DCERROR_POWER_FAILURE_FORWARDED, DCERROR_POWER_IRP_STATUS_RESET, DCERROR_INVALID_STATUS, DCERROR_UNNECCESSARY_COPY, DCERROR_SHOULDVE_DETACHED, DCERROR_SHOULDVE_DELETED, DCERROR_MISSING_DISPATCH_FUNCTION, DCERROR_WMI_IRP_NOT_FORWARDED, DCERROR_DELETED_PRESENT_PDO, DCERROR_BUS_FILTER_ERRONEOUSLY_DETACHED, DCERROR_BUS_FILTER_ERRONEOUSLY_DELETED, DCERROR_INCONSISTANT_STATUS, DCERROR_UNINITIALIZED_STATUS, DCERROR_IRP_RETURNED_WITHOUT_COMPLETION, DCERROR_COMPLETION_ROUTINE_PAGABLE, DCERROR_PENDING_BIT_NOT_MIGRATED, DCERROR_CANCELROUTINE_ON_FORWARDED_IRP, DCERROR_PNP_IRP_NEEDS_PDO_HANDLING, DCERROR_TARGET_RELATION_LIST_EMPTY, DCERROR_TARGET_RELATION_NEEDS_REF, DCERROR_BOGUS_PNP_IRP_COMPLETED, DCERROR_SUCCESSFUL_PNP_IRP_NOT_FORWARDED, DCERROR_UNTOUCHED_PNP_IRP_NOT_FORWARDED, DCERROR_BOGUS_POWER_IRP_COMPLETED, DCERROR_SUCCESSFUL_POWER_IRP_NOT_FORWARDED, DCERROR_UNTOUCHED_POWER_IRP_NOT_FORWARDED, DCERROR_PNP_QUERY_CAP_BAD_VERSION, DCERROR_PNP_QUERY_CAP_BAD_SIZE, DCERROR_PNP_QUERY_CAP_BAD_ADDRESS, DCERROR_PNP_QUERY_CAP_BAD_UI_NUM, DCERROR_RESTRICTED_IRP, DCERROR_REINIT_OF_ALLOCATED_IRP_WITHOUT_QUOTA, DCERROR_UNFORWARDED_IRP_COMPLETED, DCERROR_DISPATCH_CALLED_AT_BAD_IRQL, DCERROR_BOGUS_MINOR_STATUS_TRASHED, DCERROR_CANCELROUTINE_AFTER_COMPLETION, DCERROR_PENDING_RETURNED_NOT_MARKED, DCERROR_PENDING_MARKED_NOT_RETURNED, DCERROR_POWER_PAGABLE_NOT_INHERITED, DCERROR_DOUBLE_DELETION, DCERROR_DETACHED_IN_SURPRISE_REMOVAL, DCERROR_DELETED_IN_SURPRISE_REMOVAL, DCERROR_DO_INITIALIZING_NOT_CLEARED, DCERROR_DO_FLAG_NOT_COPIED, DCERROR_INCONSISTANT_DO_FLAGS, DCERROR_DEVICE_TYPE_NOT_COPIED, DCERROR_NON_FAILABLE_IRP, DCERROR_NON_PDO_RETURNED_IN_RELATION, DCERROR_DUPLICATE_ENUMERATION, DCERROR_FILE_IO_AT_BAD_IRQL, DCERROR_MISHANDLED_TARGET_DEVICE_RELATIONS, DCERROR_PENDING_RETURNED_NOT_MARKED_2, DCERROR_DDI_REQUIRES_PDO, DCERROR_MAXIMUM
} DCERROR_ID;
|