1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
/*
* M A P I C O D E . H
*
* Status Codes returned by MAPI routines
*
* Copyright (c) 2009 Microsoft Corporation. All Rights Reserved.
*/
#ifndef MAPICODE_H
#define MAPICODE_H
#if _MSC_VER > 1000
#pragma once
#endif
#if defined (WIN64) && !defined (_WIN64)
#define _WIN64
#endif
/*
* Under Win64 systems Win32 is also defined for backwards compatibility.
*/
#if defined (WIN32) && !defined (_WIN32)
#define _WIN32
#endif
/* Define S_OK and ITF_* */
#if defined(_WIN64) || defined(_WIN32)
#include <winerror.h>
#endif
/*
* On Windows, scodes are 32-bit values laid out as follows:
*
* 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* +-+-+-+-+-+---------------------+-------------------------------+
* |S|R|C|N|r| Facility | Code |
* +-+-+-+-+-+---------------------+-------------------------------+
*
* where
*
* S - Severity - indicates success/fail
*
* 0 - Success
* 1 - Fail (COERROR)
*
* R - reserved portion of the facility code, corresponds to Windows
* second severity bit.
*
* C - reserved portion of the facility code, corresponds to Windows
* C field.
*
* N - reserved portion of the facility code. Used to indicate a
* mapped Windows status value.
*
* r - reserved portion of the facility code. Reserved for internal
* use. Used to indicate HRESULT values that are not status
* values, but are instead message ids for display strings.
*
* Facility - is the facility code
* FACILITY_NULL 0x0
* FACILITY_RPC 0x1
* FACILITY_DISPATCH 0x2
* FACILITY_STORAGE 0x3
* FACILITY_ITF 0x4
* FACILITY_WIN32 0x7
* FACILITY_WINDOWS 0x8
*
* Code - is the facility's status code
*
*/
/*
* We can't use OLE 2.0 macros to build sCodes because the definition has
* changed and we wish to conform to the new definition.
*/
#define MAKE_MAPI_SCODE(sev,fac,code) \
((SCODE) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
/* The following two macros are used to build OLE 2.0 style sCodes */
#define MAKE_MAPI_E( err ) (MAKE_MAPI_SCODE( 1, FACILITY_ITF, err ))
#define MAKE_MAPI_S( warn ) (MAKE_MAPI_SCODE( 0, FACILITY_ITF, warn ))
#ifdef SUCCESS_SUCCESS
#undef SUCCESS_SUCCESS
#endif
#define SUCCESS_SUCCESS 0L
/* General errors (used by more than one MAPI object) */
#define MAPI_E_CALL_FAILED E_FAIL
#define MAPI_E_NOT_ENOUGH_MEMORY E_OUTOFMEMORY
#define MAPI_E_INVALID_PARAMETER E_INVALIDARG
#define MAPI_E_INTERFACE_NOT_SUPPORTED E_NOINTERFACE
#define MAPI_E_NO_ACCESS E_ACCESSDENIED
#define MAPI_E_NO_SUPPORT MAKE_MAPI_E( 0x102 )
#define MAPI_E_BAD_CHARWIDTH MAKE_MAPI_E( 0x103 )
#define MAPI_E_STRING_TOO_LONG MAKE_MAPI_E( 0x105 )
#define MAPI_E_UNKNOWN_FLAGS MAKE_MAPI_E( 0x106 )
#define MAPI_E_INVALID_ENTRYID MAKE_MAPI_E( 0x107 )
#define MAPI_E_INVALID_OBJECT MAKE_MAPI_E( 0x108 )
#define MAPI_E_OBJECT_CHANGED MAKE_MAPI_E( 0x109 )
#define MAPI_E_OBJECT_DELETED MAKE_MAPI_E( 0x10A )
#define MAPI_E_BUSY MAKE_MAPI_E( 0x10B )
#define MAPI_E_NOT_ENOUGH_DISK MAKE_MAPI_E( 0x10D )
#define MAPI_E_NOT_ENOUGH_RESOURCES MAKE_MAPI_E( 0x10E )
#define MAPI_E_NOT_FOUND MAKE_MAPI_E( 0x10F )
#define MAPI_E_VERSION MAKE_MAPI_E( 0x110 )
#define MAPI_E_LOGON_FAILED MAKE_MAPI_E( 0x111 )
#define MAPI_E_SESSION_LIMIT MAKE_MAPI_E( 0x112 )
#define MAPI_E_USER_CANCEL MAKE_MAPI_E( 0x113 )
#define MAPI_E_UNABLE_TO_ABORT MAKE_MAPI_E( 0x114 )
#define MAPI_E_NETWORK_ERROR MAKE_MAPI_E( 0x115 )
#define MAPI_E_DISK_ERROR MAKE_MAPI_E( 0x116 )
#define MAPI_E_TOO_COMPLEX MAKE_MAPI_E( 0x117 )
#define MAPI_E_BAD_COLUMN MAKE_MAPI_E( 0x118 )
#define MAPI_E_EXTENDED_ERROR MAKE_MAPI_E( 0x119 )
#define MAPI_E_COMPUTED MAKE_MAPI_E( 0x11A )
#define MAPI_E_CORRUPT_DATA MAKE_MAPI_E( 0x11B )
#define MAPI_E_UNCONFIGURED MAKE_MAPI_E( 0x11C )
#define MAPI_E_FAILONEPROVIDER MAKE_MAPI_E( 0x11D )
#define MAPI_E_UNKNOWN_CPID MAKE_MAPI_E( 0x11E )
#define MAPI_E_UNKNOWN_LCID MAKE_MAPI_E( 0x11F )
/* Flavors of E_ACCESSDENIED, used at logon */
#define MAPI_E_PASSWORD_CHANGE_REQUIRED MAKE_MAPI_E( 0x120 )
#define MAPI_E_PASSWORD_EXPIRED MAKE_MAPI_E( 0x121 )
#define MAPI_E_INVALID_WORKSTATION_ACCOUNT MAKE_MAPI_E( 0x122 )
#define MAPI_E_INVALID_ACCESS_TIME MAKE_MAPI_E( 0x123 )
#define MAPI_E_ACCOUNT_DISABLED MAKE_MAPI_E( 0x124 )
/* MAPI base function and status object specific errors and warnings */
#define MAPI_E_END_OF_SESSION MAKE_MAPI_E( 0x200 )
#define MAPI_E_UNKNOWN_ENTRYID MAKE_MAPI_E( 0x201 )
#define MAPI_E_MISSING_REQUIRED_COLUMN MAKE_MAPI_E( 0x202 )
#define MAPI_W_NO_SERVICE MAKE_MAPI_S( 0x203 )
/* Property specific errors and warnings */
#define MAPI_E_BAD_VALUE MAKE_MAPI_E( 0x301 )
#define MAPI_E_INVALID_TYPE MAKE_MAPI_E( 0x302 )
#define MAPI_E_TYPE_NO_SUPPORT MAKE_MAPI_E( 0x303 )
#define MAPI_E_UNEXPECTED_TYPE MAKE_MAPI_E( 0x304 )
#define MAPI_E_TOO_BIG MAKE_MAPI_E( 0x305 )
#define MAPI_E_DECLINE_COPY MAKE_MAPI_E( 0x306 )
#define MAPI_E_UNEXPECTED_ID MAKE_MAPI_E( 0x307 )
#define MAPI_W_ERRORS_RETURNED MAKE_MAPI_S( 0x380 )
/* Table specific errors and warnings */
#define MAPI_E_UNABLE_TO_COMPLETE MAKE_MAPI_E( 0x400 )
#define MAPI_E_TIMEOUT MAKE_MAPI_E( 0x401 )
#define MAPI_E_TABLE_EMPTY MAKE_MAPI_E( 0x402 )
#define MAPI_E_TABLE_TOO_BIG MAKE_MAPI_E( 0x403 )
#define MAPI_E_INVALID_BOOKMARK MAKE_MAPI_E( 0x405 )
#define MAPI_W_POSITION_CHANGED MAKE_MAPI_S( 0x481 )
#define MAPI_W_APPROX_COUNT MAKE_MAPI_S( 0x482 )
/* Transport specific errors and warnings */
#define MAPI_E_WAIT MAKE_MAPI_E( 0x500 )
#define MAPI_E_CANCEL MAKE_MAPI_E( 0x501 )
#define MAPI_E_NOT_ME MAKE_MAPI_E( 0x502 )
#define MAPI_W_CANCEL_MESSAGE MAKE_MAPI_S( 0x580 )
/* Message Store, Folder, and Message specific errors and warnings */
#define MAPI_E_CORRUPT_STORE MAKE_MAPI_E( 0x600 )
#define MAPI_E_NOT_IN_QUEUE MAKE_MAPI_E( 0x601 )
#define MAPI_E_NO_SUPPRESS MAKE_MAPI_E( 0x602 )
#define MAPI_E_COLLISION MAKE_MAPI_E( 0x604 )
#define MAPI_E_NOT_INITIALIZED MAKE_MAPI_E( 0x605 )
#define MAPI_E_NON_STANDARD MAKE_MAPI_E( 0x606 )
#define MAPI_E_NO_RECIPIENTS MAKE_MAPI_E( 0x607 )
#define MAPI_E_SUBMITTED MAKE_MAPI_E( 0x608 )
#define MAPI_E_HAS_FOLDERS MAKE_MAPI_E( 0x609 )
#define MAPI_E_HAS_MESSAGES MAKE_MAPI_E( 0x60A )
#define MAPI_E_FOLDER_CYCLE MAKE_MAPI_E( 0x60B )
#define MAPI_W_PARTIAL_COMPLETION MAKE_MAPI_S( 0x680 )
/* Address Book specific errors and warnings */
#define MAPI_E_AMBIGUOUS_RECIP MAKE_MAPI_E( 0x700 )
/* The range 0x0800 to 0x08FF is reserved */
/* Obsolete typing shortcut that will go away eventually. */
#ifndef MakeResult
#define MakeResult(_s) ResultFromScode(_s)
#endif
/* We expect these to eventually be defined by OLE, but for now,
* here they are. When OLE defines them they can be much more
* efficient than these, but these are "proper" and don't make
* use of any hidden tricks.
*/
#ifndef HR_SUCCEEDED
#define HR_SUCCEEDED(_hr) SUCCEEDED((SCODE)(_hr))
#define HR_FAILED(_hr) FAILED((SCODE)(_hr))
#endif
#endif /* MAPICODE_H */
|