Browse Source

Merge branch 'master' of github.com:bkaradzic/bx

Branimir Karadžić 8 years ago
parent
commit
6aa467710b
2 changed files with 1600 additions and 891 deletions
  1. 1 891
      include/compat/mingw/sal.h
  2. 1599 0
      include/compat/mingw/salieri.h

+ 1 - 891
include/compat/mingw/sal.h

@@ -1,891 +1 @@
-#pragma once
-
-#if __GNUC__ >= 3
-#	pragma GCC system_header
-#endif
-
-#define __SAL_H_FULL_VER 1
-
-//#define __null // << Conflicts with GCC internal type __null
-#define __notnull
-#define __maybenull
-#define __readonly
-#define __notreadonly
-#define __maybereadonly
-#define __valid
-#define __notvalid
-#define __maybevalid
-#define __readableTo(extent)
-#define __elem_readableTo(size)
-#define __byte_readableTo(size)
-#define __writableTo(size)
-#define __elem_writableTo(size)
-#define __byte_writableTo(size)
-#define __deref
-#define __pre
-#define __post
-#define __precond(expr)
-#define __postcond(expr)
-#define __exceptthat
-#define __execeptthat
-#define __inner_success(expr)
-#define __inner_checkReturn __attribute__((warn_unused_result))
-#define __inner_typefix(ctype)
-#define __inner_override
-#define __inner_callback
-#define __inner_blocksOn(resource)
-#define __inner_fallthrough_dec
-#define __inner_fallthrough
-#define __refparam
-#define __inner_control_entrypoint(category)
-#define __inner_data_entrypoint(category)
-
-#define __ecount(size)
-#define __bcount(size)
-// #define __in // Conflicts with STL.
-#define __in_ecount(size)
-#define __in_bcount(size)
-#define __in_z
-#define __in_ecount_z(size)
-#define __in_bcount_z(size)
-#define __in_nz
-#define __in_ecount_nz(size)
-#define __in_bcount_nz(size)
-#define __in_xcount_opt(size)
-// #define __out // Conflicts with STL.
-#define __out_ecount(size)
-#define __out_bcount(size)
-#define __out_ecount_part(size,length)
-#define __out_bcount_part(size,length)
-#define __out_ecount_full(size)
-#define __out_bcount_full(size)
-#define __out_z
-#define __out_z_opt
-#define __out_ecount_z(size)
-#define __out_bcount_z(size)
-#define __out_ecount_part_z(size,length)
-#define __out_bcount_part_z(size,length)
-#define __out_ecount_full_z(size)
-#define __out_bcount_full_z(size)
-#define __out_nz
-#define __out_nz_opt
-#define __out_ecount_nz(size)
-#define __out_bcount_nz(size)
-#define __inout
-#define __inout_ecount(size)
-#define __inout_bcount(size)
-#define __inout_ecount_part(size,length)
-#define __inout_bcount_part(size,length)
-#define __inout_ecount_full(size)
-#define __inout_bcount_full(size)
-#define __inout_z
-#define __inout_ecount_z(size)
-#define __inout_bcount_z(size)
-#define __inout_nz
-#define __inout_ecount_nz(size)
-#define __inout_bcount_nz(size)
-#define __ecount_opt(size)
-#define __bcount_opt(size)
-#define __in_opt
-#define __in_ecount_opt(size)
-#define __in_bcount_opt(size)
-#define __in_z_opt
-#define __in_ecount_z_opt(size)
-#define __in_bcount_z_opt(size)
-#define __in_nz_opt
-#define __in_ecount_nz_opt(size)
-#define __in_bcount_nz_opt(size)
-#define __out_opt
-#define __out_ecount_opt(size)
-#define __out_bcount_opt(size)
-#define __out_ecount_part_opt(size,length)
-#define __out_bcount_part_opt(size,length)
-#define __out_ecount_full_opt(size)
-#define __out_bcount_full_opt(size)
-#define __out_ecount_z_opt(size)
-#define __out_bcount_z_opt(size)
-#define __out_ecount_part_z_opt(size,length)
-#define __out_bcount_part_z_opt(size,length)
-#define __out_ecount_full_z_opt(size)
-#define __out_bcount_full_z_opt(size)
-#define __out_ecount_nz_opt(size)
-#define __out_bcount_nz_opt(size)
-#define __inout_opt
-#define __inout_ecount_opt(size)
-#define __inout_bcount_opt(size)
-#define __inout_ecount_part_opt(size,length)
-#define __inout_bcount_part_opt(size,length)
-#define __inout_ecount_full_opt(size)
-#define __inout_bcount_full_opt(size)
-#define __inout_z_opt
-#define __inout_ecount_z_opt(size)
-#define __inout_ecount_z_opt(size)
-#define __inout_bcount_z_opt(size)
-#define __inout_nz_opt
-#define __inout_ecount_nz_opt(size)
-#define __inout_bcount_nz_opt(size)
-#define __deref_ecount(size)
-#define __deref_bcount(size)
-#define __deref_out
-#define __deref_out_ecount(size)
-#define __deref_out_bcount(size)
-#define __deref_out_ecount_part(size,length)
-#define __deref_out_bcount_part(size,length)
-#define __deref_out_ecount_full(size)
-#define __deref_out_bcount_full(size)
-#define __deref_out_z
-#define __deref_out_ecount_z(size)
-#define __deref_out_bcount_z(size)
-#define __deref_out_nz
-#define __deref_out_ecount_nz(size)
-#define __deref_out_bcount_nz(size)
-#define __deref_inout
-#define __deref_inout_z
-#define __deref_inout_ecount(size)
-#define __deref_inout_bcount(size)
-#define __deref_inout_ecount_part(size,length)
-#define __deref_inout_bcount_part(size,length)
-#define __deref_inout_ecount_full(size)
-#define __deref_inout_bcount_full(size)
-#define __deref_inout_z
-#define __deref_inout_ecount_z(size)
-#define __deref_inout_bcount_z(size)
-#define __deref_inout_nz
-#define __deref_inout_ecount_nz(size)
-#define __deref_inout_bcount_nz(size)
-#define __deref_ecount_opt(size)
-#define __deref_bcount_opt(size)
-#define __deref_out_opt
-#define __deref_out_ecount_opt(size)
-#define __deref_out_bcount_opt(size)
-#define __deref_out_ecount_part_opt(size,length)
-#define __deref_out_bcount_part_opt(size,length)
-#define __deref_out_ecount_full_opt(size)
-#define __deref_out_bcount_full_opt(size)
-#define __deref_out_z_opt
-#define __deref_out_ecount_z_opt(size)
-#define __deref_out_bcount_z_opt(size)
-#define __deref_out_nz_opt
-#define __deref_out_ecount_nz_opt(size)
-#define __deref_out_bcount_nz_opt(size)
-#define __deref_inout_opt
-#define __deref_inout_ecount_opt(size)
-#define __deref_inout_bcount_opt(size)
-#define __deref_inout_ecount_part_opt(size,length)
-#define __deref_inout_bcount_part_opt(size,length)
-#define __deref_inout_ecount_full_opt(size)
-#define __deref_inout_bcount_full_opt(size)
-#define __deref_inout_z_opt
-#define __deref_inout_ecount_z_opt(size)
-#define __deref_inout_bcount_z_opt(size)
-#define __deref_inout_nz_opt
-#define __deref_inout_ecount_nz_opt(size)
-#define __deref_inout_bcount_nz_opt(size)
-#define __deref_opt_ecount(size)
-#define __deref_opt_bcount(size)
-#define __deref_opt_out
-#define __deref_opt_out_z
-#define __deref_opt_out_ecount(size)
-#define __deref_opt_out_bcount(size)
-#define __deref_opt_out_ecount_part(size,length)
-#define __deref_opt_out_bcount_part(size,length)
-#define __deref_opt_out_ecount_full(size)
-#define __deref_opt_out_bcount_full(size)
-#define __deref_opt_inout
-#define __deref_opt_inout_ecount(size)
-#define __deref_opt_inout_bcount(size)
-#define __deref_opt_inout_ecount_part(size,length)
-#define __deref_opt_inout_bcount_part(size,length)
-#define __deref_opt_inout_ecount_full(size)
-#define __deref_opt_inout_bcount_full(size)
-#define __deref_opt_inout_z
-#define __deref_opt_inout_ecount_z(size)
-#define __deref_opt_inout_bcount_z(size)
-#define __deref_opt_inout_nz
-#define __deref_opt_inout_ecount_nz(size)
-#define __deref_opt_inout_bcount_nz(size)
-#define __deref_opt_ecount_opt(size)
-#define __deref_opt_bcount_opt(size)
-#define __deref_opt_out_opt
-#define __deref_opt_out_ecount_opt(size)
-#define __deref_opt_out_bcount_opt(size)
-#define __deref_opt_out_ecount_part_opt(size,length)
-#define __deref_opt_out_bcount_part_opt(size,length)
-#define __deref_opt_out_ecount_full_opt(size)
-#define __deref_opt_out_bcount_full_opt(size)
-#define __deref_opt_out_z_opt
-#define __deref_opt_out_ecount_z_opt(size)
-#define __deref_opt_out_bcount_z_opt(size)
-#define __deref_opt_out_nz_opt
-#define __deref_opt_out_ecount_nz_opt(size)
-#define __deref_opt_out_bcount_nz_opt(size)
-#define __deref_opt_inout_opt
-#define __deref_opt_inout_ecount_opt(size)
-#define __deref_opt_inout_bcount_opt(size)
-#define __deref_opt_inout_ecount_part_opt(size,length)
-#define __deref_opt_inout_bcount_part_opt(size,length)
-#define __deref_opt_inout_ecount_full_opt(size)
-#define __deref_opt_inout_bcount_full_opt(size)
-#define __deref_opt_inout_z_opt
-#define __deref_opt_inout_ecount_z_opt(size)
-#define __deref_opt_inout_bcount_z_opt(size)
-#define __deref_opt_inout_nz_opt
-#define __deref_opt_inout_ecount_nz_opt(size)
-#define __deref_opt_inout_bcount_nz_opt(size)
-
-#define __success(expr)
-#define __nullterminated
-#define __nullnullterminated
-#define __reserved
-#define __checkReturn __inner_checkReturn
-#define __typefix(ctype)
-#define __override
-#define __callback
-#define __format_string
-#define __blocksOn(resource)
-#define __control_entrypoint(category)
-#define __data_entrypoint(category)
-
-#define _Always_(annos)
-#define _Analysis_noreturn_
-#define _Analysis_assume_(expr)
-#define _At_(target, annos)
-#define _At_buffer_(target, iter, bound, annos)
-#define _COM_Outptr_
-#define _COM_Outptr_opt_
-#define _COM_Outptr_opt_result_maybenull_
-#define _COM_Outptr_result_maybenull_
-#define _Check_return_
-#define _Const_
-#define _Deref2_pre_readonly_
-#define _Deref_in_bound_
-#define _Deref_in_range_(lb,ub)
-#define _Deref_inout_bound_
-#define _Deref_inout_z_
-#define _Deref_inout_z_bytecap_c_(size)
-#define _Deref_inout_z_cap_c_(size)
-#define _Deref_opt_out_
-#define _Deref_opt_out_opt_
-#define _Deref_opt_out_opt_z_
-#define _Deref_opt_out_z_
-#define _Deref_out_
-#define _Deref_out_bound_
-#define _Deref_out_opt_
-#define _Deref_out_opt_z_
-#define _Deref_out_range_(lb,ub)
-#define _Deref_out_z_
-#define _Deref_out_z_bytecap_c_(size)
-#define _Deref_out_z_cap_c_(size)
-#define _Deref_post_bytecap_(size)
-#define _Deref_post_bytecap_c_(size)
-#define _Deref_post_bytecap_x_(size)
-#define _Deref_post_bytecount_(size)
-#define _Deref_post_bytecount_c_(size)
-#define _Deref_post_bytecount_x_(size)
-#define _Deref_post_cap_(size)
-#define _Deref_post_cap_c_(size)
-#define _Deref_post_cap_x_(size)
-#define _Deref_post_count_(size)
-#define _Deref_post_count_c_(size)
-#define _Deref_post_count_x_(size)
-#define _Deref_post_maybenull_
-#define _Deref_post_notnull_
-#define _Deref_post_null_
-#define _Deref_post_opt_bytecap_(size)
-#define _Deref_post_opt_bytecap_c_(size)
-#define _Deref_post_opt_bytecap_x_(size)
-#define _Deref_post_opt_bytecount_(size)
-#define _Deref_post_opt_bytecount_c_(size)
-#define _Deref_post_opt_bytecount_x_(size)
-#define _Deref_post_opt_cap_(size)
-#define _Deref_post_opt_cap_c_(size)
-#define _Deref_post_opt_cap_x_(size)
-#define _Deref_post_opt_count_(size)
-#define _Deref_post_opt_count_c_(size)
-#define _Deref_post_opt_count_x_(size)
-#define _Deref_post_opt_valid_
-#define _Deref_post_opt_valid_bytecap_(size)
-#define _Deref_post_opt_valid_bytecap_c_(size)
-#define _Deref_post_opt_valid_bytecap_x_(size)
-#define _Deref_post_opt_valid_cap_(size)
-#define _Deref_post_opt_valid_cap_c_(size)
-#define _Deref_post_opt_valid_cap_x_(size)
-#define _Deref_post_opt_z_
-#define _Deref_post_opt_z_bytecap_(size)
-#define _Deref_post_opt_z_bytecap_c_(size)
-#define _Deref_post_opt_z_bytecap_x_(size)
-#define _Deref_post_opt_z_cap_(size)
-#define _Deref_post_opt_z_cap_c_(size)
-#define _Deref_post_opt_z_cap_x_(size)
-#define _Deref_post_valid_
-#define _Deref_post_valid_bytecap_(size)
-#define _Deref_post_valid_bytecap_c_(size)
-#define _Deref_post_valid_bytecap_x_(size)
-#define _Deref_post_valid_cap_(size)
-#define _Deref_post_valid_cap_c_(size)
-#define _Deref_post_valid_cap_x_(size)
-#define _Deref_post_z_
-#define _Deref_post_z_bytecap_(size)
-#define _Deref_post_z_bytecap_c_(size)
-#define _Deref_post_z_bytecap_x_(size)
-#define _Deref_post_z_cap_(size)
-#define _Deref_post_z_cap_c_(size)
-#define _Deref_post_z_cap_x_(size)
-#define _Deref_pre_bytecap_(size)
-#define _Deref_pre_bytecap_c_(size)
-#define _Deref_pre_bytecap_x_(size)
-#define _Deref_pre_bytecount_(size)
-#define _Deref_pre_bytecount_c_(size)
-#define _Deref_pre_bytecount_x_(size)
-#define _Deref_pre_cap_(size)
-#define _Deref_pre_cap_c_(size)
-#define _Deref_pre_cap_x_(size)
-#define _Deref_pre_count_(size)
-#define _Deref_pre_count_c_(size)
-#define _Deref_pre_count_x_(size)
-#define _Deref_pre_invalid_
-#define _Deref_pre_maybenull_
-#define _Deref_pre_notnull_
-#define _Deref_pre_null_
-#define _Deref_pre_opt_bytecap_(size)
-#define _Deref_pre_opt_bytecap_c_(size)
-#define _Deref_pre_opt_bytecap_x_(size)
-#define _Deref_pre_opt_bytecount_(size)
-#define _Deref_pre_opt_bytecount_c_(size)
-#define _Deref_pre_opt_bytecount_x_(size)
-#define _Deref_pre_opt_cap_(size)
-#define _Deref_pre_opt_cap_c_(size)
-#define _Deref_pre_opt_cap_x_(size)
-#define _Deref_pre_opt_count_(size)
-#define _Deref_pre_opt_count_c_(size)
-#define _Deref_pre_opt_count_x_(size)
-#define _Deref_pre_opt_valid_
-#define _Deref_pre_opt_valid_bytecap_(size)
-#define _Deref_pre_opt_valid_bytecap_c_(size)
-#define _Deref_pre_opt_valid_bytecap_x_(size)
-#define _Deref_pre_opt_valid_cap_(size)
-#define _Deref_pre_opt_valid_cap_c_(size)
-#define _Deref_pre_opt_valid_cap_x_(size)
-#define _Deref_pre_opt_z_
-#define _Deref_pre_opt_z_bytecap_(size)
-#define _Deref_pre_opt_z_bytecap_c_(size)
-#define _Deref_pre_opt_z_bytecap_x_(size)
-#define _Deref_pre_opt_z_cap_(size)
-#define _Deref_pre_opt_z_cap_c_(size)
-#define _Deref_pre_opt_z_cap_x_(size)
-#define _Deref_pre_readonly_
-#define _Deref_pre_valid_
-#define _Deref_pre_valid_bytecap_(size)
-#define _Deref_pre_valid_bytecap_c_(size)
-#define _Deref_pre_valid_bytecap_x_(size)
-#define _Deref_pre_valid_cap_(size)
-#define _Deref_pre_valid_cap_c_(size)
-#define _Deref_pre_valid_cap_x_(size)
-#define _Deref_pre_writeonly_
-#define _Deref_pre_z_
-#define _Deref_pre_z_bytecap_(size)
-#define _Deref_pre_z_bytecap_c_(size)
-#define _Deref_pre_z_bytecap_x_(size)
-#define _Deref_pre_z_cap_(size)
-#define _Deref_pre_z_cap_c_(size)
-#define _Deref_pre_z_cap_x_(size)
-#define _Deref_prepost_bytecap_(size)
-#define _Deref_prepost_bytecap_x_(size)
-#define _Deref_prepost_bytecount_(size)
-#define _Deref_prepost_bytecount_x_(size)
-#define _Deref_prepost_cap_(size)
-#define _Deref_prepost_cap_x_(size)
-#define _Deref_prepost_count_(size)
-#define _Deref_prepost_count_x_(size)
-#define _Deref_prepost_opt_bytecap_(size)
-#define _Deref_prepost_opt_bytecap_x_(size)
-#define _Deref_prepost_opt_bytecount_(size)
-#define _Deref_prepost_opt_bytecount_x_(size)
-#define _Deref_prepost_opt_cap_(size)
-#define _Deref_prepost_opt_cap_x_(size)
-#define _Deref_prepost_opt_count_(size)
-#define _Deref_prepost_opt_count_x_(size)
-#define _Deref_prepost_opt_valid_
-#define _Deref_prepost_opt_valid_bytecap_(size)
-#define _Deref_prepost_opt_valid_bytecap_x_(size)
-#define _Deref_prepost_opt_valid_cap_(size)
-#define _Deref_prepost_opt_valid_cap_x_(size)
-#define _Deref_prepost_opt_z_
-#define _Deref_prepost_opt_z_bytecap_(size)
-#define _Deref_prepost_opt_z_cap_(size)
-#define _Deref_prepost_valid_
-#define _Deref_prepost_valid_bytecap_(size)
-#define _Deref_prepost_valid_bytecap_x_(size)
-#define _Deref_prepost_valid_cap_(size)
-#define _Deref_prepost_valid_cap_x_(size)
-#define _Deref_prepost_z_
-#define _Deref_prepost_z_bytecap_(size)
-#define _Deref_prepost_z_cap_(size)
-#define _Deref_ret_bound_
-#define _Deref_ret_opt_z_
-#define _Deref_ret_range_(lb,ub)
-#define _Deref_ret_z_
-#define _Field_range_(min,max)
-#define _Field_size_(size)
-#define _Field_size_bytes_(size)
-#define _Field_size_bytes_full_(size)
-#define _Field_size_bytes_full_opt_(size)
-#define _Field_size_bytes_opt_(size)
-#define _Field_size_bytes_part_(size, count)
-#define _Field_size_bytes_part_opt_(size, count)
-#define _Field_size_full_(size)
-#define _Field_size_full_opt_(size)
-#define _Field_size_opt_(size)
-#define _Field_size_part_(size, count)
-#define _Field_size_part_opt_(size, count)
-#define _Field_z_
-#define _Function_class_(x)
-#define _Group_(annos)
-#define _In_
-#define _In_bound_
-#define _In_bytecount_(size)
-#define _In_bytecount_c_(size)
-#define _In_bytecount_x_(size)
-#define _In_count_(size)
-#define _In_count_c_(size)
-#define _In_count_x_(size)
-#define _In_defensive_(annotes)
-#define _In_opt_
-#define _In_opt_bytecount_(size)
-#define _In_opt_bytecount_c_(size)
-#define _In_opt_bytecount_x_(size)
-#define _In_opt_count_(size)
-#define _In_opt_count_c_(size)
-#define _In_opt_count_x_(size)
-#define _In_opt_ptrdiff_count_(size)
-#define _In_opt_z_
-#define _In_opt_z_bytecount_(size)
-#define _In_opt_z_bytecount_c_(size)
-#define _In_opt_z_count_(size)
-#define _In_opt_z_count_c_(size)
-#define _In_ptrdiff_count_(size)
-#define _In_range_(lb,ub)
-#define _In_reads_(size)
-#define _In_reads_bytes_(size)
-#define _In_reads_bytes_opt_(size)
-#define _In_reads_opt_(size)
-#define _In_reads_opt_z_(size)
-#define _In_reads_or_z_(size)
-#define _In_reads_to_ptr_(ptr)
-#define _In_reads_to_ptr_opt_(ptr)
-#define _In_reads_to_ptr_opt_z_(ptr)
-#define _In_reads_to_ptr_z_(ptr)
-#define _In_reads_z_(size)
-#define _In_z_
-#define _In_z_bytecount_(size)
-#define _In_z_bytecount_c_(size)
-#define _In_z_count_(size)
-#define _In_z_count_c_(size)
-#define _Inout_
-#define _Inout_bytecap_(size)
-#define _Inout_bytecap_c_(size)
-#define _Inout_bytecap_x_(size)
-#define _Inout_bytecount_(size)
-#define _Inout_bytecount_c_(size)
-#define _Inout_bytecount_x_(size)
-#define _Inout_cap_(size)
-#define _Inout_cap_c_(size)
-#define _Inout_cap_x_(size)
-#define _Inout_count_(size)
-#define _Inout_count_c_(size)
-#define _Inout_count_x_(size)
-#define _Inout_defensive_(annotes)
-#define _Inout_opt_
-#define _Inout_opt_bytecap_(size)
-#define _Inout_opt_bytecap_c_(size)
-#define _Inout_opt_bytecap_x_(size)
-#define _Inout_opt_bytecount_(size)
-#define _Inout_opt_bytecount_c_(size)
-#define _Inout_opt_bytecount_x_(size)
-#define _Inout_opt_cap_(size)
-#define _Inout_opt_cap_c_(size)
-#define _Inout_opt_cap_x_(size)
-#define _Inout_opt_count_(size)
-#define _Inout_opt_count_c_(size)
-#define _Inout_opt_count_x_(size)
-#define _Inout_opt_ptrdiff_count_(size)
-#define _Inout_opt_z_
-#define _Inout_opt_z_bytecap_(size)
-#define _Inout_opt_z_bytecap_c_(size)
-#define _Inout_opt_z_bytecap_x_(size)
-#define _Inout_opt_z_bytecount_(size)
-#define _Inout_opt_z_bytecount_c_(size)
-#define _Inout_opt_z_cap_(size)
-#define _Inout_opt_z_cap_c_(size)
-#define _Inout_opt_z_cap_x_(size)
-#define _Inout_opt_z_count_(size)
-#define _Inout_opt_z_count_c_(size)
-#define _Inout_ptrdiff_count_(size)
-#define _Inout_updates_(size)
-#define _Inout_updates_all_(size)
-#define _Inout_updates_all_opt_(size)
-#define _Inout_updates_bytes_(size)
-#define _Inout_updates_bytes_all_(size)
-#define _Inout_updates_bytes_all_opt_(size)
-#define _Inout_updates_bytes_opt_(size)
-#define _Inout_updates_bytes_to_(size,count)
-#define _Inout_updates_bytes_to_opt_(size,count)
-#define _Inout_updates_opt_(size)
-#define _Inout_updates_opt_z_(size)
-#define _Inout_updates_to_(size,count)
-#define _Inout_updates_to_opt_(size,count)
-#define _Inout_updates_z_(size)
-#define _Inout_z_
-#define _Inout_z_bytecap_(size)
-#define _Inout_z_bytecap_c_(size)
-#define _Inout_z_bytecap_x_(size)
-#define _Inout_z_bytecount_(size)
-#define _Inout_z_bytecount_c_(size)
-#define _Inout_z_cap_(size)
-#define _Inout_z_cap_c_(size)
-#define _Inout_z_cap_x_(size)
-#define _Inout_z_count_(size)
-#define _Inout_z_count_c_(size)
-#define _Interlocked_operand_
-#define _Literal_
-#define _Maybe_raises_SEH_exception
-#define _Maybe_raises_SEH_exception_
-#define _Maybenull_
-#define _Maybevalid_
-#define _Must_inspect_result_
-#define _Notliteral_
-#define _Notnull_
-#define _Notref_
-#define _Notvalid_
-#define _NullNull_terminated_
-#define _Null_
-#define _Null_terminated_
-#define _On_failure_(annos)
-#define _Out_
-#define _Out_bound_
-#define _Out_bytecap_(size)
-#define _Out_bytecap_c_(size)
-#define _Out_bytecap_post_bytecount_(cap,count)
-#define _Out_bytecap_x_(size)
-#define _Out_bytecapcount_(capcount)
-#define _Out_bytecapcount_x_(capcount)
-#define _Out_cap_(size)
-#define _Out_cap_c_(size)
-#define _Out_cap_m_(mult,size)
-#define _Out_cap_post_count_(cap,count)
-#define _Out_cap_x_(size)
-#define _Out_capcount_(capcount)
-#define _Out_capcount_x_(capcount)
-#define _Out_defensive_(annotes)
-#define _Out_opt_
-#define _Out_opt_bytecap_(size)
-#define _Out_opt_bytecap_c_(size)
-#define _Out_opt_bytecap_post_bytecount_(cap,count)
-#define _Out_opt_bytecap_x_(size)
-#define _Out_opt_bytecapcount_(capcount)
-#define _Out_opt_bytecapcount_x_(capcount)
-#define _Out_opt_cap_(size)
-#define _Out_opt_cap_c_(size)
-#define _Out_opt_cap_m_(mult,size)
-#define _Out_opt_cap_post_count_(cap,count)
-#define _Out_opt_cap_x_(size)
-#define _Out_opt_capcount_(capcount)
-#define _Out_opt_capcount_x_(capcount)
-#define _Out_opt_ptrdiff_cap_(size)
-#define _Out_opt_z_bytecap_(size)
-#define _Out_opt_z_bytecap_c_(size)
-#define _Out_opt_z_bytecap_post_bytecount_(cap,count)
-#define _Out_opt_z_bytecap_x_(size)
-#define _Out_opt_z_bytecapcount_(capcount)
-#define _Out_opt_z_cap_(size)
-#define _Out_opt_z_cap_c_(size)
-#define _Out_opt_z_cap_m_(mult,size)
-#define _Out_opt_z_cap_post_count_(cap,count)
-#define _Out_opt_z_cap_x_(size)
-#define _Out_opt_z_capcount_(capcount)
-#define _Out_ptrdiff_cap_(size)
-#define _Out_range_(lb,ub)
-#define _Out_writes_(size)
-#define _Out_writes_all_(size)
-#define _Out_writes_all_opt_(size)
-#define _Out_writes_bytes_(size)
-#define _Out_writes_bytes_all_(size)
-#define _Out_writes_bytes_all_opt_(size)
-#define _Out_writes_bytes_opt_(size)
-#define _Out_writes_bytes_to_(size,count)
-#define _Out_writes_bytes_to_opt_(size,count)
-#define _Out_writes_opt_(size)
-#define _Out_writes_opt_z_(size)
-#define _Out_writes_to_(size,count)
-#define _Out_writes_to_opt_(size,count)
-#define _Out_writes_to_ptr_(ptr)
-#define _Out_writes_to_ptr_opt_(ptr)
-#define _Out_writes_to_ptr_opt_z_(ptr)
-#define _Out_writes_to_ptr_z_(ptr)
-#define _Out_writes_z_(size)
-#define _Out_z_bytecap_(size)
-#define _Out_z_bytecap_c_(size)
-#define _Out_z_bytecap_post_bytecount_(cap,count)
-#define _Out_z_bytecap_x_(size)
-#define _Out_z_bytecapcount_(capcount)
-#define _Out_z_cap_(size)
-#define _Out_z_cap_c_(size)
-#define _Out_z_cap_m_(mult,size)
-#define _Out_z_cap_post_count_(cap,count)
-#define _Out_z_cap_x_(size)
-#define _Out_z_capcount_(capcount)
-#define _Outptr_
-#define _Outptr_opt_
-#define _Outptr_opt_result_buffer_(size)
-#define _Outptr_opt_result_buffer_all_(size)
-#define _Outptr_opt_result_buffer_all_maybenull_(size)
-#define _Outptr_opt_result_buffer_maybenull_(size)
-#define _Outptr_opt_result_buffer_to_(size, count)
-#define _Outptr_opt_result_buffer_to_maybenull_(size, count)
-#define _Outptr_opt_result_bytebuffer_(size)
-#define _Outptr_opt_result_bytebuffer_all_(size)
-#define _Outptr_opt_result_bytebuffer_all_maybenull_(size)
-#define _Outptr_opt_result_bytebuffer_maybenull_(size)
-#define _Outptr_opt_result_bytebuffer_to_(size, count)
-#define _Outptr_opt_result_bytebuffer_to_maybenull_(size, count)
-#define _Outptr_opt_result_maybenull_
-#define _Outptr_opt_result_maybenull_z_
-#define _Outptr_opt_result_nullonfailure_
-#define _Outptr_opt_result_z_
-#define _Outptr_result_buffer_(size)
-#define _Outptr_result_buffer_all_(size)
-#define _Outptr_result_buffer_all_maybenull_(size)
-#define _Outptr_result_buffer_maybenull_(size)
-#define _Outptr_result_buffer_to_(size, count)
-#define _Outptr_result_buffer_to_maybenull_(size, count)
-#define _Outptr_result_bytebuffer_(size)
-#define _Outptr_result_bytebuffer_all_(size)
-#define _Outptr_result_bytebuffer_all_maybenull_(size)
-#define _Outptr_result_bytebuffer_maybenull_(size)
-#define _Outptr_result_bytebuffer_to_(size, count)
-#define _Outptr_result_bytebuffer_to_maybenull_(size, count)
-#define _Outptr_result_maybenull_
-#define _Outptr_result_maybenull_z_
-#define _Outptr_result_nullonfailure_
-#define _Outptr_result_z_
-#define _Outref_
-#define _Outref_result_buffer_(size)
-#define _Outref_result_buffer_all_(size)
-#define _Outref_result_buffer_all_maybenull_(size)
-#define _Outref_result_buffer_maybenull_(size)
-#define _Outref_result_buffer_to_(size, count)
-#define _Outref_result_buffer_to_maybenull_(size, count)
-#define _Outref_result_bytebuffer_(size)
-#define _Outref_result_bytebuffer_all_(size)
-#define _Outref_result_bytebuffer_all_maybenull_(size)
-#define _Outref_result_bytebuffer_maybenull_(size)
-#define _Outref_result_bytebuffer_to_(size, count)
-#define _Outref_result_bytebuffer_to_maybenull_(size, count)
-#define _Outref_result_maybenull_
-#define _Outref_result_nullonfailure_
-#define _Points_to_data_
-#define _Post_
-#define _Post_bytecap_(size)
-#define _Post_bytecount_(size)
-#define _Post_bytecount_c_(size)
-#define _Post_bytecount_x_(size)
-#define _Post_cap_(size)
-#define _Post_count_(size)
-#define _Post_count_c_(size)
-#define _Post_count_x_(size)
-#define _Post_defensive_
-#define _Post_equal_to_(expr)
-#define _Post_invalid_
-#define _Post_maybenull_
-#define _Post_maybez_
-#define _Post_notnull_
-#define _Post_null_
-#define _Post_ptr_invalid_
-#define _Post_readable_byte_size_(size)
-#define _Post_readable_size_(size)
-#define _Post_satisfies_(cond)
-#define _Post_valid_
-#define _Post_writable_byte_size_(size)
-#define _Post_writable_size_(size)
-#define _Post_z_
-#define _Post_z_bytecount_(size)
-#define _Post_z_bytecount_c_(size)
-#define _Post_z_bytecount_x_(size)
-#define _Post_z_count_(size)
-#define _Post_z_count_c_(size)
-#define _Post_z_count_x_(size)
-#define _Pre_
-#define _Pre_bytecap_(size)
-#define _Pre_bytecap_c_(size)
-#define _Pre_bytecap_x_(size)
-#define _Pre_bytecount_(size)
-#define _Pre_bytecount_c_(size)
-#define _Pre_bytecount_x_(size)
-#define _Pre_cap_(size)
-#define _Pre_cap_c_(size)
-#define _Pre_cap_c_one_
-#define _Pre_cap_for_(param)
-#define _Pre_cap_m_(mult,size)
-#define _Pre_cap_x_(size)
-#define _Pre_count_(size)
-#define _Pre_count_c_(size)
-#define _Pre_count_x_(size)
-#define _Pre_defensive_
-#define _Pre_equal_to_(expr)
-#define _Pre_invalid_
-#define _Pre_maybenull_
-#define _Pre_notnull_
-#define _Pre_null_
-#define _Pre_opt_bytecap_(size)
-#define _Pre_opt_bytecap_c_(size)
-#define _Pre_opt_bytecap_x_(size)
-#define _Pre_opt_bytecount_(size)
-#define _Pre_opt_bytecount_c_(size)
-#define _Pre_opt_bytecount_x_(size)
-#define _Pre_opt_cap_(size)
-#define _Pre_opt_cap_c_(size)
-#define _Pre_opt_cap_c_one_
-#define _Pre_opt_cap_for_(param)
-#define _Pre_opt_cap_m_(mult,size)
-#define _Pre_opt_cap_x_(size)
-#define _Pre_opt_count_(size)
-#define _Pre_opt_count_c_(size)
-#define _Pre_opt_count_x_(size)
-#define _Pre_opt_ptrdiff_cap_(ptr)
-#define _Pre_opt_ptrdiff_count_(ptr)
-#define _Pre_opt_valid_
-#define _Pre_opt_valid_bytecap_(size)
-#define _Pre_opt_valid_bytecap_c_(size)
-#define _Pre_opt_valid_bytecap_x_(size)
-#define _Pre_opt_valid_cap_(size)
-#define _Pre_opt_valid_cap_c_(size)
-#define _Pre_opt_valid_cap_x_(size)
-#define _Pre_opt_z_
-#define _Pre_opt_z_bytecap_(size)
-#define _Pre_opt_z_bytecap_c_(size)
-#define _Pre_opt_z_bytecap_x_(size)
-#define _Pre_opt_z_cap_(size)
-#define _Pre_opt_z_cap_c_(size)
-#define _Pre_opt_z_cap_x_(size)
-#define _Pre_ptrdiff_cap_(ptr)
-#define _Pre_ptrdiff_count_(ptr)
-#define _Pre_readable_byte_size_(size)
-#define _Pre_readable_size_(size)
-#define _Pre_readonly_
-#define _Pre_satisfies_(cond)
-#define _Pre_valid_
-#define _Pre_valid_bytecap_(size)
-#define _Pre_valid_bytecap_c_(size)
-#define _Pre_valid_bytecap_x_(size)
-#define _Pre_valid_cap_(size)
-#define _Pre_valid_cap_c_(size)
-#define _Pre_valid_cap_x_(size)
-#define _Pre_writable_byte_size_(size)
-#define _Pre_writable_size_(size)
-#define _Pre_writeonly_
-#define _Pre_z_
-#define _Pre_z_bytecap_(size)
-#define _Pre_z_bytecap_c_(size)
-#define _Pre_z_bytecap_x_(size)
-#define _Pre_z_cap_(size)
-#define _Pre_z_cap_c_(size)
-#define _Pre_z_cap_x_(size)
-#define _Prepost_bytecount_(size)
-#define _Prepost_bytecount_c_(size)
-#define _Prepost_bytecount_x_(size)
-#define _Prepost_count_(size)
-#define _Prepost_count_c_(size)
-#define _Prepost_count_x_(size)
-#define _Prepost_opt_bytecount_(size)
-#define _Prepost_opt_bytecount_c_(size)
-#define _Prepost_opt_bytecount_x_(size)
-#define _Prepost_opt_count_(size)
-#define _Prepost_opt_count_c_(size)
-#define _Prepost_opt_count_x_(size)
-#define _Prepost_opt_valid_
-#define _Prepost_opt_z_
-#define _Prepost_valid_
-#define _Prepost_z_
-#define _Printf_format_string_
-#define _Raises_SEH_exception_
-#define _Readable_bytes_(size)
-#define _Readable_elements_(size)
-#define _Reserved_
-#define _Result_nullonfailure_
-#define _Result_zeroonfailure_
-#define _Ret_
-#define _Ret_bound_
-#define _Ret_bytecap_(size)
-#define _Ret_bytecap_c_(size)
-#define _Ret_bytecap_x_(size)
-#define _Ret_bytecount_(size)
-#define _Ret_bytecount_c_(size)
-#define _Ret_bytecount_x_(size)
-#define _Ret_cap_(size)
-#define _Ret_cap_c_(size)
-#define _Ret_cap_x_(size)
-#define _Ret_count_(size)
-#define _Ret_count_c_(size)
-#define _Ret_count_x_(size)
-#define _Ret_maybenull_
-#define _Ret_maybenull_z_
-#define _Ret_notnull_
-#define _Ret_null_
-#define _Ret_opt_
-#define _Ret_opt_bytecap_(size)
-#define _Ret_opt_bytecap_c_(size)
-#define _Ret_opt_bytecap_x_(size)
-#define _Ret_opt_bytecount_(size)
-#define _Ret_opt_bytecount_c_(size)
-#define _Ret_opt_bytecount_x_(size)
-#define _Ret_opt_cap_(size)
-#define _Ret_opt_cap_c_(size)
-#define _Ret_opt_cap_x_(size)
-#define _Ret_opt_count_(size)
-#define _Ret_opt_count_c_(size)
-#define _Ret_opt_count_x_(size)
-#define _Ret_opt_valid_
-#define _Ret_opt_z_
-#define _Ret_opt_z_bytecap_(size)
-#define _Ret_opt_z_bytecount_(size)
-#define _Ret_opt_z_cap_(size)
-#define _Ret_opt_z_count_(size)
-#define _Ret_range_(lb,ub)
-#define _Ret_valid_
-#define _Ret_writes_(size)
-#define _Ret_writes_bytes_(size)
-#define _Ret_writes_bytes_maybenull_(size)
-#define _Ret_writes_bytes_to_(size,count)
-#define _Ret_writes_bytes_to_maybenull_(size,count)
-#define _Ret_writes_maybenull_(size)
-#define _Ret_writes_maybenull_z_(size)
-#define _Ret_writes_to_(size,count)
-#define _Ret_writes_to_maybenull_(size,count)
-#define _Ret_writes_z_(size)
-#define _Ret_z_
-#define _Ret_z_bytecap_(size)
-#define _Ret_z_bytecount_(size)
-#define _Ret_z_cap_(size)
-#define _Ret_z_count_(size)
-#define _Return_type_success_(expr)
-#define _Scanf_format_string_
-#define _Scanf_s_format_string_
-#define _Struct_size_bytes_(size)
-#define _Success_(expr)
-#define _Unchanged_(e)
-#define _Use_decl_annotations_
-#define _Valid_
-#define _When_(expr, annos)
-#define _Writable_bytes_(size)
-#define _Writable_elements_(size)
-#define __inner_callback
-#define __inner_exceptthat
-#define __inner_typefix(ctype)
-
-#ifndef __fallthrough
-#	define __fallthrough __inner_fallthrough
-#endif
-
-#ifndef __analysis_assume
-#	define __analysis_assume(expr)
-#endif
+#include "salieri.h"

