Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

ioep.h

Go to the documentation of this file.
00001 /*++ 00002 00003 Copyright (c) 1998 Microsoft Corporation 00004 00005 Module Name: 00006 00007 ioep.h 00008 00009 Abstract: 00010 00011 This module contains private structures and definitions. 00012 00013 Author: 00014 Michael Tsang (MikeTs) 1-Sep-1998 00015 00016 Environment: 00017 00018 Kernel mode 00019 00020 00021 Revision History: 00022 00023 00024 --*/ 00025 00026 #ifndef _IOEP_H 00027 #define _IOEP_H 00028 00029 // 00030 // Constants 00031 // 00032 #define IOETAG_ERRLOG 'LeoI' 00033 #define IOETAG_ERRTHREAD 'TeoI' 00034 #define IOETAG_ERRENTRY 'EeoI' 00035 #define IOETAG_DATABLOCK 'DeoI' 00036 #define IOETAG_ERRMODULE 'MeoI' 00037 #define IOETAG_MSGBUFF 'BeoI' 00038 #define IOETAG_ERRCASEDB 'CeoI' 00039 #define IOETAG_DATATEXT 'XeoI' 00040 #define IOETAG_DATAWSTR 'SeoI' 00041 #define IOETAG_ERRINFO 'IeoI' 00042 #define IOETAG_SAVEDATA 'VeoI' 00043 #define IOETAG_WMIEVENT 'WeoI' 00044 00045 #define THREADKEY_IRP 1 00046 #define THREADKEY_THREADID 2 00047 00048 #define IOEMETHOD_ANY 0 00049 #define IOEMETHOD_LONGMSG 1 00050 #define IOEMETHOD_SHORTMSG 2 00051 #define IOEMETHOD_HANDLER 3 00052 00053 #define IOE_ERRINFO_VERSION 1 00054 #define IOE_INFOBLK_VERSION 1 00055 00056 // 00057 // Macros 00058 // 00059 #if DBG 00060 #define PROCNAME(s) static PSZ ProcName = s 00061 #define DBGPRINT(p) { \ 00062 KdPrint(("%s: ", ProcName)); \ 00063 KdPrint(p); \ 00064 } 00065 #else 00066 #define PROCNAME(s) 00067 #define DBGPRINT(p) 00068 #endif 00069 00070 // 00071 // Type Definitions 00072 // 00073 typedef struct _errentry { 00074 SINGLE_LIST_ENTRY slist; //error log stack link 00075 ERRID ErrID; //globally unique error ID 00076 UNICODE_STRING unicodeStr; //unicode string data 00077 ULONG DataBlkType; //type of associated data 00078 ULONG DataBlkLen; //length of associated data 00079 PVOID DataBlk; //points to associated data 00080 GUID MofGuid; //MOF Guid to describe data 00081 } ERRENTRY, *PERRENTRY; 00082 00083 typedef struct _errthread { 00084 LIST_ENTRY list; //error thread chain 00085 LIST_ENTRY ErrLogListHead; //points to error log nesting chain 00086 ULONG ThreadKeyType; //key type of error thread 00087 union { 00088 struct { 00089 PIRP Irp; 00090 UCHAR MajorFunction; 00091 UCHAR MinorFunction; 00092 PVOID Arguments[4]; 00093 PDEVICE_OBJECT TargetDevice; 00094 } IrpKey; 00095 00096 struct { 00097 PKTHREAD ThreadID; 00098 } ThIDKey; 00099 00100 } ThreadKey; 00101 } ERRTHREAD, *PERRTHREAD; 00102 00103 typedef struct _errlog { 00104 ULONG Signature; //error log structure signature 00105 ULONG ulFlags; //log session flags 00106 LIST_ENTRY list; //error log nesting link 00107 SINGLE_LIST_ENTRY ErrStack; //points to the error stack 00108 PERRTHREAD ErrThread; //points to associated error thread 00109 PERRINFO ErrInfo; //points to error info. 00110 } ERRLOG, *PERRLOG; 00111 00112 #define SIG_ERRLOG 'GOLE' //error log signature "ELOG" 00113 #define LOGF_INITMASK 0x00000000 //init flags mask 00114 00115 typedef struct _savedata { 00116 ULONG Signature; //savedata signature 00117 LIST_ENTRY list; //chain savedata list 00118 PERRINFO ErrInfo; //points to error info. 00119 } SAVEDATA, *PSAVEDATA; 00120 00121 #define SIG_SAVEDATA 'TADE' //saved error data signature "EDAT" 00122 00123 typedef struct _errmodule { 00124 LIST_ENTRY list; //error modules chain 00125 GUID ComponentGuid; //GUID of handler module 00126 ULONG NumErrHandlers; //number of handlers in the module 00127 PERRHANDLER HandlerTable[1]; //error handler table 00128 } ERRMODULE, *PERRMODULE; 00129 00130 // 00131 // Private Function Prototypes 00132 // 00133 #define IoepGetErrStack(ErrLog) \ 00134 CONTAINING_RECORD((ErrLog)->ErrStack.Next, ERRENTRY, slist) 00135 00136 #define IoepGetNextErrEntry(ErrEntry) \ 00137 (((ErrEntry)->slist.Next != NULL)? \ 00138 CONTAINING_RECORD((ErrEntry)->slist.Next, ERRENTRY, slist): \ 00139 NULL) 00140 00141 HANDLE 00142 IoepInitErrLog( 00143 IN ULONG KeyType, 00144 IN PVOID Key, 00145 IN ULONG ulFlags 00146 ); 00147 00148 PERRTHREAD 00149 IoepFindErrThread( 00150 IN ULONG KeyType, 00151 IN PVOID Key 00152 ); 00153 00154 PERRTHREAD 00155 IoepNewErrThread( 00156 IN ULONG KeyType, 00157 IN PVOID Key 00158 ); 00159 00160 VOID 00161 IoepLogErr( 00162 IN ULONG KeyType, 00163 IN PVOID Key, 00164 IN CONST GUID *ComponentGuid, 00165 IN ULONG ErrCode, 00166 IN PWSTR TextData OPTIONAL, 00167 IN ULONG DataBlkType, 00168 IN ULONG DataBlkLen OPTIONAL, 00169 IN PVOID DataBlock OPTIONAL, 00170 IN CONST GUID *MofGuid OPTIONAL 00171 ); 00172 00173 VOID 00174 IoepFreeErrStack( 00175 IN PERRENTRY ErrStack 00176 ); 00177 00178 PERRMODULE 00179 IoepFindErrModule( 00180 IN CONST GUID *ComponentGuid 00181 ); 00182 00183 NTSTATUS 00184 IoepExtractErrData( 00185 IN PERRENTRY ErrStack, 00186 OUT PVOID Buffer, 00187 IN ULONG BuffSize, 00188 OUT PULONG DataSize OPTIONAL 00189 ); 00190 00191 NTSTATUS 00192 IoepFireWMIEvent( 00193 IN PERRINFO ErrInfo, 00194 IN PWSTR InstanceName 00195 ); 00196 00197 NTSTATUS 00198 IoepHandleErrCase( 00199 IN PERRINFO ErrInfo, 00200 IN PERRCASE ErrCase, 00201 IN ULONG Method, 00202 OUT PUNICODE_STRING unicodeMsg OPTIONAL 00203 ); 00204 00205 PERRHANDLER 00206 IoepFindErrHandler( 00207 IN CONST GUID *ComponentGuid, 00208 IN ULONG HandlerIndex 00209 ); 00210 00211 BOOLEAN 00212 IoepMatchErrIDPath( 00213 IN PERRINFO ErrInfo, 00214 IN PERRID ErrIDPath, 00215 IN ULONG NumErrIDs 00216 ); 00217 00218 NTSTATUS 00219 IoepGetErrMessage( 00220 IN PMSGDATA MsgData, 00221 IN PERRINFO ErrInfo, 00222 OUT PUNICODE_STRING unicodeMsg 00223 ); 00224 00225 NTSTATUS 00226 IoepCatMsgArg( 00227 IN OUT PUNICODE_STRING unicodeMsg, 00228 IN PMSGARG MsgArg, 00229 IN PERRINFO ErrInfo 00230 ); 00231 00232 NTSTATUS 00233 IoepUnicodeStringCatN( 00234 IN OUT PUNICODE_STRING unicodeStr, 00235 IN PWSTR pwstr, 00236 IN ULONG len 00237 ); 00238 00239 PERRCASEDB 00240 IoepGetErrCaseDB( 00241 VOID 00242 ); 00243 00244 // 00245 // External prototypes 00246 // 00247 NTSTATUS 00248 IopGetRegistryValue( 00249 IN HANDLE KeyHandle, 00250 IN PWSTR ValueName, 00251 OUT PKEY_VALUE_FULL_INFORMATION *Information 00252 ); 00253 00254 #endif //ifndef _IOEP_H

Generated on Sat May 15 19:40:29 2004 for test by doxygen 1.3.7