Windows2000/private/ntos/inc/ioeapi.h

228 lines
4.9 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
ioeapi.h
Abstract:
This module contains the public structure and constant definitions.
Author:
Michael Tsang (MikeTs) 1-Sep-1998
Environment:
Kernel mode
Revision History:
*/
#ifndef _IOEAPI_H
#define _IOEAPI_H
// begin_ntddk begin_wdm begin_nthal begin_ntifs begin_ntndis begin_ntminiport begin_srv
// Constants
#define STATUS_IOE_MESSAGE 0x11111111 //BUGBUG: shouldn't be here
#define STATUS_IOE_MODULE_ALREADY_REGISTERED 0x22222222
#define STATUS_IOE_DATABASE_NOT_READY 0x44444444
#define MAX_MSG_LEN 1023
// DataBlkType values in IoErrLogErrBy*
#define IOEDATA_NONE 0x00000000
#define IOEDATA_PRIVATE 0x00000001
#define IOEDATA_WSTRING 0x00000002
#define IOEDATA_MAX IOEDATA_WSTRING
#define IOEDATA_TEXT 0x80000000
// ErrLog ErrLogKey flags
#define IOEDATATAG_TYPE_MASK 0x000000ff
#define IOEDATATAG_TYPE_DEVNODE 0x00000001
#define IOEDATATAG_BITS IOEDATATAG_TYPE_MASK
// Type Definitions
typedef struct _errid {
GUID ComponentGuid;
ULONG ErrCode;
} ERRID, *PERRID;
typedef struct _errdata {
ERRID ErrID; //globally unique error ID
ULONG TextDataOffset; //offset to unicode string data
ULONG DataBlkType; //type of associated data
ULONG DataBlkLen; //length of associated data
ULONG DataBlkOffset; //points to associated data
GUID MofGuid; //MOF Guid to describe data
} ERRDATA, *PERRDATA;
typedef struct _errinfo {
ULONG Signature; //signature of the structure
ULONG Version; //version of the structure
ULONG Size; //size of the structure
PVOID DataTag; //tag associated with the error data
ULONG TagFlags; //tag flags
ULONG NumErrEntries; //number of error entries
ERRDATA ErrEntries[1]; //array of error data
} ERRINFO, *PERRINFO;
#define SIG_ERRINFO 'IRRE' //signature of ERRINFO "ERRI"
typedef struct _infoblk {
ULONG Signature; //signature of the structure
ULONG Version; //version of the structure
ULONG Size; //size of the structure
ULONG NumErrInfos; //number of error info blocks
ERRINFO ErrInfos[1]; //array of error info.
} INFOBLK, *PINFOBLK;
#define SIG_INFOBLK 'KLBI' //signature of INFOBLK "IBLK"
typedef NTSTATUS (*PERRHANDLER)(PVOID, ULONG);
// Exported Error Logging APIs
HANDLE
IoErrInitErrLogByIrp(
IN PIRP Irp,
IN ULONG ulFlags
);
HANDLE
IoErrInitErrLogByThreadID(
IN PKTHREAD ThreadID,
IN ULONG ulFlags
);
VOID
IoErrLogErrByIrp(
IN PIRP Irp,
IN CONST GUID *ComponentGuid,
IN ULONG ErrCode,
IN PWSTR TextData OPTIONAL,
IN ULONG DataBlkType,
IN ULONG DataBlkLen OPTIONAL,
IN PVOID DataBlock OPTIONAL,
IN CONST GUID *MofGuid OPTIONAL
);
VOID
IoErrLogErrByThreadID(
IN PKTHREAD ThreadID,
IN CONST GUID *ComponentGuid,
IN ULONG ErrCode,
IN PWSTR TextData OPTIONAL,
IN ULONG DataBlkType,
IN ULONG DataBlkLen OPTIONAL,
IN PVOID DataBlock OPTIONAL,
IN CONST GUID *MofGuid OPTIONAL
);
VOID
IoErrPropagateErrLog(
IN HANDLE ErrLogHandle
);
VOID
IoErrTerminateErrLog(
IN HANDLE ErrLogHandle
);
// Exported Error Handling APIs
NTSTATUS
IoErrRegisterErrHandlers(
IN CONST GUID *ModuleGuid,
IN ULONG NumErrHandlers,
IN PERRHANDLER *HandlerTable
);
PERRINFO
IoErrGetErrData(
IN HANDLE ErrLogHandle
);
HANDLE
IoErrSaveErrData(
IN HANDLE ErrLogHandle,
IN PVOID DataTag OPTIONAL,
IN ULONG TagFlags OPTIONAL
);
PERRINFO
IoErrGetSavedData(
IN HANDLE SaveDataHandle
);
VOID
IoErrFreeSavedData(
IN HANDLE SaveDataHandle
);
NTSTATUS
IoErrMatchErrCase(
IN PERRINFO ErrInfo,
OUT PULONG ErrCaseID,
OUT PHANDLE ErrCaseHandle OPTIONAL
);
NTSTATUS
IoErrFindErrCaseByID(
IN ULONG ErrCaseID,
OUT PHANDLE ErrCaseHandle
);
NTSTATUS
IoErrHandleErrCase(
IN PERRINFO ErrInfo,
IN HANDLE ErrCaseHandle
);
NTSTATUS
IoErrGetLongErrMessage(
IN PERRINFO ErrInfo,
IN HANDLE ErrCaseHandle,
OUT PUNICODE_STRING unicodeMsg
);
NTSTATUS
IoErrGetShortErrMessage(
IN PERRINFO ErrInfo,
IN HANDLE ErrCaseHandle,
OUT PUNICODE_STRING unicodeMsg
);
// end_ntddk end_wdm end_nthal end_ntifs end_ntndis end_ntminiport end_ntsrv
BOOLEAN
IoErrInitSystem(
VOID
);
NTSTATUS
IoErrRetrieveSavedData(
OUT PINFOBLK InfoBlk,
IN ULONG BuffSize,
OUT PULONG DataSize OPTIONAL,
IN PVOID DataTag OPTIONAL,
IN ULONG TagFlags OPTIONAL
);
#endif //ifndef _IOEAPI_H