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