+ 1599 - 0
include/compat/mingw/salieri.h

@@ -0,0 +1,1599 @@
+/**
+ * Salieri
+ * v1
+ *
+ * Salieri is a header which contains definitions for the Microsoft
+ * source-code annotation language (SAL).  It is *not* an
+ * implementation of SAL; that's for compilers and static analyzers.
+ * For the most part we just define macros to nothing.
+ *
+ * The goal is to allow projects to use SAL without creating a hard
+ * dependency on it (i.e., you can still use compilers other than
+ * MSVC).  Simply include `salieri.h`, which you can/should distribute
+ * with your code, instead of `<sal.h>`.
+ *
+ * Multiple copies of Salieri can be included safely, even different
+ * versions.  Including a newer version will simiply replace older
+ * definitions with newer ones, and including older versions will have
+ * no effect.
+ *
+ * I don't think anything in here is copyrightable, but just in case:
+ *
+ *   To the extent possible under law, the author(s) have dedicated
+ *   all copyright and related and neighboring rights to this software
+ *   to the public domain worldwide. This software is distributed
+ *   without any warranty.
+ *
+ *   For details, see <http://creativecommons.org/publicdomain/zero/1.0/>.
+ */
+
+#if !defined(SALIERI_VERSION) || (SALIERI_VERSION < 1)
+
+/* TODO: figure out when <sal.h> first appeared. */
+#if defined(_MSC_VER)
+#  include <sal.h>
+#endif
+
+/* The main concern for the implementation is that we don't want to
+ * replace annotations from <sal.h>, but we *do* want to replace
+ * annotations from older versions of Salieri.  To keep track of
+ * everything, when we (Salieri) define a SAL annotation, we also
+ * define SALIERI_DEFINED_${annotation} (with the leading and trailing
+ * '-' stripped).  Then, before redefining an annotation macro we
+ * check to make sure SALIERI_DEFINED_${annontation} is defined.
+ *
+ * This means you can safely use Salieri in a public header in your
+ * project.
+ */
+
+/* Function Parameters & Return Value
+ *
+ * https://msdn.microsoft.com/en-us/library/hh916382.aspx
+ *****/
+
+/*  Pointer Parameters */
+
+#if defined(_In_) && defined(SALIERI_DEFINED_In)
+#  undef _In_
+#endif
+#if !defined(_In_)
+#  define _In_
+#  define SALIERI_DEFINED_In
+#endif
+
+#if defined(__in_ecount) && defined(SALIERI_DEFINED__in_ecount)
+#  undef __in_ecount
+#endif
+#if !defined(__in_ecount)
+#  define __in_ecount(s)
+#  define SALIERI_DEFINED__in_ecount(s)
+#endif
+
+#if defined(__in_ecount_opt) && defined(SALIERI_DEFINED__in_ecount_opt)
+#  undef __in_ecount_opt
+#endif
+#if !defined(__in_ecount_opt)
+#  define __in_ecount_opt(s)
+#  define SALIERI_DEFINED__in_ecount_opt(s)
+#endif
+
+#if defined(_Out_) && defined(SALIERI_DEFINED_Out)
+#  undef _Out_
+#endif
+#if !defined(_Out_)
+#  define _Out_
+#  define SALIERI_DEFINED_Out
+#endif
+
+#if defined(_Inout_) && defined(SALIERI_DEFINED_Inout)
+#  undef _Inout_
+#endif
+#if !defined(_Inout_)
+#  define _Inout_
+#  define SALIERI_DEFINED_Inout
+#endif
+
+#if defined(_In_z_) && defined(SALIERI_DEFINED_In_z)
+#  undef _In_z_
+#endif
+#if !defined(_In_z_)
+#  define _In_z_
+#  define SALIERI_DEFINED_In_z
+#endif
+
+#if defined(_Inout_z_) && defined(SALIERI_DEFINED_Inout_z)
+#  undef _Inout_z_
+#endif
+#if !defined(_Inout_z_)
+#  define _Inout_z_
+#  define SALIERI_DEFINED_Inout_z
+#endif
+
+#if defined(_In_reads_) && defined(SALIERI_DEFINED_In_reads)
+#  undef _In_reads_
+#endif
+#if !defined(_In_reads_)
+#  define _In_reads_(s)
+#  define SALIERI_DEFINED_In_reads
+#endif
+
+#if defined(_In_reads_bytes_) && defined(SALIERI_DEFINED_In_reads_bytes)
+#  undef _In_reads_bytes_
+#endif
+#if !defined(_In_reads_bytes_)
+#  define _In_reads_bytes_(s)
+#  define SALIERI_DEFINED_In_reads_bytes
+#endif
+
+#if defined(_In_reads_z_) && defined(SALIERI_DEFINED_In_reads_z)
+#  undef _In_reads_z_
+#endif
+#if !defined(_In_reads_z_)
+#  define _In_reads_z_(s)
+#  define SALIERI_DEFINED_In_reads_z
+#endif
+
+#if defined(_In_reads_or_z_) && defined(SALIERI_DEFINED_In_reads_or_z)
+#  undef _In_reads_or_z_
+#endif
+#if !defined(_In_reads_or_z_)
+#  define _In_reads_or_z_(s)
+#  define SALIERI_DEFINED_In_reads_or_z
+#endif
+
+#if defined(_Out_writes_) && defined(SALIERI_DEFINED_Out_writes)
+#  undef _Out_writes_
+#endif
+#if !defined(_Out_writes_)
+#  define _Out_writes_(s)
+#  define SALIERI_DEFINED_Out_writes
+#endif
+
+#if defined(_Out_writes_bytes_) && defined(SALIERI_DEFINED_Out_writes_bytes)
+#  undef _Out_writes_bytes_
+#endif
+#if !defined(_Out_writes_bytes_)
+#  define _Out_writes_bytes_(s)
+#  define SALIERI_DEFINED_Out_writes_bytes
+#endif
+
+#if defined(_Out_writes_bytes_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_opt_)
+#  undef _Out_writes_bytes_opt_
+#endif
+#if !defined(_Out_writes_bytes_opt_)
+#  define _Out_writes_bytes_opt_(s)
+#  define SALIERI_DEFINED_Out_writes_bytes_opt_
+#endif
+
+#if defined(_Out_writes_z_) && defined(SALIERI_DEFINED_Out_writes_z)
+#  undef _Out_writes_z_
+#endif
+#if !defined(_Out_writes_z_)
+#  define _Out_writes_z_(s)
+#  define SALIERI_DEFINED_Out_writes_z
+#endif
+
+#if defined(_Inout_updates_) && defined(SALIERI_DEFINED_Inout_updates)
+#  undef _Inout_updates_
+#endif
+#if !defined(_Inout_updates_)
+#  define _Inout_updates_(s)
+#  define SALIERI_DEFINED_Inout_updates
+#endif
+
+#if defined(_Inout_updates_bytes_) && defined(SALIERI_DEFINED_Inout_updates_bytes)
+#  undef _Inout_updates_bytes_
+#endif
+#if !defined(_Inout_updates_bytes_)
+#  define _Inout_updates_bytes_(s)
+#  define SALIERI_DEFINED_Inout_updates_bytes
+#endif
+
+#if defined(_Inout_updates_z_) && defined(SALIERI_DEFINED_Inout_updates_z)
+#  undef _Inout_updates_z_
+#endif
+#if !defined(_Inout_updates_z_)
+#  define _Inout_updates_z_(s)
+#  define SALIERI_DEFINED_Inout_updates_z
+#endif
+
+#if defined(_Out_writes_to_) && defined(SALIERI_DEFINED_Out_writes_to)
+#  undef _Out_writes_to_
+#endif
+#if !defined(_Out_writes_to_)
+#  define _Out_writes_to_(s,c)
+#  define SALIERI_DEFINED_Out_writes_to
+#endif
+
+#if defined(_Out_writes_bytes_to_) && defined(SALIERI_DEFINED_Out_writes_bytes_to)
+#  undef _Out_writes_bytes_to_
+#endif
+#if !defined(_Out_writes_bytes_to_)
+#  define _Out_writes_bytes_to_(s,c)
+#  define SALIERI_DEFINED_Out_writes_bytes_to
+#endif
+
+#if defined(_Out_writes_all_) && defined(SALIERI_DEFINED_Out_writes_all)
+#  undef _Out_writes_all_
+#endif
+#if !defined(_Out_writes_all_)
+#  define _Out_writes_all_(s)
+#  define SALIERI_DEFINED_Out_writes_all
+#endif
+
+#if defined(_Out_writes_bytes_all_) && defined(SALIERI_DEFINED_Out_writes_bytes_all)
+#  undef _Out_writes_bytes_all_
+#endif
+#if !defined(_Out_writes_bytes_all_)
+#  define _Out_writes_bytes_all_(s)
+#  define SALIERI_DEFINED_Out_writes_bytes_all
+#endif
+
+#if defined(_In_updates_to_) && defined(SALIERI_DEFINED_In_updates_to)
+#  undef _In_updates_to_
+#endif
+#if !defined(_In_updates_to_)
+#  define _In_updates_to_(s,c)
+#  define SALIERI_DEFINED_In_updates_to
+#endif
+
+#if defined(_In_updates_bytes_to_) && defined(SALIERI_DEFINED_In_updates_bytes_to)
+#  undef _In_updates_bytes_to_
+#endif
+#if !defined(_In_updates_bytes_to_)
+#  define _In_updates_bytes_to_(s,c)
+#  define SALIERI_DEFINED_In_updates_bytes_to
+#endif
+
+#if defined(_Inout_updates_z_) && defined(SALIERI_DEFINED_Inout_updates_z)
+#  undef _Inout_updates_z_
+#endif
+#if !defined(_Inout_updates_z_)
+#  define _Inout_updates_z_(s)
+#  define SALIERI_DEFINED_Inout_updates_z
+#endif
+
+#if defined(_Out_writes_to_) && defined(SALIERI_DEFINED_Out_writes_to)
+#  undef _Out_writes_to_
+#endif
+#if !defined(_Out_writes_to_)
+#  define _Out_writes_to_(s,c)
+#  define SALIERI_DEFINED_Out_writes_to
+#endif
+
+#if defined(_Out_writes_bytes_to_) && defined(SALIERI_DEFINED_Out_writes_bytes_to)
+#  undef _Out_writes_bytes_to_
+#endif
+#if !defined(_Out_writes_bytes_to_)
+#  define _Out_writes_bytes_to_(s,c)
+#  define SALIERI_DEFINED_Out_writes_bytes_to
+#endif
+
+#if defined(_Out_writes_all_) && defined(SALIERI_DEFINED_Out_writes_all)
+#  undef _Out_writes_all_
+#endif
+#if !defined(_Out_writes_all_)
+#  define _Out_writes_all_(s)
+#  define SALIERI_DEFINED_Out_writes_all
+#endif
+
+#if defined(_Out_writes_bytes_all_) && defined(SALIERI_DEFINED_Out_writes_bytes_all)
+#  undef _Out_writes_bytes_all_
+#endif
+#if !defined(_Out_writes_bytes_all_)
+#  define _Out_writes_bytes_all_(s)
+#  define SALIERI_DEFINED_Out_writes_bytes_all
+#endif
+
+#if defined(_Inout_updates_to_) && defined(SALIERI_DEFINED_Inout_updates_to)
+#  undef _Inout_updates_to_
+#endif
+#if !defined(_Inout_updates_to_)
+#  define _Inout_updates_to_(s,c)
+#  define SALIERI_DEFINED_Inout_updates_to
+#endif
+
+#if defined(_Inout_updates_bytes_to_) && defined(SALIERI_DEFINED_Inout_updates_bytes_to)
+#  undef _Inout_updates_bytes_to_
+#endif
+#if !defined(_Inout_updates_bytes_to_)
+#  define _Inout_updates_bytes_to_(s,c)
+#  define SALIERI_DEFINED_Inout_updates_bytes_to
+#endif
+
+#if defined(_Inout_updates_all_) && defined(SALIERI_DEFINED_Inout_updates_all)
+#  undef _Inout_updates_all_
+#endif
+#if !defined(_Inout_updates_all_)
+#  define _Inout_updates_all_(s)
+#  define SALIERI_DEFINED_Inout_updates_all
+#endif
+
+#if defined(_Inout_updates_bytes_all_) && defined(SALIERI_DEFINED_Inout_updates_bytes_all)
+#  undef _Inout_updates_bytes_all_
+#endif
+#if !defined(_Inout_updates_bytes_all_)
+#  define _Inout_updates_bytes_all_(s)
+#  define SALIERI_DEFINED_Inout_updates_bytes_all
+#endif
+
+#if defined(_In_reads_to_ptr_) && defined(SALIERI_DEFINED_In_reads_to_ptr)
+#  undef _In_reads_to_ptr_
+#endif
+#if !defined(_In_reads_to_ptr_)
+#  define _In_reads_to_ptr_(p)
+#  define SALIERI_DEFINED_In_reads_to_ptr
+#endif
+
+#if defined(_In_reads_to_ptr_z_) && defined(SALIERI_DEFINED_In_reads_to_ptr_z)
+#  undef _In_reads_to_ptr_z_
+#endif
+#if !defined(_In_reads_to_ptr_z_)
+#  define _In_reads_to_ptr_z_(p)
+#  define SALIERI_DEFINED_In_reads_to_ptr_z
+#endif
+
+#if defined(_Out_writes_to_ptr_) && defined(SALIERI_DEFINED_Out_writes_to_ptr)
+#  undef _Out_writes_to_ptr_
+#endif
+#if !defined(_Out_writes_to_ptr_)
+#  define _Out_writes_to_ptr_(p)
+#  define SALIERI_DEFINED_Out_writes_to_ptr
+#endif
+
+#if defined(_Out_writes_to_ptr_z_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_z)
+#  undef _Out_writes_to_ptr_z_
+#endif
+#if !defined(_Out_writes_to_ptr_z_)
+#  define _Out_writes_to_ptr_z_(p)
+#  define SALIERI_DEFINED_Out_writes_to_ptr_z
+#endif
+
+/*  Optional Pointer Parameters */
+
+#if defined(_In_opt_) && defined(SALIERI_DEFINED_In_opt)
+#  undef _In_opt_
+#endif
+#if !defined(_In_opt_)
+#  define _In_opt_
+#  define SALIERI_DEFINED_In_opt
+#endif
+
+#if defined(_Out_opt_) && defined(SALIERI_DEFINED_Out_opt)
+#  undef _Out_opt_
+#endif
+#if !defined(_Out_opt_)
+#  define _Out_opt_
+#  define SALIERI_DEFINED_Out_opt
+#endif
+
+#if defined(_Inout_opt_) && defined(SALIERI_DEFINED_Inout_opt)
+#  undef _Inout_opt_
+#endif
+#if !defined(_Inout_opt_)
+#  define _Inout_opt_
+#  define SALIERI_DEFINED_Inout_opt
+#endif
+
+#if defined(_In_opt_z_) && defined(SALIERI_DEFINED_In_opt_z)
+#  undef _In_opt_z_
+#endif
+#if !defined(_In_opt_z_)
+#  define _In_opt_z_
+#  define SALIERI_DEFINED_In_opt_z
+#endif
+
+#if defined(_Inout_opt_z_) && defined(SALIERI_DEFINED_Inout_opt_z)
+#  undef _Inout_opt_z_
+#endif
+#if !defined(_Inout_opt_z_)
+#  define _Inout_opt_z_
+#  define SALIERI_DEFINED_Inout_opt_z
+#endif
+
+#if defined(_Inout_opt_bytecount_) && defined(SALIERI_DEFINED_Inout_opt_bytecount_)
+#  undef _Inout_opt_bytecount_
+#endif
+#if !defined(_Inout_opt_bytecount_)
+#  define _Inout_opt_bytecount_(s)
+#  define SALIERI_DEFINED_Inout_opt_bytecount_(s)
+#endif
+
+#if defined(_In_reads_opt_) && defined(SALIERI_DEFINED_In_reads_opt)
+#  undef _In_reads_opt_
+#endif
+#if !defined(_In_reads_opt_)
+#  define _In_reads_opt_(s)
+#  define SALIERI_DEFINED_In_reads_opt
+#endif
+
+#if defined(_In_reads_bytes_opt_) && defined(SALIERI_DEFINED_In_reads_bytes_opt)
+#  undef _In_reads_bytes_opt_
+#endif
+#if !defined(_In_reads_bytes_opt_)
+#  define _In_reads_bytes_opt_(s)
+#  define SALIERI_DEFINED_In_reads_bytes_opt
+#endif
+
+#if defined(_In_reads_opt_z_) && defined(SALIERI_DEFINED_In_reads_opt_z)
+#  undef _In_reads_opt_z_
+#endif
+#if !defined(_In_reads_opt_z_)
+#  define _In_reads_opt_z_(s)
+#  define SALIERI_DEFINED_In_reads_opt_z
+#endif
+
+#if defined(_Out_writes_opt_) && defined(SALIERI_DEFINED_Out_writes_opt)
+#  undef _Out_writes_opt_
+#endif
+#if !defined(_Out_writes_opt_)
+#  define _Out_writes_opt_(s)
+#  define SALIERI_DEFINED_Out_writes_opt
+#endif
+
+#if defined(_Out_writes_bytes_) && defined(SALIERI_DEFINED_Out_writes_bytes)
+#  undef _Out_writes_bytes_
+#endif
+#if !defined(_Out_writes_bytes_)
+#  define _Out_writes_bytes_(s)
+#  define SALIERI_DEFINED_Out_writes_bytes
+#endif
+
+#if defined(_Out_writes_opt_z_) && defined(SALIERI_DEFINED_Out_writes_opt_z)
+#  undef _Out_writes_opt_z_
+#endif
+#if !defined(_Out_writes_opt_z_)
+#  define _Out_writes_opt_z_(s)
+#  define SALIERI_DEFINED_Out_writes_opt_z
+#endif
+
+#if defined(_Inout_updates_opt_) && defined(SALIERI_DEFINED_Inout_updates_opt)
+#  undef _Inout_updates_opt_
+#endif
+#if !defined(_Inout_updates_opt_)
+#  define _Inout_updates_opt_(s)
+#  define SALIERI_DEFINED_Inout_updates_opt
+#endif
+
+#if defined(_Inout_updates_bytes_opt_) && defined(SALIERI_DEFINED_Inout_updates_bytes_opt)
+#  undef _Inout_updates_bytes_opt_
+#endif
+#if !defined(_Inout_updates_bytes_opt_)
+#  define _Inout_updates_bytes_opt_(s)
+#  define SALIERI_DEFINED_Inout_updates_bytes_opt
+#endif
+
+#if defined(_Inout_updates_opt_z_) && defined(SALIERI_DEFINED_Inout_updates_opt_z)
+#  undef _Inout_updates_opt_z_
+#endif
+#if !defined(_Inout_updates_opt_z_)
+#  define _Inout_updates_opt_z_(s)
+#  define SALIERI_DEFINED_Inout_updates_opt_z
+#endif
+
+#if defined(_Out_writes_to_opt_) && defined(SALIERI_DEFINED_Out_writes_to_opt)
+#  undef _Out_writes_to_opt_
+#endif
+#if !defined(_Out_writes_to_opt_)
+#  define _Out_writes_to_opt_(s,c)
+#  define SALIERI_DEFINED_Out_writes_to_opt
+#endif
+
+#if defined(_Out_writes_bytes_to_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_to_opt)
+#  undef _Out_writes_bytes_to_opt_
+#endif
+#if !defined(_Out_writes_bytes_to_opt_)
+#  define _Out_writes_bytes_to_opt_(s,c)
+#  define SALIERI_DEFINED_Out_writes_bytes_to_opt
+#endif
+
+#if defined(_Out_writes_all_opt_) && defined(SALIERI_DEFINED_Out_writes_all_opt)
+#  undef _Out_writes_all_opt_
+#endif
+#if !defined(_Out_writes_all_opt_)
+#  define _Out_writes_all_opt_(s)
+#  define SALIERI_DEFINED_Out_writes_all_opt
+#endif
+
+#if defined(_Out_writes_bytes_all_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_all_opt)
+#  undef _Out_writes_bytes_all_opt_
+#endif
+#if !defined(_Out_writes_bytes_all_opt_)
+#  define _Out_writes_bytes_all_opt_(s)
+#  define SALIERI_DEFINED_Out_writes_bytes_all_opt
+#endif
+
+#if defined(_In_updates_to_opt_) && defined(SALIERI_DEFINED_In_updates_to_opt)
+#  undef _In_updates_to_opt_
+#endif
+#if !defined(_In_updates_to_opt_)
+#  define _In_updates_to_opt_(s,c)
+#  define SALIERI_DEFINED_In_updates_to_opt
+#endif
+
+#if defined(_In_updates_bytes_to_opt_) && defined(SALIERI_DEFINED_In_updates_bytes_to_opt)
+#  undef _In_updates_bytes_to_opt_
+#endif
+#if !defined(_In_updates_bytes_to_opt_)
+#  define _In_updates_bytes_to_opt_(s,c)
+#  define SALIERI_DEFINED_In_updates_bytes_to_opt
+#endif
+
+#if defined(_Inout_updates_all_opt_) && defined(SALIERI_DEFINED_Inout_updates_all_opt)
+#  undef _Inout_updates_all_opt_
+#endif
+#if !defined(_Inout_updates_all_opt_)
+#  define _Inout_updates_all_opt_(s)
+#  define SALIERI_DEFINED_Inout_updates_all_opt
+#endif
+
+#if defined(_Inout_updates_bytes_all_opt_) && defined(SALIERI_DEFINED_Inout_updates_bytes_all_opt)
+#  undef _Inout_updates_bytes_all_opt_
+#endif
+#if !defined(_Inout_updates_bytes_all_opt_)
+#  define _Inout_updates_bytes_all_opt_(s)
+#  define SALIERI_DEFINED_Inout_updates_bytes_all_opt
+#endif
+
+#if defined(_In_reads_to_ptr_opt_) && defined(SALIERI_DEFINED_In_reads_to_ptr_opt)
+#  undef _In_reads_to_ptr_opt_
+#endif
+#if !defined(_In_reads_to_ptr_opt_)
+#  define _In_reads_to_ptr_opt_(p)
+#  define SALIERI_DEFINED_In_reads_to_ptr_opt
+#endif
+
+#if defined(_In_reads_to_ptr_opt_z_) && defined(SALIERI_DEFINED_In_reads_to_ptr_opt_z)
+#  undef _In_reads_to_ptr_opt_z_
+#endif
+#if !defined(_In_reads_to_ptr_opt_z_)
+#  define _In_reads_to_ptr_opt_z_(p)
+#  define SALIERI_DEFINED_In_reads_to_ptr_opt_z
+#endif
+
+#if defined(_Out_writes_to_ptr_opt_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_opt)
+#  undef _Out_writes_to_ptr_opt_
+#endif
+#if !defined(_Out_writes_to_ptr_opt_)
+#  define _Out_writes_to_ptr_opt_(p)
+#  define SALIERI_DEFINED_Out_writes_to_ptr_opt
+#endif
+
+#if defined(_Out_writes_to_ptr_opt_z_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_opt_z)
+#  undef _Out_writes_to_ptr_opt_z_
+#endif
+#if !defined(_Out_writes_to_ptr_opt_z_)
+#  define _Out_writes_to_ptr_opt_z_(p)
+#  define SALIERI_DEFINED_Out_writes_to_ptr_opt_z
+#endif
+
+/* Output Pointer Parameters */
+
+#if defined(_Outptr_) && defined(SALIERI_DEFINED_Outptr)
+#  undef _Outptr_
+#endif
+#if !defined(_Outptr_)
+#  define _Outptr_
+#  define SALIERI_DEFINED_Outptr
+#endif
+
+#if defined(_Outptr_opt_) && defined(SALIERI_DEFINED_Outptr_opt)
+#  undef _Outptr_opt_
+#endif
+#if !defined(_Outptr_opt_)
+#  define _Outptr_opt_
+#  define SALIERI_DEFINED_Outptr_opt
+#endif
+
+#if defined(_Outptr_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_result_maybenull)
+#  undef _Outptr_result_maybenull_
+#endif
+#if !defined(_Outptr_result_maybenull_)
+#  define _Outptr_result_maybenull_
+#  define SALIERI_DEFINED_Outptr_result_maybenull
+#endif
+
+#if defined(_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull)
+#  undef _Outptr_opt_result_maybenull_
+#endif
+#if !defined(_Outptr_opt_result_maybenull_)
+#  define _Outptr_opt_result_maybenull_
+#  define SALIERI_DEFINED_Outptr_opt_result_maybenull
+#endif
+
+#if defined(_Outptr_result_z_) && defined(SALIERI_DEFINED_Outptr_result_z)
+#  undef _Outptr_result_z_
+#endif
+#if !defined(_Outptr_result_z_)
+#  define _Outptr_result_z_
+#  define SALIERI_DEFINED_Outptr_result_z
+#endif
+
+#if defined(_Outptr_opt_result_z_) && defined(SALIERI_DEFINED_Outptr_opt_result_z)
+#  undef _Outptr_opt_result_z_
+#endif
+#if !defined(_Outptr_opt_result_z_)
+#  define _Outptr_opt_result_z_
+#  define SALIERI_DEFINED_Outptr_opt_result_z
+#endif
+
+#if defined(_Outptr_result_maybenull_z_) && defined(SALIERI_DEFINED_Outptr_result_maybenull_z)
+#  undef _Outptr_result_maybenull_z_
+#endif
+#if !defined(_Outptr_result_maybenull_z_)
+#  define _Outptr_result_maybenull_z_
+#  define SALIERI_DEFINED_Outptr_result_maybenull_z
+#endif
+
+#if defined(_Outptr_opt_result_maybenull_z_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull_z)
+#  undef _Outptr_opt_result_maybenull_z_
+#endif
+#if !defined(_Outptr_opt_result_maybenull_z_)
+#  define _Outptr_opt_result_maybenull_z_
+#  define SALIERI_DEFINED_Outptr_opt_result_maybenull_z
+#endif
+
+#if defined(_COM_Outptr_) && defined(SALIERI_DEFINED_COM_Outptr)
+#  undef _COM_Outptr_
+#endif
+#if !defined(_COM_Outptr_)
+#  define _COM_Outptr_
+#  define SALIERI_DEFINED_COM_Outptr
+#endif
+
+#if defined(_COM_Outptr_opt_) && defined(SALIERI_DEFINED_COM_Outptr_opt)
+#  undef _COM_Outptr_opt_
+#endif
+#if !defined(_COM_Outptr_opt_)
+#  define _COM_Outptr_opt_
+#  define SALIERI_DEFINED_COM_Outptr_opt
+#endif
+
+#if defined(_COM_Outptr_result_maybenull_) && defined(SALIERI_DEFINED_COM_Outptr_result_maybenull)
+#  undef _COM_Outptr_result_maybenull_
+#endif
+#if !defined(_COM_Outptr_result_maybenull_)
+#  define _COM_Outptr_result_maybenull_
+#  define SALIERI_DEFINED_COM_Outptr_result_maybenull
+#endif
+
+#if defined(_COM_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_COM_Outptr_opt_result_maybenull)
+#  undef _COM_Outptr_opt_result_maybenull_
+#endif
+#if !defined(_COM_Outptr_opt_result_maybenull_)
+#  define _COM_Outptr_opt_result_maybenull_
+#  define SALIERI_DEFINED_COM_Outptr_opt_result_maybenull
+#endif
+
+#if defined(_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull)
+#  undef _Outptr_opt_result_maybenull_
+#endif
+#if !defined(_Outptr_opt_result_maybenull_)
+#  define _Outptr_opt_result_maybenull_
+#  define SALIERI_DEFINED_Outptr_opt_result_maybenull
+#endif
+
+#if defined(_Outptr_result_buffer_) && defined(SALIERI_DEFINED_Outptr_result_buffer)
+#  undef _Outptr_result_buffer_
+#endif
+#if !defined(_Outptr_result_buffer_)
+#  define _Outptr_result_buffer_(s)
+#  define SALIERI_DEFINED_Outptr_result_buffer
+#endif
+
+#if defined(_Outptr_result_bytebuffer_) && defined(SALIERI_DEFINED_Outptr_result_bytebuffer)
+#  undef _Outptr_result_bytebuffer_
+#endif
+#if !defined(_Outptr_result_bytebuffer_)
+#  define _Outptr_result_bytebuffer_(s)
+#  define SALIERI_DEFINED_Outptr_result_bytebuffer
+#endif
+
+#if defined(_Outptr_opt_result_buffer_) && defined(SALIERI_DEFINED_Outptr_opt_result_buffer)
+#  undef _Outptr_opt_result_buffer_
+#endif
+#if !defined(_Outptr_opt_result_buffer_)
+#  define _Outptr_opt_result_buffer_(s)
+#  define SALIERI_DEFINED_Outptr_opt_result_buffer
+#endif
+
+#if defined(_Outptr_opt_result_bytebuffer_) && defined(SALIERI_DEFINED_Outptr_opt_result_bytebuffer)
+#  undef _Outptr_opt_result_bytebuffer_
+#endif
+#if !defined(_Outptr_opt_result_bytebuffer_)
+#  define _Outptr_opt_result_bytebuffer_(s)
+#  define SALIERI_DEFINED_Outptr_opt_result_bytebuffer
+#endif
+
+#if defined(_Outptr_result_buffer_to_) && defined(SALIERI_DEFINED_Outptr_result_buffer_to)
+#  undef _Outptr_result_buffer_to_
+#endif
+#if !defined(_Outptr_result_buffer_to_)
+#  define _Outptr_result_buffer_to_(s,c)
+#  define SALIERI_DEFINED_Outptr_result_buffer_to
+#endif
+
+#if defined(_Outptr_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outptr_result_bytebuffer_to)
+#  undef _Outptr_result_bytebuffer_to_
+#endif
+#if !defined(_Outptr_result_bytebuffer_to_)
+#  define _Outptr_result_bytebuffer_to_(s,c)
+#  define SALIERI_DEFINED_Outptr_result_bytebuffer_to
+#endif
+
+#if defined(_Outptr_opt_result_buffer_to_) && defined(SALIERI_DEFINED_Outptr_opt_result_buffer_to)
+#  undef _Outptr_opt_result_buffer_to_
+#endif
+#if !defined(_Outptr_opt_result_buffer_to_)
+#  define _Outptr_opt_result_buffer_to_(s,c)
+#  define SALIERI_DEFINED_Outptr_opt_result_buffer_to
+#endif
+
+#if defined(_Outptr_opt_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outptr_opt_result_bytebuffer_to)
+#  undef _Outptr_opt_result_bytebuffer_to_
+#endif
+#if !defined(_Outptr_opt_result_bytebuffer_to_)
+#  define _Outptr_opt_result_bytebuffer_to_(s,c)
+#  define SALIERI_DEFINED_Outptr_opt_result_bytebuffer_to
+#endif
+
+#if defined(_Result_nullonfailure_) && defined(SALIERI_DEFINED_Result_nullonfailure)
+#  undef _Result_nullonfailure_
+#endif
+#if !defined(_Result_nullonfailure_)
+#  define _Result_nullonfailure_
+#  define SALIERI_DEFINED_Result_nullonfailure
+#endif
+
+#if defined(_Result_zeroonfailure_) && defined(SALIERI_DEFINED_Result_zeroonfailure)
+#  undef _Result_zeroonfailure_
+#endif
+#if !defined(_Result_zeroonfailure_)
+#  define _Result_zeroonfailure_
+#  define SALIERI_DEFINED_Result_zeroonfailure
+#endif
+
+#if defined(_Outptr_result_nullonfailure_) && defined(SALIERI_DEFINED_Outptr_result_nullonfailure)
+#  undef _Outptr_result_nullonfailure_
+#endif
+#if !defined(_Outptr_result_nullonfailure_)
+#  define _Outptr_result_nullonfailure_
+#  define SALIERI_DEFINED_Outptr_result_nullonfailure
+#endif
+
+#if defined(_Outptr_opt_result_nullonfailure_) && defined(SALIERI_DEFINED_Outptr_opt_result_nullonfailure)
+#  undef _Outptr_opt_result_nullonfailure_
+#endif
+#if !defined(_Outptr_opt_result_nullonfailure_)
+#  define _Outptr_opt_result_nullonfailure_
+#  define SALIERI_DEFINED_Outptr_opt_result_nullonfailure
+#endif
+
+#if defined(_Outref_result_nullonfailure_) && defined(SALIERI_DEFINED_Outref_result_nullonfailure)
+#  undef _Outref_result_nullonfailure_
+#endif
+#if !defined(_Outref_result_nullonfailure_)
+#  define _Outref_result_nullonfailure_
+#  define SALIERI_DEFINED_Outref_result_nullonfailure
+#endif
+
+/* Output Reference Parameters */
+
+#if defined(_Outref_) && defined(SALIERI_DEFINED_Outref)
+#  undef _Outref_
+#endif
+#if !defined(_Outref_)
+#  define _Outref_
+#  define SALIERI_DEFINED_Outref
+#endif
+
+#if defined(_Outref_result_maybenull_) && defined(SALIERI_DEFINED_Outref_result_maybenull)
+#  undef _Outref_result_maybenull_
+#endif
+#if !defined(_Outref_result_maybenull_)
+#  define _Outref_result_maybenull_
+#  define SALIERI_DEFINED_Outref_result_maybenull
+#endif
+
+#if defined(_Outref_result_buffer_) && defined(SALIERI_DEFINED_Outref_result_buffer)
+#  undef _Outref_result_buffer_
+#endif
+#if !defined(_Outref_result_buffer_)
+#  define _Outref_result_buffer_(s)
+#  define SALIERI_DEFINED_Outref_result_buffer
+#endif
+
+#if defined(_Outref_result_bytebuffer_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer)
+#  undef _Outref_result_bytebuffer_
+#endif
+#if !defined(_Outref_result_bytebuffer_)
+#  define _Outref_result_bytebuffer_(s)
+#  define SALIERI_DEFINED_Outref_result_bytebuffer
+#endif
+
+#if defined(_Outref_result_buffer_to_) && defined(SALIERI_DEFINED_Outref_result_buffer_to)
+#  undef _Outref_result_buffer_to_
+#endif
+#if !defined(_Outref_result_buffer_to_)
+#  define _Outref_result_buffer_to_(s,c)
+#  define SALIERI_DEFINED_Outref_result_buffer_to
+#endif
+
+#if defined(_Outref_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_to)
+#  undef _Outref_result_bytebuffer_to_
+#endif
+#if !defined(_Outref_result_bytebuffer_to_)
+#  define _Outref_result_bytebuffer_to_(s,c)
+#  define SALIERI_DEFINED_Outref_result_bytebuffer_to
+#endif
+
+#if defined(_Outref_result_buffer_all_) && defined(SALIERI_DEFINED_Outref_result_buffer_all)
+#  undef _Outref_result_buffer_all_
+#endif
+#if !defined(_Outref_result_buffer_all_)
+#  define _Outref_result_buffer_all_(s)
+#  define SALIERI_DEFINED_Outref_result_buffer_all
+#endif
+
+#if defined(_Outref_result_bytebuffer_all_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_all)
+#  undef _Outref_result_bytebuffer_all_
+#endif
+#if !defined(_Outref_result_bytebuffer_all_)
+#  define _Outref_result_bytebuffer_all_(s)
+#  define SALIERI_DEFINED_Outref_result_bytebuffer_all
+#endif
+
+#if defined(_Outref_result_buffer_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_maybenull)
+#  undef _Outref_result_buffer_maybenull_
+#endif
+#if !defined(_Outref_result_buffer_maybenull_)
+#  define _Outref_result_buffer_maybenull_(s)
+#  define SALIERI_DEFINED_Outref_result_buffer_maybenull
+#endif
+
+#if defined(_Outref_result_bytebuffer_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_maybenull)
+#  undef _Outref_result_bytebuffer_maybenull_
+#endif
+#if !defined(_Outref_result_bytebuffer_maybenull_)
+#  define _Outref_result_bytebuffer_maybenull_(s)
+#  define SALIERI_DEFINED_Outref_result_bytebuffer_maybenull
+#endif
+
+#if defined(_Outref_result_buffer_to_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_to_maybenull)
+#  undef _Outref_result_buffer_to_maybenull_
+#endif
+#if !defined(_Outref_result_buffer_to_maybenull_)
+#  define _Outref_result_buffer_to_maybenull_(s,c)
+#  define SALIERI_DEFINED_Outref_result_buffer_to_maybenull
+#endif
+
+#if defined(_Outref_result_bytebuffer_to_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_to_maybenull)
+#  undef _Outref_result_bytebuffer_to_maybenull_
+#endif
+#if !defined(_Outref_result_bytebuffer_to_maybenull_)
+#  define _Outref_result_bytebuffer_to_maybenull_(s,c)
+#  define SALIERI_DEFINED_Outref_result_bytebuffer_to_maybenull
+#endif
+
+#if defined(_Outref_result_buffer_all_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_all_maybenull)
+#  undef _Outref_result_buffer_all_maybenull_
+#endif
+#if !defined(_Outref_result_buffer_all_maybenull_)
+#  define _Outref_result_buffer_all_maybenull_(s)
+#  define SALIERI_DEFINED_Outref_result_buffer_all_maybenull
+#endif
+
+#if defined(_Outref_result_bytebuffer_all_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_all_maybenull)
+#  undef _Outref_result_bytebuffer_all_maybenull_
+#endif
+#if !defined(_Outref_result_bytebuffer_all_maybenull_)
+#  define _Outref_result_bytebuffer_all_maybenull_(s)
+#  define SALIERI_DEFINED_Outref_result_bytebuffer_all_maybenull
+#endif
+
+/* Return Values */
+
+#if defined(_Ret_z_) && defined(SALIERI_DEFINED_Ret_z)
+#  undef _Ret_z_
+#endif
+#if !defined(_Ret_z_)
+#  define _Ret_z_
+#  define SALIERI_DEFINED_Ret_z
+#endif
+
+#if defined(_Ret_writes_) && defined(SALIERI_DEFINED_Ret_writes)
+#  undef _Ret_writes_
+#endif
+#if !defined(_Ret_writes_)
+#  define _Ret_writes_(s)
+#  define SALIERI_DEFINED_Ret_writes
+#endif
+
+#if defined(_Ret_writes_bytes_) && defined(SALIERI_DEFINED_Ret_writes_bytes)
+#  undef _Ret_writes_bytes_
+#endif
+#if !defined(_Ret_writes_bytes_)
+#  define _Ret_writes_bytes_(s)
+#  define SALIERI_DEFINED_Ret_writes_bytes
+#endif
+
+#if defined(_Ret_writes_z_) && defined(SALIERI_DEFINED_Ret_writes_z)
+#  undef _Ret_writes_z_
+#endif
+#if !defined(_Ret_writes_z_)
+#  define _Ret_writes_z_(s)
+#  define SALIERI_DEFINED_Ret_writes_z
+#endif
+
+#if defined(_Ret_writes_to_) && defined(SALIERI_DEFINED_Ret_writes_to)
+#  undef _Ret_writes_to_
+#endif
+#if !defined(_Ret_writes_to_)
+#  define _Ret_writes_to_(s,c)
+#  define SALIERI_DEFINED_Ret_writes_to
+#endif
+
+#if defined(_Ret_writes_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_maybenull)
+#  undef _Ret_writes_maybenull_
+#endif
+#if !defined(_Ret_writes_maybenull_)
+#  define _Ret_writes_maybenull_(s)
+#  define SALIERI_DEFINED_Ret_writes_maybenull
+#endif
+
+#if defined(_Ret_writes_to_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_to_maybenull)
+#  undef _Ret_writes_to_maybenull_
+#endif
+#if !defined(_Ret_writes_to_maybenull_)
+#  define _Ret_writes_to_maybenull_(s)
+#  define SALIERI_DEFINED_Ret_writes_to_maybenull
+#endif
+
+#if defined(_Ret_writes_maybenull_z_) && defined(SALIERI_DEFINED_Ret_writes_maybenull_z)
+#  undef _Ret_writes_maybenull_z_
+#endif
+#if !defined(_Ret_writes_maybenull_z_)
+#  define _Ret_writes_maybenull_z_(s)
+#  define SALIERI_DEFINED_Ret_writes_maybenull_z
+#endif
+
+#if defined(_Ret_maybenull_) && defined(SALIERI_DEFINED_Ret_maybenull)
+#  undef _Ret_maybenull_
+#endif
+#if !defined(_Ret_maybenull_)
+#  define _Ret_maybenull_
+#  define SALIERI_DEFINED_Ret_maybenull
+#endif
+
+#if defined(_Ret_maybenull_z_) && defined(SALIERI_DEFINED_Ret_maybenull_z)
+#  undef _Ret_maybenull_z_
+#endif
+#if !defined(_Ret_maybenull_z_)
+#  define _Ret_maybenull_z_
+#  define SALIERI_DEFINED_Ret_maybenull_z
+#endif
+
+#if defined(_Ret_null_) && defined(SALIERI_DEFINED_Ret_null)
+#  undef _Ret_null_
+#endif
+#if !defined(_Ret_null_)
+#  define _Ret_null_
+#  define SALIERI_DEFINED_Ret_null
+#endif
+
+#if defined(_Ret_notnull_) && defined(SALIERI_DEFINED_Ret_notnull)
+#  undef _Ret_notnull_
+#endif
+#if !defined(_Ret_notnull_)
+#  define _Ret_notnull_
+#  define SALIERI_DEFINED_Ret_notnull
+#endif
+
+#if defined(_Ret_writes_bytes_to_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to)
+#  undef _Ret_writes_bytes_to_
+#endif
+#if !defined(_Ret_writes_bytes_to_)
+#  define _Ret_writes_bytes_to_
+#  define SALIERI_DEFINED_Ret_writes_bytes_to
+#endif
+
+#if defined(_Ret_writes_bytes_to_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to)
+#  undef _Ret_writes_bytes_to_
+#endif
+#if !defined(_Ret_writes_bytes_to_)
+#  define _Ret_writes_bytes_to_
+#  define SALIERI_DEFINED_Ret_writes_bytes_to
+#endif
+
+#if defined(_Ret_writes_bytes_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_bytes_maybenull)
+#  undef _Ret_writes_bytes_maybenull_
+#endif
+#if !defined(_Ret_writes_bytes_maybenull_)
+#  define _Ret_writes_bytes_maybenull_
+#  define SALIERI_DEFINED_Ret_writes_bytes_maybenull
+#endif
+
+#if defined(_Ret_writes_bytes_to_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to_maybenull)
+#  undef _Ret_writes_bytes_to_maybenull_
+#endif
+#if !defined(_Ret_writes_bytes_to_maybenull_)
+#  define _Ret_writes_bytes_to_maybenull_
+#  define SALIERI_DEFINED_Ret_writes_bytes_to_maybenull
+#endif
+
+/* Other Common Annotations */
+
+#if defined(_In_range_) && defined(SALIERI_DEFINED_In_range)
+#  undef _In_range_
+#endif
+#if !defined(_In_range_)
+#  define _In_range_(low, hi)
+#  define SALIERI_DEFINED_In_range
+#endif
+
+#if defined(_Out_range_) && defined(SALIERI_DEFINED_Out_range)
+#  undef _Out_range_
+#endif
+#if !defined(_Out_range_)
+#  define _Out_range_(low, hi)
+#  define SALIERI_DEFINED_Out_range
+#endif
+
+#if defined(_Ret_range_) && defined(SALIERI_DEFINED_Ret_range)
+#  undef _Ret_range_
+#endif
+#if !defined(_Ret_range_)
+#  define _Ret_range_(low, hi)
+#  define SALIERI_DEFINED_Ret_range
+#endif
+
+#if defined(_Deref_in_range_) && defined(SALIERI_DEFINED_Deref_in_range)
+#  undef _Deref_in_range_
+#endif
+#if !defined(_Deref_in_range_)
+#  define _Deref_in_range_(low, hi)
+#  define SALIERI_DEFINED_Deref_in_range
+#endif
+
+#if defined(_Deref_out_range_) && defined(SALIERI_DEFINED_Deref_out_range)
+#  undef _Deref_out_range_
+#endif
+#if !defined(_Deref_out_range_)
+#  define _Deref_out_range_(low, hi)
+#  define SALIERI_DEFINED_Deref_out_range
+#endif
+
+#if defined(_Deref_inout_range_) && defined(SALIERI_DEFINED_Deref_inout_range)
+#  undef _Deref_inout_range_
+#endif
+#if !defined(_Deref_inout_range_)
+#  define _Deref_inout_range_(low, hi)
+#  define SALIERI_DEFINED_Deref_inout_range
+#endif
+
+#if defined(_Field_range_) && defined(SALIERI_DEFINED_Field_range)
+#  undef _Field_range_
+#endif
+#if !defined(_Field_range_)
+#  define _Field_range_(low, hi)
+#  define SALIERI_DEFINED_Field_range
+#endif
+
+#if defined(_Pre_equal_to_) && defined(SALIERI_DEFINED_Pre_equal_to)
+#  undef _Pre_equal_to_
+#endif
+#if !defined(_Pre_equal_to_)
+#  define _Pre_equal_to_(expr)
+#  define SALIERI_DEFINED_Pre_equal_to
+#endif
+
+#if defined(_Post_equal_to_) && defined(SALIERI_DEFINED_Post_equal_to)
+#  undef _Post_equal_to_
+#endif
+#if !defined(_Post_equal_to_)
+#  define _Post_equal_to_(expr)
+#  define SALIERI_DEFINED_Post_equal_to
+#endif
+
+#if defined(_Struct_size_bytes_) && defined(SALIERI_DEFINED_Struct_size_bytes)
+#  undef _Struct_size_bytes_
+#endif
+#if !defined(_Struct_size_bytes_)
+#  define _Struct_size_bytes_(size)
+#  define SALIERI_DEFINED_Struct_size_bytes
+#endif
+
+/* Annotating Function Behavior
+ *
+ * https://msdn.microsoft.com/en-us/library/jj159529.aspx
+ *****/
+
+#if defined(_Called_from_function_class_) && defined(SALIERI_DEFINED_Called_from_function_class)
+#  undef _Called_from_function_class_
+#endif
+#if !defined(_Called_from_function_class_)
+#  define _Called_from_function_class_(name)
+#  define SALIERI_DEFINED_Called_from_function_class
+#endif
+
+#if defined(_Check_return_) && defined(SALIERI_DEFINED_Check_return)
+#  undef _Check_return_
+#endif
+#if !defined(_Check_return_)
+#  define _Check_return_
+#  define SALIERI_DEFINED_Check_return
+#endif
+
+#if defined(_Function_class_) && defined(SALIERI_DEFINED_Function_class)
+#  undef _Function_class_
+#endif
+#if !defined(_Function_class_)
+#  define _Function_class_(name)
+#  define SALIERI_DEFINED_Function_class
+#endif
+
+#if defined(_Raises_SEH_exception_) && defined(SALIERI_DEFINED_Raises_SEH_exception)
+#  undef _Raises_SEH_exception_
+#endif
+#if !defined(_Raises_SEH_exception_)
+#  define _Raises_SEH_exception_
+#  define SALIERI_DEFINED_Raises_SEH_exception
+#endif
+
+#if defined(_Must_inspect_result_) && defined(SALIERI_DEFINED_Must_inspect_result)
+#  undef _Must_inspect_result_
+#endif
+#if !defined(_Must_inspect_result_)
+#  define _Must_inspect_result_
+#  define SALIERI_DEFINED_Must_inspect_result
+#endif
+
+#if defined(_Use_decl_annotations_) && defined(SALIERI_DEFINED_Use_decl_annotations)
+#  undef _Use_decl_annotations_
+#endif
+#if !defined(_Use_decl_annotations_)
+#  define _Use_decl_annotations_
+#  define SALIERI_DEFINED_Use_decl_annotations
+#endif
+
+#if defined(_Always_) && defined(SALIERI_DEFINED_Always)
+#  undef _Always_
+#endif
+#if !defined(_Always_)
+#  define _Always_(anno_list)
+#  define SALIERI_DEFINED_Always
+#endif
+
+#if defined(_On_failure_) && defined(SALIERI_DEFINED_On_failure)
+#  undef _On_failure_
+#endif
+#if !defined(_On_failure_)
+#  define _On_failure_(anno_list)
+#  define SALIERI_DEFINED_On_failure
+#endif
+
+#if defined(_Return_type_success_) && defined(SALIERI_DEFINED_Return_type_success)
+#  undef _Return_type_success_
+#endif
+#if !defined(_Return_type_success_)
+#  define _Return_type_success_(expr)
+#  define SALIERI_DEFINED_Return_type_success
+#endif
+
+#if defined(_Success_) && defined(SALIERI_DEFINED_Success)
+#  undef _Success_
+#endif
+#if !defined(_Success_)
+#  define _Success_(expr)
+#  define SALIERI_DEFINED_Success
+#endif
+
+/* Annotating Structs and Classes
+ *
+ * https://msdn.microsoft.com/en-us/library/jj159528.aspx
+ *****/
+
+#if defined(_Field_range_) && defined(SALIERI_DEFINED_Field_range)
+#  undef _Field_range_
+#endif
+#if !defined(_Field_range_)
+#  define _Field_range_(low, high)
+#  define SALIERI_DEFINED_Field_range
+#endif
+
+#if defined(_Field_size_) && defined(SALIERI_DEFINED_Field_size)
+#  undef _Field_size_
+#endif
+#if !defined(_Field_size_)
+#  define _Field_size_(size)
+#  define SALIERI_DEFINED_Field_size
+#endif
+
+#if defined(_Field_size_part_) && defined(SALIERI_DEFINED_Field_size_part)
+#  undef _Field_size_part_
+#endif
+#if !defined(_Field_size_part_)
+#  define _Field_size_part_(size)
+#  define SALIERI_DEFINED_Field_size_part
+#endif
+
+#if defined(_Field_size_opt_) && defined(SALIERI_DEFINED_Field_size_opt)
+#  undef _Field_size_opt_
+#endif
+#if !defined(_Field_size_opt_)
+#  define _Field_size_opt_(size)
+#  define SALIERI_DEFINED_Field_size_opt
+#endif
+
+#if defined(_Field_size_bytes_) && defined(SALIERI_DEFINED_Field_size_bytes)
+#  undef _Field_size_bytes_
+#endif
+#if !defined(_Field_size_bytes_)
+#  define _Field_size_bytes_(size)
+#  define SALIERI_DEFINED_Field_size_bytes
+#endif
+
+#if defined(_Field_size_bytes_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_opt)
+#  undef _Field_size_bytes_opt_
+#endif
+#if !defined(_Field_size_bytes_opt_)
+#  define _Field_size_bytes_opt_(size)
+#  define SALIERI_DEFINED_Field_size_bytes_opt
+#endif
+
+#if defined(_Field_size_part_) && defined(SALIERI_DEFINED_Field_size_part)
+#  undef _Field_size_part_
+#endif
+#if !defined(_Field_size_part_)
+#  define _Field_size_part_(size, count)
+#  define SALIERI_DEFINED_Field_size_part
+#endif
+
+#if defined(_Field_size_part_opt_) && defined(SALIERI_DEFINED_Field_size_part_opt)
+#  undef _Field_size_part_opt_
+#endif
+#if !defined(_Field_size_part_opt_)
+#  define _Field_size_part_opt_(size, count)
+#  define SALIERI_DEFINED_Field_size_part_opt
+#endif
+
+#if defined(_Field_size_bytes_part_) && defined(SALIERI_DEFINED_Field_size_bytes_part)
+#  undef _Field_size_bytes_part_
+#endif
+#if !defined(_Field_size_bytes_part_)
+#  define _Field_size_bytes_part_(size, count)
+#  define SALIERI_DEFINED_Field_size_bytes_part
+#endif
+
+#if defined(_Field_size_bytes_part_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_part_opt)
+#  undef _Field_size_bytes_part_opt_
+#endif
+#if !defined(_Field_size_bytes_part_opt_)
+#  define _Field_size_bytes_part_opt_(size, count)
+#  define SALIERI_DEFINED_Field_size_bytes_part_opt
+#endif
+
+#if defined(_Field_size_full_) && defined(SALIERI_DEFINED_Field_size_full)
+#  undef _Field_size_full_
+#endif
+#if !defined(_Field_size_full_)
+#  define _Field_size_full_(size)
+#  define SALIERI_DEFINED_Field_size_full
+#endif
+
+#if defined(_Field_size_full_opt_) && defined(SALIERI_DEFINED_Field_size_full_opt)
+#  undef _Field_size_full_opt_
+#endif
+#if !defined(_Field_size_full_opt_)
+#  define _Field_size_full_opt_(size)
+#  define SALIERI_DEFINED_Field_size_full_opt
+#endif
+
+#if defined(_Field_size_bytes_full_) && defined(SALIERI_DEFINED_Field_size_bytes_full)
+#  undef _Field_size_bytes_full_
+#endif
+#if !defined(_Field_size_bytes_full_)
+#  define _Field_size_bytes_full_(size)
+#  define SALIERI_DEFINED_Field_size_bytes_full
+#endif
+
+#if defined(_Field_size_bytes_full_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_full_opt)
+#  undef _Field_size_bytes_full_opt_
+#endif
+#if !defined(_Field_size_bytes_full_opt_)
+#  define _Field_size_bytes_full_opt_(size)
+#  define SALIERI_DEFINED_Field_size_bytes_full_opt
+#endif
+
+#if defined(_Struct_size_bytes_) && defined(SALIERI_DEFINED_Struct_size_bytes)
+#  undef _Struct_size_bytes_
+#endif
+#if !defined(_Struct_size_bytes_)
+#  define _Struct_size_bytes_(size)
+#  define SALIERI_DEFINED_Struct_size_bytes
+#endif
+
+/* Annotating Locking Behavior
+ *
+ * https://msdn.microsoft.com/en-us/library/hh916381.aspx
+ *****/
+
+#if defined(_Acquires_exclusive_lock_) && defined(SALIERI_DEFINED_Acquires_exclusive_lock)
+#  undef _Acquires_exclusive_lock_
+#endif
+#if !defined(_Acquires_exclusive_lock_)
+#  define _Acquires_exclusive_lock_(expr)
+#  define SALIERI_DEFINED_Acquires_exclusive_lock
+#endif
+
+#if defined(_Acquires_lock_) && defined(SALIERI_DEFINED_Acquires_lock)
+#  undef _Acquires_lock_
+#endif
+#if !defined(_Acquires_lock_)
+#  define _Acquires_lock_(expr)
+#  define SALIERI_DEFINED_Acquires_lock
+#endif
+
+#if defined(_Acquires_nonreentrant_lock_) && defined(SALIERI_DEFINED_Acquires_nonreentrant_lock)
+#  undef _Acquires_nonreentrant_lock_
+#endif
+#if !defined(_Acquires_nonreentrant_lock_)
+#  define _Acquires_nonreentrant_lock_(expr)
+#  define SALIERI_DEFINED_Acquires_nonreentrant_lock
+#endif
+
+#if defined(_Acquires_shared_lock_) && defined(SALIERI_DEFINED_Acquires_shared_lock)
+#  undef _Acquires_shared_lock_
+#endif
+#if !defined(_Acquires_shared_lock_)
+#  define _Acquires_shared_lock_(expr)
+#  define SALIERI_DEFINED_Acquires_shared_lock
+#endif
+
+#if defined(_Create_lock_level_) && defined(SALIERI_DEFINED_Create_lock_level)
+#  undef _Create_lock_level_
+#endif
+#if !defined(_Create_lock_level_)
+#  define _Create_lock_level_(name)
+#  define SALIERI_DEFINED_Create_lock_level
+#endif
+
+#if defined(_Has_lock_kind_) && defined(SALIERI_DEFINED_Has_lock_kind)
+#  undef _Has_lock_kind_
+#endif
+#if !defined(_Has_lock_kind_)
+#  define _Has_lock_kind_(kind)
+#  define SALIERI_DEFINED_Has_lock_kind
+#endif
+
+#if defined(_Has_lock_level_) && defined(SALIERI_DEFINED_Has_lock_level)
+#  undef _Has_lock_level_
+#endif
+#if !defined(_Has_lock_level_)
+#  define _Has_lock_level_(name)
+#  define SALIERI_DEFINED_Has_lock_level
+#endif
+
+#if defined(_Lock_level_order_) && defined(SALIERI_DEFINED_Lock_level_order)
+#  undef _Lock_level_order_
+#endif
+#if !defined(_Lock_level_order_)
+#  define _Lock_level_order_(name1, name2)
+#  define SALIERI_DEFINED_Lock_level_order
+#endif
+
+#if defined(_Post_same_lock_) && defined(SALIERI_DEFINED_Post_same_lock)
+#  undef _Post_same_lock_
+#endif
+#if !defined(_Post_same_lock_)
+#  define _Post_same_lock_(expr1, expr2)
+#  define SALIERI_DEFINED_Post_same_lock
+#endif
+
+#if defined(_Releases_exclusive_lock_) && defined(SALIERI_DEFINED_Releases_exclusive_lock)
+#  undef _Releases_exclusive_lock_
+#endif
+#if !defined(_Releases_exclusive_lock_)
+#  define _Releases_exclusive_lock_(expr)
+#  define SALIERI_DEFINED_Releases_exclusive_lock
+#endif
+
+#if defined(_Releases_lock_) && defined(SALIERI_DEFINED_Releases_lock)
+#  undef _Releases_lock_
+#endif
+#if !defined(_Releases_lock_)
+#  define _Releases_lock_(expr)
+#  define SALIERI_DEFINED_Releases_lock
+#endif
+
+#if defined(_Releases_nonreentrant_lock_) && defined(SALIERI_DEFINED_Releases_nonreentrant_lock)
+#  undef _Releases_nonreentrant_lock_
+#endif
+#if !defined(_Releases_nonreentrant_lock_)
+#  define _Releases_nonreentrant_lock_(expr)
+#  define SALIERI_DEFINED_Releases_nonreentrant_lock
+#endif
+
+#if defined(_Releases_shared_lock_) && defined(SALIERI_DEFINED_Releases_shared_lock)
+#  undef _Releases_shared_lock_
+#endif
+#if !defined(_Releases_shared_lock_)
+#  define _Releases_shared_lock_(expr)
+#  define SALIERI_DEFINED_Releases_shared_lock
+#endif
+
+#if defined(_Requires_lock_held_) && defined(SALIERI_DEFINED_Requires_lock_held)
+#  undef _Requires_lock_held_
+#endif
+#if !defined(_Requires_lock_held_)
+#  define _Requires_lock_held_(expr)
+#  define SALIERI_DEFINED_Requires_lock_held
+#endif
+
+#if defined(_Requires_lock_not_held_) && defined(SALIERI_DEFINED_Requires_lock_not_held)
+#  undef _Requires_lock_not_held_
+#endif
+#if !defined(_Requires_lock_not_held_)
+#  define _Requires_lock_not_held_(expr)
+#  define SALIERI_DEFINED_Requires_lock_not_held
+#endif
+
+#if defined(_Requires_no_locks_held_) && defined(SALIERI_DEFINED_Requires_no_locks_held)
+#  undef _Requires_no_locks_held_
+#endif
+#if !defined(_Requires_no_locks_held_)
+#  define _Requires_no_locks_held_
+#  define SALIERI_DEFINED_Requires_no_locks_held
+#endif
+
+#if defined(_Requires_shared_lock_held_) && defined(SALIERI_DEFINED_Requires_shared_lock_held)
+#  undef _Requires_shared_lock_held_
+#endif
+#if !defined(_Requires_shared_lock_held_)
+#  define _Requires_shared_lock_held_(expr)
+#  define SALIERI_DEFINED_Requires_shared_lock_held
+#endif
+
+#if defined(_Requires_exclusive_lock_held_) && defined(SALIERI_DEFINED_Requires_exclusive_lock_held)
+#  undef _Requires_exclusive_lock_held_
+#endif
+#if !defined(_Requires_exclusive_lock_held_)
+#  define _Requires_exclusive_lock_held_(expr)
+#  define SALIERI_DEFINED_Requires_exclusive_lock_held
+#endif
+
+/* Shared Data Access Annotations */
+
+#if defined(_Guarded_by_) && defined(SALIERI_DEFINED_Guarded_by)
+#  undef _Guarded_by_
+#endif
+#if !defined(_Guarded_by_)
+#  define _Guarded_by_(expr)
+#  define SALIERI_DEFINED_Guarded_by
+#endif
+
+#if defined(_Interlocked_) && defined(SALIERI_DEFINED_Interlocked)
+#  undef _Interlocked_
+#endif
+#if !defined(_Interlocked_)
+#  define _Interlocked_
+#  define SALIERI_DEFINED_Interlocked
+#endif
+
+#if defined(_Interlocked_operand_) && defined(SALIERI_DEFINED_Interlocked_operand)
+#  undef _Interlocked_operand_
+#endif
+#if !defined(_Interlocked_operand_)
+#  define _Interlocked_operand_
+#  define SALIERI_DEFINED_Interlocked_operand
+#endif
+
+#if defined(_Write_guarded_by_) && defined(SALIERI_DEFINED_Write_guarded_by)
+#  undef _Write_guarded_by_
+#endif
+#if !defined(_Write_guarded_by_)
+#  define _Write_guarded_by_(expr)
+#  define SALIERI_DEFINED_Write_guarded_by
+#endif
+
+/* Specifying When and Where an Annotation Applies
+ *
+ * https://msdn.microsoft.com/en-us/library/jj159526.aspx
+ *****/
+
+#if defined(_At_) && defined(SALIERI_DEFINED_At)
+#  undef _At_
+#endif
+#if !defined(_At_)
+#  define _At_(expr, anno_list)
+#  define SALIERI_DEFINED_At
+#endif
+
+#if defined(_At_buffer_) && defined(SALIERI_DEFINED_At_buffer)
+#  undef _At_buffer_
+#endif
+#if !defined(_At_buffer_)
+#  define _At_buffer_(expr, iter, elem_count, anno_list)
+#  define SALIERI_DEFINED_At_buffer
+#endif
+
+#if defined(_Group_) && defined(SALIERI_DEFINED_Group)
+#  undef _Group_
+#endif
+#if !defined(_Group_)
+#  define _Group_(anno_list)
+#  define SALIERI_DEFINED_Group
+#endif
+
+#if defined(_When_) && defined(SALIERI_DEFINED_When)
+#  undef _When_
+#endif
+#if !defined(_When_)
+#  define _When_(expr, anno_list)
+#  define SALIERI_DEFINED_When
+#endif
+
+/* Intrinsic Functions
+ *
+ * https://msdn.microsoft.com/en-us/library/jj159527.aspx
+ *****/
+
+/* General Purpose */
+
+#if defined(_Curr_) && defined(SALIERI_DEFINED_Curr)
+#  undef _Curr_
+#endif
+#if !defined(_Curr_)
+#  define _Curr_
+#  define SALIERI_DEFINED_Curr
+#endif
+
+#if defined(_Inexpressible_) && defined(SALIERI_DEFINED_Inexpressible)
+#  undef _Inexpressible_
+#endif
+#if !defined(_Inexpressible_)
+#  define _Inexpressible_(expr)
+#  define SALIERI_DEFINED_Inexpressible
+#endif
+
+#if defined(_Nullterm_length_) && defined(SALIERI_DEFINED_Nullterm_length)
+#  undef _Nullterm_length_
+#endif
+#if !defined(_Nullterm_length_)
+#  define _Nullterm_length_(param)
+#  define SALIERI_DEFINED_Nullterm_length
+#endif
+
+#if defined(_Old_) && defined(SALIERI_DEFINED_Old)
+#  undef _Old_
+#endif
+#if !defined(_Old_)
+#  define _Old_(expr)
+#  define SALIERI_DEFINED_Old
+#endif
+
+#if defined(_Param_) && defined(SALIERI_DEFINED_Param)
+#  undef _Param_
+#endif
+#if !defined(_Param_)
+#  define _Param_(n)
+#  define SALIERI_DEFINED_Param
+#endif
+
+/* String Specific */
+
+#if defined(_String_length_) && defined(SALIERI_DEFINED_String_length)
+#  undef _String_length_
+#endif
+#if !defined(_String_length_)
+#  define _String_length_(param)
+#  define SALIERI_DEFINED_String_length
+#endif
+
+#if defined(SALIERI_VERSION)
+#  undef SALIERI_VERSION
+#endif
+
+#define SALIERI_VERSION 1
+
+#endif /* !defined(SALIERI_VERSION) || (SALIERI_VERSION < X) */