00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#ifndef _IOEAPI_H
00027
#define _IOEAPI_H
00028
00029
00030
00031
00032
00033
00034 #define STATUS_IOE_MESSAGE 0x11111111 //BUGBUG: shouldn't be here
00035 #define STATUS_IOE_MODULE_ALREADY_REGISTERED 0x22222222
00036 #define STATUS_IOE_DATABASE_NOT_READY 0x44444444
00037
00038 #define MAX_MSG_LEN 1023
00039
00040
00041
00042
00043 #define IOEDATA_NONE 0x00000000
00044 #define IOEDATA_PRIVATE 0x00000001
00045 #define IOEDATA_WSTRING 0x00000002
00046 #define IOEDATA_MAX IOEDATA_WSTRING
00047 #define IOEDATA_TEXT 0x80000000
00048
00049
00050
00051
00052 #define IOEDATATAG_TYPE_MASK 0x000000ff
00053 #define IOEDATATAG_TYPE_DEVNODE 0x00000001
00054 #define IOEDATATAG_BITS IOEDATATAG_TYPE_MASK
00055
00056
00057
00058
00059 typedef struct _errid {
00060 GUID
ComponentGuid;
00061 ULONG
ErrCode;
00062 }
ERRID, *
PERRID;
00063
00064 typedef struct _errdata {
00065 ERRID ErrID;
00066 ULONG
TextDataOffset;
00067 ULONG
DataBlkType;
00068 ULONG
DataBlkLen;
00069 ULONG
DataBlkOffset;
00070 GUID
MofGuid;
00071 }
ERRDATA, *
PERRDATA;
00072
00073 typedef struct _errinfo {
00074 ULONG
Signature;
00075 ULONG
Version;
00076 ULONG
Size;
00077 PVOID
DataTag;
00078 ULONG
TagFlags;
00079 ULONG
NumErrEntries;
00080 ERRDATA ErrEntries[1];
00081 }
ERRINFO, *
PERRINFO;
00082
00083 #define SIG_ERRINFO 'IRRE' //signature of ERRINFO "ERRI"
00084
00085 typedef struct _infoblk {
00086 ULONG
Signature;
00087 ULONG
Version;
00088 ULONG
Size;
00089 ULONG
NumErrInfos;
00090 ERRINFO ErrInfos[1];
00091 }
INFOBLK, *
PINFOBLK;
00092
00093 #define SIG_INFOBLK 'KLBI' //signature of INFOBLK "IBLK"
00094
00095 typedef NTSTATUS (*PERRHANDLER)(PVOID, ULONG);
00096
00097
00098
00099
00100 HANDLE
00101
IoErrInitErrLogByIrp(
00102 IN
PIRP Irp,
00103 IN ULONG ulFlags
00104 );
00105
00106 HANDLE
00107
IoErrInitErrLogByThreadID(
00108 IN
PKTHREAD ThreadID,
00109 IN ULONG ulFlags
00110 );
00111
00112
VOID
00113
IoErrLogErrByIrp(
00114 IN
PIRP Irp,
00115 IN CONST GUID *ComponentGuid,
00116 IN ULONG ErrCode,
00117 IN PWSTR TextData OPTIONAL,
00118 IN ULONG DataBlkType,
00119 IN ULONG DataBlkLen OPTIONAL,
00120 IN PVOID DataBlock OPTIONAL,
00121 IN CONST GUID *MofGuid OPTIONAL
00122 );
00123
00124
VOID
00125
IoErrLogErrByThreadID(
00126 IN
PKTHREAD ThreadID,
00127 IN CONST GUID *ComponentGuid,
00128 IN ULONG ErrCode,
00129 IN PWSTR TextData OPTIONAL,
00130 IN ULONG DataBlkType,
00131 IN ULONG DataBlkLen OPTIONAL,
00132 IN PVOID DataBlock OPTIONAL,
00133 IN CONST GUID *MofGuid OPTIONAL
00134 );
00135
00136
VOID
00137
IoErrPropagateErrLog(
00138 IN HANDLE ErrLogHandle
00139 );
00140
00141
VOID
00142
IoErrTerminateErrLog(
00143 IN HANDLE ErrLogHandle
00144 );
00145
00146
00147
00148
00149
NTSTATUS
00150
IoErrRegisterErrHandlers(
00151 IN CONST GUID *ModuleGuid,
00152 IN ULONG NumErrHandlers,
00153 IN PERRHANDLER *HandlerTable
00154 );
00155
00156
PERRINFO
00157
IoErrGetErrData(
00158 IN HANDLE ErrLogHandle
00159 );
00160
00161 HANDLE
00162
IoErrSaveErrData(
00163 IN HANDLE ErrLogHandle,
00164 IN PVOID DataTag OPTIONAL,
00165 IN ULONG TagFlags OPTIONAL
00166 );
00167
00168
PERRINFO
00169
IoErrGetSavedData(
00170 IN HANDLE SaveDataHandle
00171 );
00172
00173
VOID
00174
IoErrFreeSavedData(
00175 IN HANDLE SaveDataHandle
00176 );
00177
00178
NTSTATUS
00179
IoErrMatchErrCase(
00180 IN PERRINFO ErrInfo,
00181 OUT PULONG ErrCaseID,
00182 OUT PHANDLE ErrCaseHandle OPTIONAL
00183 );
00184
00185
NTSTATUS
00186
IoErrFindErrCaseByID(
00187 IN ULONG ErrCaseID,
00188 OUT PHANDLE ErrCaseHandle
00189 );
00190
00191
NTSTATUS
00192
IoErrHandleErrCase(
00193 IN PERRINFO ErrInfo,
00194 IN HANDLE ErrCaseHandle
00195 );
00196
00197
NTSTATUS
00198
IoErrGetLongErrMessage(
00199 IN PERRINFO ErrInfo,
00200 IN HANDLE ErrCaseHandle,
00201 OUT PUNICODE_STRING unicodeMsg
00202 );
00203
00204
NTSTATUS
00205
IoErrGetShortErrMessage(
00206 IN PERRINFO ErrInfo,
00207 IN HANDLE ErrCaseHandle,
00208 OUT PUNICODE_STRING unicodeMsg
00209 );
00210
00211
00212
00213 BOOLEAN
00214
IoErrInitSystem(
00215 VOID
00216 );
00217
00218
NTSTATUS
00219
IoErrRetrieveSavedData(
00220 OUT PINFOBLK InfoBlk,
00221 IN ULONG BuffSize,
00222 OUT PULONG DataSize OPTIONAL,
00223 IN PVOID DataTag OPTIONAL,
00224 IN ULONG TagFlags OPTIONAL
00225 );
00226
00227
#endif //ifndef _IOEAPI_H