1 /**
2  * Salieri
3  * v1
4  *
5  * Salieri is a header which contains definitions for the Microsoft
6  * source-code annotation language (SAL).  It is *not* an
7  * implementation of SAL; that's for compilers and static analyzers.
8  * For the most part we just define macros to nothing.
9  *
10  * The goal is to allow projects to use SAL without creating a hard
11  * dependency on it (i.e., you can still use compilers other than
12  * MSVC).  Simply include `salieri.h`, which you can/should distribute
13  * with your code, instead of `<sal.h>`.
14  *
15  * Multiple copies of Salieri can be included safely, even different
16  * versions.  Including a newer version will simiply replace older
17  * definitions with newer ones, and including older versions will have
18  * no effect.
19  *
20  * I don't think anything in here is copyrightable, but just in case:
21  *
22  *   To the extent possible under law, the author(s) have dedicated
23  *   all copyright and related and neighboring rights to this software
24  *   to the public domain worldwide. This software is distributed
25  *   without any warranty.
26  *
27  *   For details, see <http://creativecommons.org/publicdomain/zero/1.0/>.
28  */
29 
30 #if !defined(SALIERI_VERSION) || (SALIERI_VERSION < 1)
31 
32 /* TODO: figure out when <sal.h> first appeared. */
33 #if defined(_MSC_VER)
34 #  include <sal.h>
35 #endif
36 
37 /* The main concern for the implementation is that we don't want to
38  * replace annotations from <sal.h>, but we *do* want to replace
39  * annotations from older versions of Salieri.  To keep track of
40  * everything, when we (Salieri) define a SAL annotation, we also
41  * define SALIERI_DEFINED_${annotation} (with the leading and trailing
42  * '-' stripped).  Then, before redefining an annotation macro we
43  * check to make sure SALIERI_DEFINED_${annontation} is defined.
44  *
45  * This means you can safely use Salieri in a public header in your
46  * project.
47  */
48 
49 /* Function Parameters & Return Value
50  *
51  * https://msdn.microsoft.com/en-us/library/hh916382.aspx
52  *****/
53 
54 /*  Pointer Parameters */
55 
56 #if defined(_In_) && defined(SALIERI_DEFINED_In)
57 #  undef _In_
58 #endif
59 #if !defined(_In_)
60 #  define _In_
61 #  define SALIERI_DEFINED_In
62 #endif
63 
64 #if defined(__in_bcount) && defined(SALIERI_DEFINED__in_bcount)
65 #  undef __in_bcount
66 #endif
67 #if !defined(__in_bcount)
68 #  define __in_bcount(s)
69 #  define SALIERI_DEFINED__in_bcount(s)
70 #endif
71 
72 #if defined(__in_ecount) && defined(SALIERI_DEFINED__in_ecount)
73 #  undef __in_ecount
74 #endif
75 #if !defined(__in_ecount)
76 #  define __in_ecount(s)
77 #  define SALIERI_DEFINED__in_ecount(s)
78 #endif
79 
80 #if defined(__in_ecount_opt) && defined(SALIERI_DEFINED__in_ecount_opt)
81 #  undef __in_ecount_opt
82 #endif
83 #if !defined(__in_ecount_opt)
84 #  define __in_ecount_opt(s)
85 #  define SALIERI_DEFINED__in_ecount_opt(s)
86 #endif
87 
88 #if defined(_Out_) && defined(SALIERI_DEFINED_Out)
89 #  undef _Out_
90 #endif
91 #if !defined(_Out_)
92 #  define _Out_
93 #  define SALIERI_DEFINED_Out
94 #endif
95 
96 #if defined(_Inout_) && defined(SALIERI_DEFINED_Inout)
97 #  undef _Inout_
98 #endif
99 #if !defined(_Inout_)
100 #  define _Inout_
101 #  define SALIERI_DEFINED_Inout
102 #endif
103 
104 #if defined(_In_z_) && defined(SALIERI_DEFINED_In_z)
105 #  undef _In_z_
106 #endif
107 #if !defined(_In_z_)
108 #  define _In_z_
109 #  define SALIERI_DEFINED_In_z
110 #endif
111 
112 #if defined(_Inout_z_) && defined(SALIERI_DEFINED_Inout_z)
113 #  undef _Inout_z_
114 #endif
115 #if !defined(_Inout_z_)
116 #  define _Inout_z_
117 #  define SALIERI_DEFINED_Inout_z
118 #endif
119 
120 #if defined(_In_reads_) && defined(SALIERI_DEFINED_In_reads)
121 #  undef _In_reads_
122 #endif
123 #if !defined(_In_reads_)
124 #  define _In_reads_(s)
125 #  define SALIERI_DEFINED_In_reads
126 #endif
127 
128 #if defined(_In_reads_bytes_) && defined(SALIERI_DEFINED_In_reads_bytes)
129 #  undef _In_reads_bytes_
130 #endif
131 #if !defined(_In_reads_bytes_)
132 #  define _In_reads_bytes_(s)
133 #  define SALIERI_DEFINED_In_reads_bytes
134 #endif
135 
136 #if defined(_In_reads_z_) && defined(SALIERI_DEFINED_In_reads_z)
137 #  undef _In_reads_z_
138 #endif
139 #if !defined(_In_reads_z_)
140 #  define _In_reads_z_(s)
141 #  define SALIERI_DEFINED_In_reads_z
142 #endif
143 
144 #if defined(_In_reads_or_z_) && defined(SALIERI_DEFINED_In_reads_or_z)
145 #  undef _In_reads_or_z_
146 #endif
147 #if !defined(_In_reads_or_z_)
148 #  define _In_reads_or_z_(s)
149 #  define SALIERI_DEFINED_In_reads_or_z
150 #endif
151 
152 #if defined(_Out_writes_) && defined(SALIERI_DEFINED_Out_writes)
153 #  undef _Out_writes_
154 #endif
155 #if !defined(_Out_writes_)
156 #  define _Out_writes_(s)
157 #  define SALIERI_DEFINED_Out_writes
158 #endif
159 
160 #if defined(_Out_writes_bytes_) && defined(SALIERI_DEFINED_Out_writes_bytes)
161 #  undef _Out_writes_bytes_
162 #endif
163 #if !defined(_Out_writes_bytes_)
164 #  define _Out_writes_bytes_(s)
165 #  define SALIERI_DEFINED_Out_writes_bytes
166 #endif
167 
168 #if defined(_Out_writes_bytes_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_opt_)
169 #  undef _Out_writes_bytes_opt_
170 #endif
171 #if !defined(_Out_writes_bytes_opt_)
172 #  define _Out_writes_bytes_opt_(s)
173 #  define SALIERI_DEFINED_Out_writes_bytes_opt_
174 #endif
175 
176 #if defined(_Out_writes_z_) && defined(SALIERI_DEFINED_Out_writes_z)
177 #  undef _Out_writes_z_
178 #endif
179 #if !defined(_Out_writes_z_)
180 #  define _Out_writes_z_(s)
181 #  define SALIERI_DEFINED_Out_writes_z
182 #endif
183 
184 #if defined(_Inout_updates_) && defined(SALIERI_DEFINED_Inout_updates)
185 #  undef _Inout_updates_
186 #endif
187 #if !defined(_Inout_updates_)
188 #  define _Inout_updates_(s)
189 #  define SALIERI_DEFINED_Inout_updates
190 #endif
191 
192 #if defined(_Inout_updates_bytes_) && defined(SALIERI_DEFINED_Inout_updates_bytes)
193 #  undef _Inout_updates_bytes_
194 #endif
195 #if !defined(_Inout_updates_bytes_)
196 #  define _Inout_updates_bytes_(s)
197 #  define SALIERI_DEFINED_Inout_updates_bytes
198 #endif
199 
200 #if defined(_Inout_updates_z_) && defined(SALIERI_DEFINED_Inout_updates_z)
201 #  undef _Inout_updates_z_
202 #endif
203 #if !defined(_Inout_updates_z_)
204 #  define _Inout_updates_z_(s)
205 #  define SALIERI_DEFINED_Inout_updates_z
206 #endif
207 
208 #if defined(_Out_writes_to_) && defined(SALIERI_DEFINED_Out_writes_to)
209 #  undef _Out_writes_to_
210 #endif
211 #if !defined(_Out_writes_to_)
212 #  define _Out_writes_to_(s,c)
213 #  define SALIERI_DEFINED_Out_writes_to
214 #endif
215 
216 #if defined(_Out_writes_bytes_to_) && defined(SALIERI_DEFINED_Out_writes_bytes_to)
217 #  undef _Out_writes_bytes_to_
218 #endif
219 #if !defined(_Out_writes_bytes_to_)
220 #  define _Out_writes_bytes_to_(s,c)
221 #  define SALIERI_DEFINED_Out_writes_bytes_to
222 #endif
223 
224 #if defined(_Out_writes_all_) && defined(SALIERI_DEFINED_Out_writes_all)
225 #  undef _Out_writes_all_
226 #endif
227 #if !defined(_Out_writes_all_)
228 #  define _Out_writes_all_(s)
229 #  define SALIERI_DEFINED_Out_writes_all
230 #endif
231 
232 #if defined(_Out_writes_bytes_all_) && defined(SALIERI_DEFINED_Out_writes_bytes_all)
233 #  undef _Out_writes_bytes_all_
234 #endif
235 #if !defined(_Out_writes_bytes_all_)
236 #  define _Out_writes_bytes_all_(s)
237 #  define SALIERI_DEFINED_Out_writes_bytes_all
238 #endif
239 
240 #if defined(_In_updates_to_) && defined(SALIERI_DEFINED_In_updates_to)
241 #  undef _In_updates_to_
242 #endif
243 #if !defined(_In_updates_to_)
244 #  define _In_updates_to_(s,c)
245 #  define SALIERI_DEFINED_In_updates_to
246 #endif
247 
248 #if defined(_In_updates_bytes_to_) && defined(SALIERI_DEFINED_In_updates_bytes_to)
249 #  undef _In_updates_bytes_to_
250 #endif
251 #if !defined(_In_updates_bytes_to_)
252 #  define _In_updates_bytes_to_(s,c)
253 #  define SALIERI_DEFINED_In_updates_bytes_to
254 #endif
255 
256 #if defined(_Inout_updates_z_) && defined(SALIERI_DEFINED_Inout_updates_z)
257 #  undef _Inout_updates_z_
258 #endif
259 #if !defined(_Inout_updates_z_)
260 #  define _Inout_updates_z_(s)
261 #  define SALIERI_DEFINED_Inout_updates_z
262 #endif
263 
264 #if defined(_Out_writes_to_) && defined(SALIERI_DEFINED_Out_writes_to)
265 #  undef _Out_writes_to_
266 #endif
267 #if !defined(_Out_writes_to_)
268 #  define _Out_writes_to_(s,c)
269 #  define SALIERI_DEFINED_Out_writes_to
270 #endif
271 
272 #if defined(_Out_writes_bytes_to_) && defined(SALIERI_DEFINED_Out_writes_bytes_to)
273 #  undef _Out_writes_bytes_to_
274 #endif
275 #if !defined(_Out_writes_bytes_to_)
276 #  define _Out_writes_bytes_to_(s,c)
277 #  define SALIERI_DEFINED_Out_writes_bytes_to
278 #endif
279 
280 #if defined(_Out_writes_all_) && defined(SALIERI_DEFINED_Out_writes_all)
281 #  undef _Out_writes_all_
282 #endif
283 #if !defined(_Out_writes_all_)
284 #  define _Out_writes_all_(s)
285 #  define SALIERI_DEFINED_Out_writes_all
286 #endif
287 
288 #if defined(_Out_writes_bytes_all_) && defined(SALIERI_DEFINED_Out_writes_bytes_all)
289 #  undef _Out_writes_bytes_all_
290 #endif
291 #if !defined(_Out_writes_bytes_all_)
292 #  define _Out_writes_bytes_all_(s)
293 #  define SALIERI_DEFINED_Out_writes_bytes_all
294 #endif
295 
296 #if defined(_Inout_updates_to_) && defined(SALIERI_DEFINED_Inout_updates_to)
297 #  undef _Inout_updates_to_
298 #endif
299 #if !defined(_Inout_updates_to_)
300 #  define _Inout_updates_to_(s,c)
301 #  define SALIERI_DEFINED_Inout_updates_to
302 #endif
303 
304 #if defined(_Inout_updates_bytes_to_) && defined(SALIERI_DEFINED_Inout_updates_bytes_to)
305 #  undef _Inout_updates_bytes_to_
306 #endif
307 #if !defined(_Inout_updates_bytes_to_)
308 #  define _Inout_updates_bytes_to_(s,c)
309 #  define SALIERI_DEFINED_Inout_updates_bytes_to
310 #endif
311 
312 #if defined(_Inout_updates_all_) && defined(SALIERI_DEFINED_Inout_updates_all)
313 #  undef _Inout_updates_all_
314 #endif
315 #if !defined(_Inout_updates_all_)
316 #  define _Inout_updates_all_(s)
317 #  define SALIERI_DEFINED_Inout_updates_all
318 #endif
319 
320 #if defined(_Inout_updates_bytes_all_) && defined(SALIERI_DEFINED_Inout_updates_bytes_all)
321 #  undef _Inout_updates_bytes_all_
322 #endif
323 #if !defined(_Inout_updates_bytes_all_)
324 #  define _Inout_updates_bytes_all_(s)
325 #  define SALIERI_DEFINED_Inout_updates_bytes_all
326 #endif
327 
328 #if defined(_In_reads_to_ptr_) && defined(SALIERI_DEFINED_In_reads_to_ptr)
329 #  undef _In_reads_to_ptr_
330 #endif
331 #if !defined(_In_reads_to_ptr_)
332 #  define _In_reads_to_ptr_(p)
333 #  define SALIERI_DEFINED_In_reads_to_ptr
334 #endif
335 
336 #if defined(_In_reads_to_ptr_z_) && defined(SALIERI_DEFINED_In_reads_to_ptr_z)
337 #  undef _In_reads_to_ptr_z_
338 #endif
339 #if !defined(_In_reads_to_ptr_z_)
340 #  define _In_reads_to_ptr_z_(p)
341 #  define SALIERI_DEFINED_In_reads_to_ptr_z
342 #endif
343 
344 #if defined(_Out_writes_to_ptr_) && defined(SALIERI_DEFINED_Out_writes_to_ptr)
345 #  undef _Out_writes_to_ptr_
346 #endif
347 #if !defined(_Out_writes_to_ptr_)
348 #  define _Out_writes_to_ptr_(p)
349 #  define SALIERI_DEFINED_Out_writes_to_ptr
350 #endif
351 
352 #if defined(_Out_writes_to_ptr_z_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_z)
353 #  undef _Out_writes_to_ptr_z_
354 #endif
355 #if !defined(_Out_writes_to_ptr_z_)
356 #  define _Out_writes_to_ptr_z_(p)
357 #  define SALIERI_DEFINED_Out_writes_to_ptr_z
358 #endif
359 
360 /*  Optional Pointer Parameters */
361 
362 #if defined(_In_opt_) && defined(SALIERI_DEFINED_In_opt)
363 #  undef _In_opt_
364 #endif
365 #if !defined(_In_opt_)
366 #  define _In_opt_
367 #  define SALIERI_DEFINED_In_opt
368 #endif
369 
370 #if defined(_Out_opt_) && defined(SALIERI_DEFINED_Out_opt)
371 #  undef _Out_opt_
372 #endif
373 #if !defined(_Out_opt_)
374 #  define _Out_opt_
375 #  define SALIERI_DEFINED_Out_opt
376 #endif
377 
378 #if defined(_Inout_opt_) && defined(SALIERI_DEFINED_Inout_opt)
379 #  undef _Inout_opt_
380 #endif
381 #if !defined(_Inout_opt_)
382 #  define _Inout_opt_
383 #  define SALIERI_DEFINED_Inout_opt
384 #endif
385 
386 #if defined(_In_opt_z_) && defined(SALIERI_DEFINED_In_opt_z)
387 #  undef _In_opt_z_
388 #endif
389 #if !defined(_In_opt_z_)
390 #  define _In_opt_z_
391 #  define SALIERI_DEFINED_In_opt_z
392 #endif
393 
394 #if defined(_Inout_opt_z_) && defined(SALIERI_DEFINED_Inout_opt_z)
395 #  undef _Inout_opt_z_
396 #endif
397 #if !defined(_Inout_opt_z_)
398 #  define _Inout_opt_z_
399 #  define SALIERI_DEFINED_Inout_opt_z
400 #endif
401 
402 #if defined(_Inout_opt_bytecount_) && defined(SALIERI_DEFINED_Inout_opt_bytecount_)
403 #  undef _Inout_opt_bytecount_
404 #endif
405 #if !defined(_Inout_opt_bytecount_)
406 #  define _Inout_opt_bytecount_(s)
407 #  define SALIERI_DEFINED_Inout_opt_bytecount_(s)
408 #endif
409 
410 #if defined(_In_reads_opt_) && defined(SALIERI_DEFINED_In_reads_opt)
411 #  undef _In_reads_opt_
412 #endif
413 #if !defined(_In_reads_opt_)
414 #  define _In_reads_opt_(s)
415 #  define SALIERI_DEFINED_In_reads_opt
416 #endif
417 
418 #if defined(_In_reads_bytes_opt_) && defined(SALIERI_DEFINED_In_reads_bytes_opt)
419 #  undef _In_reads_bytes_opt_
420 #endif
421 #if !defined(_In_reads_bytes_opt_)
422 #  define _In_reads_bytes_opt_(s)
423 #  define SALIERI_DEFINED_In_reads_bytes_opt
424 #endif
425 
426 #if defined(_In_reads_opt_z_) && defined(SALIERI_DEFINED_In_reads_opt_z)
427 #  undef _In_reads_opt_z_
428 #endif
429 #if !defined(_In_reads_opt_z_)
430 #  define _In_reads_opt_z_(s)
431 #  define SALIERI_DEFINED_In_reads_opt_z
432 #endif
433 
434 #if defined(_Out_writes_opt_) && defined(SALIERI_DEFINED_Out_writes_opt)
435 #  undef _Out_writes_opt_
436 #endif
437 #if !defined(_Out_writes_opt_)
438 #  define _Out_writes_opt_(s)
439 #  define SALIERI_DEFINED_Out_writes_opt
440 #endif
441 
442 #if defined(_Out_writes_bytes_) && defined(SALIERI_DEFINED_Out_writes_bytes)
443 #  undef _Out_writes_bytes_
444 #endif
445 #if !defined(_Out_writes_bytes_)
446 #  define _Out_writes_bytes_(s)
447 #  define SALIERI_DEFINED_Out_writes_bytes
448 #endif
449 
450 #if defined(_Out_writes_opt_z_) && defined(SALIERI_DEFINED_Out_writes_opt_z)
451 #  undef _Out_writes_opt_z_
452 #endif
453 #if !defined(_Out_writes_opt_z_)
454 #  define _Out_writes_opt_z_(s)
455 #  define SALIERI_DEFINED_Out_writes_opt_z
456 #endif
457 
458 #if defined(_Inout_updates_opt_) && defined(SALIERI_DEFINED_Inout_updates_opt)
459 #  undef _Inout_updates_opt_
460 #endif
461 #if !defined(_Inout_updates_opt_)
462 #  define _Inout_updates_opt_(s)
463 #  define SALIERI_DEFINED_Inout_updates_opt
464 #endif
465 
466 #if defined(_Inout_updates_bytes_opt_) && defined(SALIERI_DEFINED_Inout_updates_bytes_opt)
467 #  undef _Inout_updates_bytes_opt_
468 #endif
469 #if !defined(_Inout_updates_bytes_opt_)
470 #  define _Inout_updates_bytes_opt_(s)
471 #  define SALIERI_DEFINED_Inout_updates_bytes_opt
472 #endif
473 
474 #if defined(_Inout_updates_opt_z_) && defined(SALIERI_DEFINED_Inout_updates_opt_z)
475 #  undef _Inout_updates_opt_z_
476 #endif
477 #if !defined(_Inout_updates_opt_z_)
478 #  define _Inout_updates_opt_z_(s)
479 #  define SALIERI_DEFINED_Inout_updates_opt_z
480 #endif
481 
482 #if defined(_Out_writes_to_opt_) && defined(SALIERI_DEFINED_Out_writes_to_opt)
483 #  undef _Out_writes_to_opt_
484 #endif
485 #if !defined(_Out_writes_to_opt_)
486 #  define _Out_writes_to_opt_(s,c)
487 #  define SALIERI_DEFINED_Out_writes_to_opt
488 #endif
489 
490 #if defined(_Out_writes_bytes_to_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_to_opt)
491 #  undef _Out_writes_bytes_to_opt_
492 #endif
493 #if !defined(_Out_writes_bytes_to_opt_)
494 #  define _Out_writes_bytes_to_opt_(s,c)
495 #  define SALIERI_DEFINED_Out_writes_bytes_to_opt
496 #endif
497 
498 #if defined(_Out_writes_all_opt_) && defined(SALIERI_DEFINED_Out_writes_all_opt)
499 #  undef _Out_writes_all_opt_
500 #endif
501 #if !defined(_Out_writes_all_opt_)
502 #  define _Out_writes_all_opt_(s)
503 #  define SALIERI_DEFINED_Out_writes_all_opt
504 #endif
505 
506 #if defined(_Out_writes_bytes_all_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_all_opt)
507 #  undef _Out_writes_bytes_all_opt_
508 #endif
509 #if !defined(_Out_writes_bytes_all_opt_)
510 #  define _Out_writes_bytes_all_opt_(s)
511 #  define SALIERI_DEFINED_Out_writes_bytes_all_opt
512 #endif
513 
514 #if defined(_In_updates_to_opt_) && defined(SALIERI_DEFINED_In_updates_to_opt)
515 #  undef _In_updates_to_opt_
516 #endif
517 #if !defined(_In_updates_to_opt_)
518 #  define _In_updates_to_opt_(s,c)
519 #  define SALIERI_DEFINED_In_updates_to_opt
520 #endif
521 
522 #if defined(_In_updates_bytes_to_opt_) && defined(SALIERI_DEFINED_In_updates_bytes_to_opt)
523 #  undef _In_updates_bytes_to_opt_
524 #endif
525 #if !defined(_In_updates_bytes_to_opt_)
526 #  define _In_updates_bytes_to_opt_(s,c)
527 #  define SALIERI_DEFINED_In_updates_bytes_to_opt
528 #endif
529 
530 #if defined(_Inout_updates_all_opt_) && defined(SALIERI_DEFINED_Inout_updates_all_opt)
531 #  undef _Inout_updates_all_opt_
532 #endif
533 #if !defined(_Inout_updates_all_opt_)
534 #  define _Inout_updates_all_opt_(s)
535 #  define SALIERI_DEFINED_Inout_updates_all_opt
536 #endif
537 
538 #if defined(_Inout_updates_bytes_all_opt_) && defined(SALIERI_DEFINED_Inout_updates_bytes_all_opt)
539 #  undef _Inout_updates_bytes_all_opt_
540 #endif
541 #if !defined(_Inout_updates_bytes_all_opt_)
542 #  define _Inout_updates_bytes_all_opt_(s)
543 #  define SALIERI_DEFINED_Inout_updates_bytes_all_opt
544 #endif
545 
546 #if defined(_In_reads_to_ptr_opt_) && defined(SALIERI_DEFINED_In_reads_to_ptr_opt)
547 #  undef _In_reads_to_ptr_opt_
548 #endif
549 #if !defined(_In_reads_to_ptr_opt_)
550 #  define _In_reads_to_ptr_opt_(p)
551 #  define SALIERI_DEFINED_In_reads_to_ptr_opt
552 #endif
553 
554 #if defined(_In_reads_to_ptr_opt_z_) && defined(SALIERI_DEFINED_In_reads_to_ptr_opt_z)
555 #  undef _In_reads_to_ptr_opt_z_
556 #endif
557 #if !defined(_In_reads_to_ptr_opt_z_)
558 #  define _In_reads_to_ptr_opt_z_(p)
559 #  define SALIERI_DEFINED_In_reads_to_ptr_opt_z
560 #endif
561 
562 #if defined(_Out_writes_to_ptr_opt_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_opt)
563 #  undef _Out_writes_to_ptr_opt_
564 #endif
565 #if !defined(_Out_writes_to_ptr_opt_)
566 #  define _Out_writes_to_ptr_opt_(p)
567 #  define SALIERI_DEFINED_Out_writes_to_ptr_opt
568 #endif
569 
570 #if defined(_Out_writes_to_ptr_opt_z_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_opt_z)
571 #  undef _Out_writes_to_ptr_opt_z_
572 #endif
573 #if !defined(_Out_writes_to_ptr_opt_z_)
574 #  define _Out_writes_to_ptr_opt_z_(p)
575 #  define SALIERI_DEFINED_Out_writes_to_ptr_opt_z
576 #endif
577 
578 /* Output Pointer Parameters */
579 
580 #if defined(_Outptr_) && defined(SALIERI_DEFINED_Outptr)
581 #  undef _Outptr_
582 #endif
583 #if !defined(_Outptr_)
584 #  define _Outptr_
585 #  define SALIERI_DEFINED_Outptr
586 #endif
587 
588 #if defined(_Outptr_opt_) && defined(SALIERI_DEFINED_Outptr_opt)
589 #  undef _Outptr_opt_
590 #endif
591 #if !defined(_Outptr_opt_)
592 #  define _Outptr_opt_
593 #  define SALIERI_DEFINED_Outptr_opt
594 #endif
595 
596 #if defined(_Outptr_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_result_maybenull)
597 #  undef _Outptr_result_maybenull_
598 #endif
599 #if !defined(_Outptr_result_maybenull_)
600 #  define _Outptr_result_maybenull_
601 #  define SALIERI_DEFINED_Outptr_result_maybenull
602 #endif
603 
604 #if defined(_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull)
605 #  undef _Outptr_opt_result_maybenull_
606 #endif
607 #if !defined(_Outptr_opt_result_maybenull_)
608 #  define _Outptr_opt_result_maybenull_
609 #  define SALIERI_DEFINED_Outptr_opt_result_maybenull
610 #endif
611 
612 #if defined(_Outptr_result_z_) && defined(SALIERI_DEFINED_Outptr_result_z)
613 #  undef _Outptr_result_z_
614 #endif
615 #if !defined(_Outptr_result_z_)
616 #  define _Outptr_result_z_
617 #  define SALIERI_DEFINED_Outptr_result_z
618 #endif
619 
620 #if defined(_Outptr_opt_result_z_) && defined(SALIERI_DEFINED_Outptr_opt_result_z)
621 #  undef _Outptr_opt_result_z_
622 #endif
623 #if !defined(_Outptr_opt_result_z_)
624 #  define _Outptr_opt_result_z_
625 #  define SALIERI_DEFINED_Outptr_opt_result_z
626 #endif
627 
628 #if defined(_Outptr_result_maybenull_z_) && defined(SALIERI_DEFINED_Outptr_result_maybenull_z)
629 #  undef _Outptr_result_maybenull_z_
630 #endif
631 #if !defined(_Outptr_result_maybenull_z_)
632 #  define _Outptr_result_maybenull_z_
633 #  define SALIERI_DEFINED_Outptr_result_maybenull_z
634 #endif
635 
636 #if defined(_Outptr_opt_result_maybenull_z_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull_z)
637 #  undef _Outptr_opt_result_maybenull_z_
638 #endif
639 #if !defined(_Outptr_opt_result_maybenull_z_)
640 #  define _Outptr_opt_result_maybenull_z_
641 #  define SALIERI_DEFINED_Outptr_opt_result_maybenull_z
642 #endif
643 
644 #if defined(_COM_Outptr_) && defined(SALIERI_DEFINED_COM_Outptr)
645 #  undef _COM_Outptr_
646 #endif
647 #if !defined(_COM_Outptr_)
648 #  define _COM_Outptr_
649 #  define SALIERI_DEFINED_COM_Outptr
650 #endif
651 
652 #if defined(_COM_Outptr_opt_) && defined(SALIERI_DEFINED_COM_Outptr_opt)
653 #  undef _COM_Outptr_opt_
654 #endif
655 #if !defined(_COM_Outptr_opt_)
656 #  define _COM_Outptr_opt_
657 #  define SALIERI_DEFINED_COM_Outptr_opt
658 #endif
659 
660 #if defined(_COM_Outptr_result_maybenull_) && defined(SALIERI_DEFINED_COM_Outptr_result_maybenull)
661 #  undef _COM_Outptr_result_maybenull_
662 #endif
663 #if !defined(_COM_Outptr_result_maybenull_)
664 #  define _COM_Outptr_result_maybenull_
665 #  define SALIERI_DEFINED_COM_Outptr_result_maybenull
666 #endif
667 
668 #if defined(_COM_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_COM_Outptr_opt_result_maybenull)
669 #  undef _COM_Outptr_opt_result_maybenull_
670 #endif
671 #if !defined(_COM_Outptr_opt_result_maybenull_)
672 #  define _COM_Outptr_opt_result_maybenull_
673 #  define SALIERI_DEFINED_COM_Outptr_opt_result_maybenull
674 #endif
675 
676 #if defined(_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull)
677 #  undef _Outptr_opt_result_maybenull_
678 #endif
679 #if !defined(_Outptr_opt_result_maybenull_)
680 #  define _Outptr_opt_result_maybenull_
681 #  define SALIERI_DEFINED_Outptr_opt_result_maybenull
682 #endif
683 
684 #if defined(_Outptr_result_buffer_) && defined(SALIERI_DEFINED_Outptr_result_buffer)
685 #  undef _Outptr_result_buffer_
686 #endif
687 #if !defined(_Outptr_result_buffer_)
688 #  define _Outptr_result_buffer_(s)
689 #  define SALIERI_DEFINED_Outptr_result_buffer
690 #endif
691 
692 #if defined(_Outptr_result_bytebuffer_) && defined(SALIERI_DEFINED_Outptr_result_bytebuffer)
693 #  undef _Outptr_result_bytebuffer_
694 #endif
695 #if !defined(_Outptr_result_bytebuffer_)
696 #  define _Outptr_result_bytebuffer_(s)
697 #  define SALIERI_DEFINED_Outptr_result_bytebuffer
698 #endif
699 
700 #if defined(_Outptr_opt_result_buffer_) && defined(SALIERI_DEFINED_Outptr_opt_result_buffer)
701 #  undef _Outptr_opt_result_buffer_
702 #endif
703 #if !defined(_Outptr_opt_result_buffer_)
704 #  define _Outptr_opt_result_buffer_(s)
705 #  define SALIERI_DEFINED_Outptr_opt_result_buffer
706 #endif
707 
708 #if defined(_Outptr_opt_result_bytebuffer_) && defined(SALIERI_DEFINED_Outptr_opt_result_bytebuffer)
709 #  undef _Outptr_opt_result_bytebuffer_
710 #endif
711 #if !defined(_Outptr_opt_result_bytebuffer_)
712 #  define _Outptr_opt_result_bytebuffer_(s)
713 #  define SALIERI_DEFINED_Outptr_opt_result_bytebuffer
714 #endif
715 
716 #if defined(_Outptr_result_buffer_to_) && defined(SALIERI_DEFINED_Outptr_result_buffer_to)
717 #  undef _Outptr_result_buffer_to_
718 #endif
719 #if !defined(_Outptr_result_buffer_to_)
720 #  define _Outptr_result_buffer_to_(s,c)
721 #  define SALIERI_DEFINED_Outptr_result_buffer_to
722 #endif
723 
724 #if defined(_Outptr_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outptr_result_bytebuffer_to)
725 #  undef _Outptr_result_bytebuffer_to_
726 #endif
727 #if !defined(_Outptr_result_bytebuffer_to_)
728 #  define _Outptr_result_bytebuffer_to_(s,c)
729 #  define SALIERI_DEFINED_Outptr_result_bytebuffer_to
730 #endif
731 
732 #if defined(_Outptr_opt_result_buffer_to_) && defined(SALIERI_DEFINED_Outptr_opt_result_buffer_to)
733 #  undef _Outptr_opt_result_buffer_to_
734 #endif
735 #if !defined(_Outptr_opt_result_buffer_to_)
736 #  define _Outptr_opt_result_buffer_to_(s,c)
737 #  define SALIERI_DEFINED_Outptr_opt_result_buffer_to
738 #endif
739 
740 #if defined(_Outptr_opt_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outptr_opt_result_bytebuffer_to)
741 #  undef _Outptr_opt_result_bytebuffer_to_
742 #endif
743 #if !defined(_Outptr_opt_result_bytebuffer_to_)
744 #  define _Outptr_opt_result_bytebuffer_to_(s,c)
745 #  define SALIERI_DEFINED_Outptr_opt_result_bytebuffer_to
746 #endif
747 
748 #if defined(_Result_nullonfailure_) && defined(SALIERI_DEFINED_Result_nullonfailure)
749 #  undef _Result_nullonfailure_
750 #endif
751 #if !defined(_Result_nullonfailure_)
752 #  define _Result_nullonfailure_
753 #  define SALIERI_DEFINED_Result_nullonfailure
754 #endif
755 
756 #if defined(_Result_zeroonfailure_) && defined(SALIERI_DEFINED_Result_zeroonfailure)
757 #  undef _Result_zeroonfailure_
758 #endif
759 #if !defined(_Result_zeroonfailure_)
760 #  define _Result_zeroonfailure_
761 #  define SALIERI_DEFINED_Result_zeroonfailure
762 #endif
763 
764 #if defined(_Outptr_result_nullonfailure_) && defined(SALIERI_DEFINED_Outptr_result_nullonfailure)
765 #  undef _Outptr_result_nullonfailure_
766 #endif
767 #if !defined(_Outptr_result_nullonfailure_)
768 #  define _Outptr_result_nullonfailure_
769 #  define SALIERI_DEFINED_Outptr_result_nullonfailure
770 #endif
771 
772 #if defined(_Outptr_opt_result_nullonfailure_) && defined(SALIERI_DEFINED_Outptr_opt_result_nullonfailure)
773 #  undef _Outptr_opt_result_nullonfailure_
774 #endif
775 #if !defined(_Outptr_opt_result_nullonfailure_)
776 #  define _Outptr_opt_result_nullonfailure_
777 #  define SALIERI_DEFINED_Outptr_opt_result_nullonfailure
778 #endif
779 
780 #if defined(_Outref_result_nullonfailure_) && defined(SALIERI_DEFINED_Outref_result_nullonfailure)
781 #  undef _Outref_result_nullonfailure_
782 #endif
783 #if !defined(_Outref_result_nullonfailure_)
784 #  define _Outref_result_nullonfailure_
785 #  define SALIERI_DEFINED_Outref_result_nullonfailure
786 #endif
787 
788 /* Output Reference Parameters */
789 
790 #if defined(_Outref_) && defined(SALIERI_DEFINED_Outref)
791 #  undef _Outref_
792 #endif
793 #if !defined(_Outref_)
794 #  define _Outref_
795 #  define SALIERI_DEFINED_Outref
796 #endif
797 
798 #if defined(_Outref_result_maybenull_) && defined(SALIERI_DEFINED_Outref_result_maybenull)
799 #  undef _Outref_result_maybenull_
800 #endif
801 #if !defined(_Outref_result_maybenull_)
802 #  define _Outref_result_maybenull_
803 #  define SALIERI_DEFINED_Outref_result_maybenull
804 #endif
805 
806 #if defined(_Outref_result_buffer_) && defined(SALIERI_DEFINED_Outref_result_buffer)
807 #  undef _Outref_result_buffer_
808 #endif
809 #if !defined(_Outref_result_buffer_)
810 #  define _Outref_result_buffer_(s)
811 #  define SALIERI_DEFINED_Outref_result_buffer
812 #endif
813 
814 #if defined(_Outref_result_bytebuffer_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer)
815 #  undef _Outref_result_bytebuffer_
816 #endif
817 #if !defined(_Outref_result_bytebuffer_)
818 #  define _Outref_result_bytebuffer_(s)
819 #  define SALIERI_DEFINED_Outref_result_bytebuffer
820 #endif
821 
822 #if defined(_Outref_result_buffer_to_) && defined(SALIERI_DEFINED_Outref_result_buffer_to)
823 #  undef _Outref_result_buffer_to_
824 #endif
825 #if !defined(_Outref_result_buffer_to_)
826 #  define _Outref_result_buffer_to_(s,c)
827 #  define SALIERI_DEFINED_Outref_result_buffer_to
828 #endif
829 
830 #if defined(_Outref_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_to)
831 #  undef _Outref_result_bytebuffer_to_
832 #endif
833 #if !defined(_Outref_result_bytebuffer_to_)
834 #  define _Outref_result_bytebuffer_to_(s,c)
835 #  define SALIERI_DEFINED_Outref_result_bytebuffer_to
836 #endif
837 
838 #if defined(_Outref_result_buffer_all_) && defined(SALIERI_DEFINED_Outref_result_buffer_all)
839 #  undef _Outref_result_buffer_all_
840 #endif
841 #if !defined(_Outref_result_buffer_all_)
842 #  define _Outref_result_buffer_all_(s)
843 #  define SALIERI_DEFINED_Outref_result_buffer_all
844 #endif
845 
846 #if defined(_Outref_result_bytebuffer_all_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_all)
847 #  undef _Outref_result_bytebuffer_all_
848 #endif
849 #if !defined(_Outref_result_bytebuffer_all_)
850 #  define _Outref_result_bytebuffer_all_(s)
851 #  define SALIERI_DEFINED_Outref_result_bytebuffer_all
852 #endif
853 
854 #if defined(_Outref_result_buffer_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_maybenull)
855 #  undef _Outref_result_buffer_maybenull_
856 #endif
857 #if !defined(_Outref_result_buffer_maybenull_)
858 #  define _Outref_result_buffer_maybenull_(s)
859 #  define SALIERI_DEFINED_Outref_result_buffer_maybenull
860 #endif
861 
862 #if defined(_Outref_result_bytebuffer_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_maybenull)
863 #  undef _Outref_result_bytebuffer_maybenull_
864 #endif
865 #if !defined(_Outref_result_bytebuffer_maybenull_)
866 #  define _Outref_result_bytebuffer_maybenull_(s)
867 #  define SALIERI_DEFINED_Outref_result_bytebuffer_maybenull
868 #endif
869 
870 #if defined(_Outref_result_buffer_to_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_to_maybenull)
871 #  undef _Outref_result_buffer_to_maybenull_
872 #endif
873 #if !defined(_Outref_result_buffer_to_maybenull_)
874 #  define _Outref_result_buffer_to_maybenull_(s,c)
875 #  define SALIERI_DEFINED_Outref_result_buffer_to_maybenull
876 #endif
877 
878 #if defined(_Outref_result_bytebuffer_to_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_to_maybenull)
879 #  undef _Outref_result_bytebuffer_to_maybenull_
880 #endif
881 #if !defined(_Outref_result_bytebuffer_to_maybenull_)
882 #  define _Outref_result_bytebuffer_to_maybenull_(s,c)
883 #  define SALIERI_DEFINED_Outref_result_bytebuffer_to_maybenull
884 #endif
885 
886 #if defined(_Outref_result_buffer_all_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_all_maybenull)
887 #  undef _Outref_result_buffer_all_maybenull_
888 #endif
889 #if !defined(_Outref_result_buffer_all_maybenull_)
890 #  define _Outref_result_buffer_all_maybenull_(s)
891 #  define SALIERI_DEFINED_Outref_result_buffer_all_maybenull
892 #endif
893 
894 #if defined(_Outref_result_bytebuffer_all_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_all_maybenull)
895 #  undef _Outref_result_bytebuffer_all_maybenull_
896 #endif
897 #if !defined(_Outref_result_bytebuffer_all_maybenull_)
898 #  define _Outref_result_bytebuffer_all_maybenull_(s)
899 #  define SALIERI_DEFINED_Outref_result_bytebuffer_all_maybenull
900 #endif
901 
902 /* Return Values */
903 
904 #if defined(_Ret_z_) && defined(SALIERI_DEFINED_Ret_z)
905 #  undef _Ret_z_
906 #endif
907 #if !defined(_Ret_z_)
908 #  define _Ret_z_
909 #  define SALIERI_DEFINED_Ret_z
910 #endif
911 
912 #if defined(_Ret_writes_) && defined(SALIERI_DEFINED_Ret_writes)
913 #  undef _Ret_writes_
914 #endif
915 #if !defined(_Ret_writes_)
916 #  define _Ret_writes_(s)
917 #  define SALIERI_DEFINED_Ret_writes
918 #endif
919 
920 #if defined(_Ret_writes_bytes_) && defined(SALIERI_DEFINED_Ret_writes_bytes)
921 #  undef _Ret_writes_bytes_
922 #endif
923 #if !defined(_Ret_writes_bytes_)
924 #  define _Ret_writes_bytes_(s)
925 #  define SALIERI_DEFINED_Ret_writes_bytes
926 #endif
927 
928 #if defined(_Ret_writes_z_) && defined(SALIERI_DEFINED_Ret_writes_z)
929 #  undef _Ret_writes_z_
930 #endif
931 #if !defined(_Ret_writes_z_)
932 #  define _Ret_writes_z_(s)
933 #  define SALIERI_DEFINED_Ret_writes_z
934 #endif
935 
936 #if defined(_Ret_writes_to_) && defined(SALIERI_DEFINED_Ret_writes_to)
937 #  undef _Ret_writes_to_
938 #endif
939 #if !defined(_Ret_writes_to_)
940 #  define _Ret_writes_to_(s,c)
941 #  define SALIERI_DEFINED_Ret_writes_to
942 #endif
943 
944 #if defined(_Ret_writes_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_maybenull)
945 #  undef _Ret_writes_maybenull_
946 #endif
947 #if !defined(_Ret_writes_maybenull_)
948 #  define _Ret_writes_maybenull_(s)
949 #  define SALIERI_DEFINED_Ret_writes_maybenull
950 #endif
951 
952 #if defined(_Ret_writes_to_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_to_maybenull)
953 #  undef _Ret_writes_to_maybenull_
954 #endif
955 #if !defined(_Ret_writes_to_maybenull_)
956 #  define _Ret_writes_to_maybenull_(s)
957 #  define SALIERI_DEFINED_Ret_writes_to_maybenull
958 #endif
959 
960 #if defined(_Ret_writes_maybenull_z_) && defined(SALIERI_DEFINED_Ret_writes_maybenull_z)
961 #  undef _Ret_writes_maybenull_z_
962 #endif
963 #if !defined(_Ret_writes_maybenull_z_)
964 #  define _Ret_writes_maybenull_z_(s)
965 #  define SALIERI_DEFINED_Ret_writes_maybenull_z
966 #endif
967 
968 #if defined(_Ret_maybenull_) && defined(SALIERI_DEFINED_Ret_maybenull)
969 #  undef _Ret_maybenull_
970 #endif
971 #if !defined(_Ret_maybenull_)
972 #  define _Ret_maybenull_
973 #  define SALIERI_DEFINED_Ret_maybenull
974 #endif
975 
976 #if defined(_Ret_maybenull_z_) && defined(SALIERI_DEFINED_Ret_maybenull_z)
977 #  undef _Ret_maybenull_z_
978 #endif
979 #if !defined(_Ret_maybenull_z_)
980 #  define _Ret_maybenull_z_
981 #  define SALIERI_DEFINED_Ret_maybenull_z
982 #endif
983 
984 #if defined(_Ret_null_) && defined(SALIERI_DEFINED_Ret_null)
985 #  undef _Ret_null_
986 #endif
987 #if !defined(_Ret_null_)
988 #  define _Ret_null_
989 #  define SALIERI_DEFINED_Ret_null
990 #endif
991 
992 #if defined(_Ret_notnull_) && defined(SALIERI_DEFINED_Ret_notnull)
993 #  undef _Ret_notnull_
994 #endif
995 #if !defined(_Ret_notnull_)
996 #  define _Ret_notnull_
997 #  define SALIERI_DEFINED_Ret_notnull
998 #endif
999 
1000 #if defined(_Ret_writes_bytes_to_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to)
1001 #  undef _Ret_writes_bytes_to_
1002 #endif
1003 #if !defined(_Ret_writes_bytes_to_)
1004 #  define _Ret_writes_bytes_to_
1005 #  define SALIERI_DEFINED_Ret_writes_bytes_to
1006 #endif
1007 
1008 #if defined(_Ret_writes_bytes_to_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to)
1009 #  undef _Ret_writes_bytes_to_
1010 #endif
1011 #if !defined(_Ret_writes_bytes_to_)
1012 #  define _Ret_writes_bytes_to_
1013 #  define SALIERI_DEFINED_Ret_writes_bytes_to
1014 #endif
1015 
1016 #if defined(_Ret_writes_bytes_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_bytes_maybenull)
1017 #  undef _Ret_writes_bytes_maybenull_
1018 #endif
1019 #if !defined(_Ret_writes_bytes_maybenull_)
1020 #  define _Ret_writes_bytes_maybenull_
1021 #  define SALIERI_DEFINED_Ret_writes_bytes_maybenull
1022 #endif
1023 
1024 #if defined(_Ret_writes_bytes_to_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to_maybenull)
1025 #  undef _Ret_writes_bytes_to_maybenull_
1026 #endif
1027 #if !defined(_Ret_writes_bytes_to_maybenull_)
1028 #  define _Ret_writes_bytes_to_maybenull_
1029 #  define SALIERI_DEFINED_Ret_writes_bytes_to_maybenull
1030 #endif
1031 
1032 /* Other Common Annotations */
1033 
1034 #if defined(_In_range_) && defined(SALIERI_DEFINED_In_range)
1035 #  undef _In_range_
1036 #endif
1037 #if !defined(_In_range_)
1038 #  define _In_range_(low, hi)
1039 #  define SALIERI_DEFINED_In_range
1040 #endif
1041 
1042 #if defined(_Out_range_) && defined(SALIERI_DEFINED_Out_range)
1043 #  undef _Out_range_
1044 #endif
1045 #if !defined(_Out_range_)
1046 #  define _Out_range_(low, hi)
1047 #  define SALIERI_DEFINED_Out_range
1048 #endif
1049 
1050 #if defined(_Ret_range_) && defined(SALIERI_DEFINED_Ret_range)
1051 #  undef _Ret_range_
1052 #endif
1053 #if !defined(_Ret_range_)
1054 #  define _Ret_range_(low, hi)
1055 #  define SALIERI_DEFINED_Ret_range
1056 #endif
1057 
1058 #if defined(_Deref_in_range_) && defined(SALIERI_DEFINED_Deref_in_range)
1059 #  undef _Deref_in_range_
1060 #endif
1061 #if !defined(_Deref_in_range_)
1062 #  define _Deref_in_range_(low, hi)
1063 #  define SALIERI_DEFINED_Deref_in_range
1064 #endif
1065 
1066 #if defined(_Deref_out_range_) && defined(SALIERI_DEFINED_Deref_out_range)
1067 #  undef _Deref_out_range_
1068 #endif
1069 #if !defined(_Deref_out_range_)
1070 #  define _Deref_out_range_(low, hi)
1071 #  define SALIERI_DEFINED_Deref_out_range
1072 #endif
1073 
1074 #if defined(_Deref_inout_range_) && defined(SALIERI_DEFINED_Deref_inout_range)
1075 #  undef _Deref_inout_range_
1076 #endif
1077 #if !defined(_Deref_inout_range_)
1078 #  define _Deref_inout_range_(low, hi)
1079 #  define SALIERI_DEFINED_Deref_inout_range
1080 #endif
1081 
1082 #if defined(_Field_range_) && defined(SALIERI_DEFINED_Field_range)
1083 #  undef _Field_range_
1084 #endif
1085 #if !defined(_Field_range_)
1086 #  define _Field_range_(low, hi)
1087 #  define SALIERI_DEFINED_Field_range
1088 #endif
1089 
1090 #if defined(_Pre_equal_to_) && defined(SALIERI_DEFINED_Pre_equal_to)
1091 #  undef _Pre_equal_to_
1092 #endif
1093 #if !defined(_Pre_equal_to_)
1094 #  define _Pre_equal_to_(expr)
1095 #  define SALIERI_DEFINED_Pre_equal_to
1096 #endif
1097 
1098 #if defined(_Post_equal_to_) && defined(SALIERI_DEFINED_Post_equal_to)
1099 #  undef _Post_equal_to_
1100 #endif
1101 #if !defined(_Post_equal_to_)
1102 #  define _Post_equal_to_(expr)
1103 #  define SALIERI_DEFINED_Post_equal_to
1104 #endif
1105 
1106 #if defined(_Struct_size_bytes_) && defined(SALIERI_DEFINED_Struct_size_bytes)
1107 #  undef _Struct_size_bytes_
1108 #endif
1109 #if !defined(_Struct_size_bytes_)
1110 #  define _Struct_size_bytes_(size)
1111 #  define SALIERI_DEFINED_Struct_size_bytes
1112 #endif
1113 
1114 /* Annotating Function Behavior
1115  *
1116  * https://msdn.microsoft.com/en-us/library/jj159529.aspx
1117  *****/
1118 
1119 #if defined(_Called_from_function_class_) && defined(SALIERI_DEFINED_Called_from_function_class)
1120 #  undef _Called_from_function_class_
1121 #endif
1122 #if !defined(_Called_from_function_class_)
1123 #  define _Called_from_function_class_(name)
1124 #  define SALIERI_DEFINED_Called_from_function_class
1125 #endif
1126 
1127 #if defined(_Check_return_) && defined(SALIERI_DEFINED_Check_return)
1128 #  undef _Check_return_
1129 #endif
1130 #if !defined(_Check_return_)
1131 #  define _Check_return_
1132 #  define SALIERI_DEFINED_Check_return
1133 #endif
1134 
1135 #if defined(_Function_class_) && defined(SALIERI_DEFINED_Function_class)
1136 #  undef _Function_class_
1137 #endif
1138 #if !defined(_Function_class_)
1139 #  define _Function_class_(name)
1140 #  define SALIERI_DEFINED_Function_class
1141 #endif
1142 
1143 #if defined(_Raises_SEH_exception_) && defined(SALIERI_DEFINED_Raises_SEH_exception)
1144 #  undef _Raises_SEH_exception_
1145 #endif
1146 #if !defined(_Raises_SEH_exception_)
1147 #  define _Raises_SEH_exception_
1148 #  define SALIERI_DEFINED_Raises_SEH_exception
1149 #endif
1150 
1151 #if defined(_Must_inspect_result_) && defined(SALIERI_DEFINED_Must_inspect_result)
1152 #  undef _Must_inspect_result_
1153 #endif
1154 #if !defined(_Must_inspect_result_)
1155 #  define _Must_inspect_result_
1156 #  define SALIERI_DEFINED_Must_inspect_result
1157 #endif
1158 
1159 #if defined(_Use_decl_annotations_) && defined(SALIERI_DEFINED_Use_decl_annotations)
1160 #  undef _Use_decl_annotations_
1161 #endif
1162 #if !defined(_Use_decl_annotations_)
1163 #  define _Use_decl_annotations_
1164 #  define SALIERI_DEFINED_Use_decl_annotations
1165 #endif
1166 
1167 #if defined(_Always_) && defined(SALIERI_DEFINED_Always)
1168 #  undef _Always_
1169 #endif
1170 #if !defined(_Always_)
1171 #  define _Always_(anno_list)
1172 #  define SALIERI_DEFINED_Always
1173 #endif
1174 
1175 #if defined(_On_failure_) && defined(SALIERI_DEFINED_On_failure)
1176 #  undef _On_failure_
1177 #endif
1178 #if !defined(_On_failure_)
1179 #  define _On_failure_(anno_list)
1180 #  define SALIERI_DEFINED_On_failure
1181 #endif
1182 
1183 #if defined(_Return_type_success_) && defined(SALIERI_DEFINED_Return_type_success)
1184 #  undef _Return_type_success_
1185 #endif
1186 #if !defined(_Return_type_success_)
1187 #  define _Return_type_success_(expr)
1188 #  define SALIERI_DEFINED_Return_type_success
1189 #endif
1190 
1191 #if defined(_Success_) && defined(SALIERI_DEFINED_Success)
1192 #  undef _Success_
1193 #endif
1194 #if !defined(_Success_)
1195 #  define _Success_(expr)
1196 #  define SALIERI_DEFINED_Success
1197 #endif
1198 
1199 /* Annotating Structs and Classes
1200  *
1201  * https://msdn.microsoft.com/en-us/library/jj159528.aspx
1202  *****/
1203 
1204 #if defined(_Field_range_) && defined(SALIERI_DEFINED_Field_range)
1205 #  undef _Field_range_
1206 #endif
1207 #if !defined(_Field_range_)
1208 #  define _Field_range_(low, high)
1209 #  define SALIERI_DEFINED_Field_range
1210 #endif
1211 
1212 #if defined(_Field_size_) && defined(SALIERI_DEFINED_Field_size)
1213 #  undef _Field_size_
1214 #endif
1215 #if !defined(_Field_size_)
1216 #  define _Field_size_(size)
1217 #  define SALIERI_DEFINED_Field_size
1218 #endif
1219 
1220 #if defined(_Field_size_part_) && defined(SALIERI_DEFINED_Field_size_part)
1221 #  undef _Field_size_part_
1222 #endif
1223 #if !defined(_Field_size_part_)
1224 #  define _Field_size_part_(size)
1225 #  define SALIERI_DEFINED_Field_size_part
1226 #endif
1227 
1228 #if defined(_Field_size_opt_) && defined(SALIERI_DEFINED_Field_size_opt)
1229 #  undef _Field_size_opt_
1230 #endif
1231 #if !defined(_Field_size_opt_)
1232 #  define _Field_size_opt_(size)
1233 #  define SALIERI_DEFINED_Field_size_opt
1234 #endif
1235 
1236 #if defined(_Field_size_bytes_) && defined(SALIERI_DEFINED_Field_size_bytes)
1237 #  undef _Field_size_bytes_
1238 #endif
1239 #if !defined(_Field_size_bytes_)
1240 #  define _Field_size_bytes_(size)
1241 #  define SALIERI_DEFINED_Field_size_bytes
1242 #endif
1243 
1244 #if defined(_Field_size_bytes_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_opt)
1245 #  undef _Field_size_bytes_opt_
1246 #endif
1247 #if !defined(_Field_size_bytes_opt_)
1248 #  define _Field_size_bytes_opt_(size)
1249 #  define SALIERI_DEFINED_Field_size_bytes_opt
1250 #endif
1251 
1252 #if defined(_Field_size_part_) && defined(SALIERI_DEFINED_Field_size_part)
1253 #  undef _Field_size_part_
1254 #endif
1255 #if !defined(_Field_size_part_)
1256 #  define _Field_size_part_(size, count)
1257 #  define SALIERI_DEFINED_Field_size_part
1258 #endif
1259 
1260 #if defined(_Field_size_part_opt_) && defined(SALIERI_DEFINED_Field_size_part_opt)
1261 #  undef _Field_size_part_opt_
1262 #endif
1263 #if !defined(_Field_size_part_opt_)
1264 #  define _Field_size_part_opt_(size, count)
1265 #  define SALIERI_DEFINED_Field_size_part_opt
1266 #endif
1267 
1268 #if defined(_Field_size_bytes_part_) && defined(SALIERI_DEFINED_Field_size_bytes_part)
1269 #  undef _Field_size_bytes_part_
1270 #endif
1271 #if !defined(_Field_size_bytes_part_)
1272 #  define _Field_size_bytes_part_(size, count)
1273 #  define SALIERI_DEFINED_Field_size_bytes_part
1274 #endif
1275 
1276 #if defined(_Field_size_bytes_part_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_part_opt)
1277 #  undef _Field_size_bytes_part_opt_
1278 #endif
1279 #if !defined(_Field_size_bytes_part_opt_)
1280 #  define _Field_size_bytes_part_opt_(size, count)
1281 #  define SALIERI_DEFINED_Field_size_bytes_part_opt
1282 #endif
1283 
1284 #if defined(_Field_size_full_) && defined(SALIERI_DEFINED_Field_size_full)
1285 #  undef _Field_size_full_
1286 #endif
1287 #if !defined(_Field_size_full_)
1288 #  define _Field_size_full_(size)
1289 #  define SALIERI_DEFINED_Field_size_full
1290 #endif
1291 
1292 #if defined(_Field_size_full_opt_) && defined(SALIERI_DEFINED_Field_size_full_opt)
1293 #  undef _Field_size_full_opt_
1294 #endif
1295 #if !defined(_Field_size_full_opt_)
1296 #  define _Field_size_full_opt_(size)
1297 #  define SALIERI_DEFINED_Field_size_full_opt
1298 #endif
1299 
1300 #if defined(_Field_size_bytes_full_) && defined(SALIERI_DEFINED_Field_size_bytes_full)
1301 #  undef _Field_size_bytes_full_
1302 #endif
1303 #if !defined(_Field_size_bytes_full_)
1304 #  define _Field_size_bytes_full_(size)
1305 #  define SALIERI_DEFINED_Field_size_bytes_full
1306 #endif
1307 
1308 #if defined(_Field_size_bytes_full_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_full_opt)
1309 #  undef _Field_size_bytes_full_opt_
1310 #endif
1311 #if !defined(_Field_size_bytes_full_opt_)
1312 #  define _Field_size_bytes_full_opt_(size)
1313 #  define SALIERI_DEFINED_Field_size_bytes_full_opt
1314 #endif
1315 
1316 #if defined(_Struct_size_bytes_) && defined(SALIERI_DEFINED_Struct_size_bytes)
1317 #  undef _Struct_size_bytes_
1318 #endif
1319 #if !defined(_Struct_size_bytes_)
1320 #  define _Struct_size_bytes_(size)
1321 #  define SALIERI_DEFINED_Struct_size_bytes
1322 #endif
1323 
1324 /* Annotating Locking Behavior
1325  *
1326  * https://msdn.microsoft.com/en-us/library/hh916381.aspx
1327  *****/
1328 
1329 #if defined(_Acquires_exclusive_lock_) && defined(SALIERI_DEFINED_Acquires_exclusive_lock)
1330 #  undef _Acquires_exclusive_lock_
1331 #endif
1332 #if !defined(_Acquires_exclusive_lock_)
1333 #  define _Acquires_exclusive_lock_(expr)
1334 #  define SALIERI_DEFINED_Acquires_exclusive_lock
1335 #endif
1336 
1337 #if defined(_Acquires_lock_) && defined(SALIERI_DEFINED_Acquires_lock)
1338 #  undef _Acquires_lock_
1339 #endif
1340 #if !defined(_Acquires_lock_)
1341 #  define _Acquires_lock_(expr)
1342 #  define SALIERI_DEFINED_Acquires_lock
1343 #endif
1344 
1345 #if defined(_Acquires_nonreentrant_lock_) && defined(SALIERI_DEFINED_Acquires_nonreentrant_lock)
1346 #  undef _Acquires_nonreentrant_lock_
1347 #endif
1348 #if !defined(_Acquires_nonreentrant_lock_)
1349 #  define _Acquires_nonreentrant_lock_(expr)
1350 #  define SALIERI_DEFINED_Acquires_nonreentrant_lock
1351 #endif
1352 
1353 #if defined(_Acquires_shared_lock_) && defined(SALIERI_DEFINED_Acquires_shared_lock)
1354 #  undef _Acquires_shared_lock_
1355 #endif
1356 #if !defined(_Acquires_shared_lock_)
1357 #  define _Acquires_shared_lock_(expr)
1358 #  define SALIERI_DEFINED_Acquires_shared_lock
1359 #endif
1360 
1361 #if defined(_Create_lock_level_) && defined(SALIERI_DEFINED_Create_lock_level)
1362 #  undef _Create_lock_level_
1363 #endif
1364 #if !defined(_Create_lock_level_)
1365 #  define _Create_lock_level_(name)
1366 #  define SALIERI_DEFINED_Create_lock_level
1367 #endif
1368 
1369 #if defined(_Has_lock_kind_) && defined(SALIERI_DEFINED_Has_lock_kind)
1370 #  undef _Has_lock_kind_
1371 #endif
1372 #if !defined(_Has_lock_kind_)
1373 #  define _Has_lock_kind_(kind)
1374 #  define SALIERI_DEFINED_Has_lock_kind
1375 #endif
1376 
1377 #if defined(_Has_lock_level_) && defined(SALIERI_DEFINED_Has_lock_level)
1378 #  undef _Has_lock_level_
1379 #endif
1380 #if !defined(_Has_lock_level_)
1381 #  define _Has_lock_level_(name)
1382 #  define SALIERI_DEFINED_Has_lock_level
1383 #endif
1384 
1385 #if defined(_Lock_level_order_) && defined(SALIERI_DEFINED_Lock_level_order)
1386 #  undef _Lock_level_order_
1387 #endif
1388 #if !defined(_Lock_level_order_)
1389 #  define _Lock_level_order_(name1, name2)
1390 #  define SALIERI_DEFINED_Lock_level_order
1391 #endif
1392 
1393 #if defined(_Post_same_lock_) && defined(SALIERI_DEFINED_Post_same_lock)
1394 #  undef _Post_same_lock_
1395 #endif
1396 #if !defined(_Post_same_lock_)
1397 #  define _Post_same_lock_(expr1, expr2)
1398 #  define SALIERI_DEFINED_Post_same_lock
1399 #endif
1400 
1401 #if defined(_Releases_exclusive_lock_) && defined(SALIERI_DEFINED_Releases_exclusive_lock)
1402 #  undef _Releases_exclusive_lock_
1403 #endif
1404 #if !defined(_Releases_exclusive_lock_)
1405 #  define _Releases_exclusive_lock_(expr)
1406 #  define SALIERI_DEFINED_Releases_exclusive_lock
1407 #endif
1408 
1409 #if defined(_Releases_lock_) && defined(SALIERI_DEFINED_Releases_lock)
1410 #  undef _Releases_lock_
1411 #endif
1412 #if !defined(_Releases_lock_)
1413 #  define _Releases_lock_(expr)
1414 #  define SALIERI_DEFINED_Releases_lock
1415 #endif
1416 
1417 #if defined(_Releases_nonreentrant_lock_) && defined(SALIERI_DEFINED_Releases_nonreentrant_lock)
1418 #  undef _Releases_nonreentrant_lock_
1419 #endif
1420 #if !defined(_Releases_nonreentrant_lock_)
1421 #  define _Releases_nonreentrant_lock_(expr)
1422 #  define SALIERI_DEFINED_Releases_nonreentrant_lock
1423 #endif
1424 
1425 #if defined(_Releases_shared_lock_) && defined(SALIERI_DEFINED_Releases_shared_lock)
1426 #  undef _Releases_shared_lock_
1427 #endif
1428 #if !defined(_Releases_shared_lock_)
1429 #  define _Releases_shared_lock_(expr)
1430 #  define SALIERI_DEFINED_Releases_shared_lock
1431 #endif
1432 
1433 #if defined(_Requires_lock_held_) && defined(SALIERI_DEFINED_Requires_lock_held)
1434 #  undef _Requires_lock_held_
1435 #endif
1436 #if !defined(_Requires_lock_held_)
1437 #  define _Requires_lock_held_(expr)
1438 #  define SALIERI_DEFINED_Requires_lock_held
1439 #endif
1440 
1441 #if defined(_Requires_lock_not_held_) && defined(SALIERI_DEFINED_Requires_lock_not_held)
1442 #  undef _Requires_lock_not_held_
1443 #endif
1444 #if !defined(_Requires_lock_not_held_)
1445 #  define _Requires_lock_not_held_(expr)
1446 #  define SALIERI_DEFINED_Requires_lock_not_held
1447 #endif
1448 
1449 #if defined(_Requires_no_locks_held_) && defined(SALIERI_DEFINED_Requires_no_locks_held)
1450 #  undef _Requires_no_locks_held_
1451 #endif
1452 #if !defined(_Requires_no_locks_held_)
1453 #  define _Requires_no_locks_held_
1454 #  define SALIERI_DEFINED_Requires_no_locks_held
1455 #endif
1456 
1457 #if defined(_Requires_shared_lock_held_) && defined(SALIERI_DEFINED_Requires_shared_lock_held)
1458 #  undef _Requires_shared_lock_held_
1459 #endif
1460 #if !defined(_Requires_shared_lock_held_)
1461 #  define _Requires_shared_lock_held_(expr)
1462 #  define SALIERI_DEFINED_Requires_shared_lock_held
1463 #endif
1464 
1465 #if defined(_Requires_exclusive_lock_held_) && defined(SALIERI_DEFINED_Requires_exclusive_lock_held)
1466 #  undef _Requires_exclusive_lock_held_
1467 #endif
1468 #if !defined(_Requires_exclusive_lock_held_)
1469 #  define _Requires_exclusive_lock_held_(expr)
1470 #  define SALIERI_DEFINED_Requires_exclusive_lock_held
1471 #endif
1472 
1473 /* Shared Data Access Annotations */
1474 
1475 #if defined(_Guarded_by_) && defined(SALIERI_DEFINED_Guarded_by)
1476 #  undef _Guarded_by_
1477 #endif
1478 #if !defined(_Guarded_by_)
1479 #  define _Guarded_by_(expr)
1480 #  define SALIERI_DEFINED_Guarded_by
1481 #endif
1482 
1483 #if defined(_Interlocked_) && defined(SALIERI_DEFINED_Interlocked)
1484 #  undef _Interlocked_
1485 #endif
1486 #if !defined(_Interlocked_)
1487 #  define _Interlocked_
1488 #  define SALIERI_DEFINED_Interlocked
1489 #endif
1490 
1491 #if defined(_Interlocked_operand_) && defined(SALIERI_DEFINED_Interlocked_operand)
1492 #  undef _Interlocked_operand_
1493 #endif
1494 #if !defined(_Interlocked_operand_)
1495 #  define _Interlocked_operand_
1496 #  define SALIERI_DEFINED_Interlocked_operand
1497 #endif
1498 
1499 #if defined(_Write_guarded_by_) && defined(SALIERI_DEFINED_Write_guarded_by)
1500 #  undef _Write_guarded_by_
1501 #endif
1502 #if !defined(_Write_guarded_by_)
1503 #  define _Write_guarded_by_(expr)
1504 #  define SALIERI_DEFINED_Write_guarded_by
1505 #endif
1506 
1507 /* Specifying When and Where an Annotation Applies
1508  *
1509  * https://msdn.microsoft.com/en-us/library/jj159526.aspx
1510  *****/
1511 
1512 #if defined(_At_) && defined(SALIERI_DEFINED_At)
1513 #  undef _At_
1514 #endif
1515 #if !defined(_At_)
1516 #  define _At_(expr, anno_list)
1517 #  define SALIERI_DEFINED_At
1518 #endif
1519 
1520 #if defined(_At_buffer_) && defined(SALIERI_DEFINED_At_buffer)
1521 #  undef _At_buffer_
1522 #endif
1523 #if !defined(_At_buffer_)
1524 #  define _At_buffer_(expr, iter, elem_count, anno_list)
1525 #  define SALIERI_DEFINED_At_buffer
1526 #endif
1527 
1528 #if defined(_Group_) && defined(SALIERI_DEFINED_Group)
1529 #  undef _Group_
1530 #endif
1531 #if !defined(_Group_)
1532 #  define _Group_(anno_list)
1533 #  define SALIERI_DEFINED_Group
1534 #endif
1535 
1536 #if defined(_When_) && defined(SALIERI_DEFINED_When)
1537 #  undef _When_
1538 #endif
1539 #if !defined(_When_)
1540 #  define _When_(expr, anno_list)
1541 #  define SALIERI_DEFINED_When
1542 #endif
1543 
1544 /* Intrinsic Functions
1545  *
1546  * https://msdn.microsoft.com/en-us/library/jj159527.aspx
1547  *****/
1548 
1549 /* General Purpose */
1550 
1551 #if defined(_Curr_) && defined(SALIERI_DEFINED_Curr)
1552 #  undef _Curr_
1553 #endif
1554 #if !defined(_Curr_)
1555 #  define _Curr_
1556 #  define SALIERI_DEFINED_Curr
1557 #endif
1558 
1559 #if defined(_Inexpressible_) && defined(SALIERI_DEFINED_Inexpressible)
1560 #  undef _Inexpressible_
1561 #endif
1562 #if !defined(_Inexpressible_)
1563 #  define _Inexpressible_(expr)
1564 #  define SALIERI_DEFINED_Inexpressible
1565 #endif
1566 
1567 #if defined(_Nullterm_length_) && defined(SALIERI_DEFINED_Nullterm_length)
1568 #  undef _Nullterm_length_
1569 #endif
1570 #if !defined(_Nullterm_length_)
1571 #  define _Nullterm_length_(param)
1572 #  define SALIERI_DEFINED_Nullterm_length
1573 #endif
1574 
1575 #if defined(_Old_) && defined(SALIERI_DEFINED_Old)
1576 #  undef _Old_
1577 #endif
1578 #if !defined(_Old_)
1579 #  define _Old_(expr)
1580 #  define SALIERI_DEFINED_Old
1581 #endif
1582 
1583 #if defined(_Param_) && defined(SALIERI_DEFINED_Param)
1584 #  undef _Param_
1585 #endif
1586 #if !defined(_Param_)
1587 #  define _Param_(n)
1588 #  define SALIERI_DEFINED_Param
1589 #endif
1590 
1591 /* String Specific */
1592 
1593 #if defined(_String_length_) && defined(SALIERI_DEFINED_String_length)
1594 #  undef _String_length_
1595 #endif
1596 #if !defined(_String_length_)
1597 #  define _String_length_(param)
1598 #  define SALIERI_DEFINED_String_length
1599 #endif
1600 
1601 #if defined(SALIERI_VERSION)
1602 #  undef SALIERI_VERSION
1603 #endif
1604 
1605 #define SALIERI_VERSION 1
1606 
1607 #endif /* !defined(SALIERI_VERSION) || (SALIERI_VERSION < X) */
1608