- kernelspecs.h: Add IRQL level defines, remove a duplicate annotation and make some definitions more consistent
- concurrencysal.h: Add missing annotations (only dummies so far)
- driverspecs.h: Add some missing annotations
- sal_old.h: remove __inner_callback, which is in sal.h

svn path=/trunk/; revision=66654
This commit is contained in:
Timo Kreuzer 2015-03-10 09:10:00 +00:00
parent ba96aa436b
commit bb60692b92
4 changed files with 159 additions and 22 deletions

View file

@ -27,6 +27,20 @@
#ifdef _PREFAST_
/* Make sure we have IRQL level definitions early */
#define DISPATCH_LEVEL 2
#define APC_LEVEL 1
#define PASSIVE_LEVEL 0
#if defined(_X86_)
#define HIGH_LEVEL 31
#elif defined(_AMD64_)
#define HIGH_LEVEL 15
#elif defined(_ARM_)
#define HIGH_LEVEL 15
#elif defined(_IA64_)
#define HIGH_LEVEL 15
#endif
#undef _IRQL_always_function_max_
#undef _IRQL_always_function_min_
#undef _IRQL_raises_
@ -68,18 +82,18 @@
#define _IRQL_saves_global_(kind,param) _Post_ _SA_annotes2(SAL_saveIRQLGlobal,#kind, param\t)
#define _IRQL_uses_cancel_ _Post_ _SA_annotes0(SAL_UseCancelIrql)
#define _IRQL_is_cancel_ _IRQL_uses_cancel_ _Releases_nonreentrant_lock_(_Global_cancel_spin_lock_) \
_At_(return, _IRQL_always_function_min_(2 /*DISPATCH_LEVEL*/) _IRQL_requires_(2 /*DISPATCH_LEVEL*/))
_At_(return, _IRQL_always_function_min_(DISPATCH_LEVEL) _IRQL_requires_(DISPATCH_LEVEL))
#define __drv_setsIRQL(irql) _Post_ _SA_annotes1(SAL_IRQL,irql)
#define __drv_raisesIRQL _IRQL_raises_
#define __drv_requiresIRQL _IRQL_requires_
#define __drv_maxIRQL _IRQL_requires_max_
#define __drv_minIRQL _IRQL_requires_min_
#define __drv_raisesIRQL(irql) _IRQL_raises_(irql)
#define __drv_requiresIRQL(irql) _IRQL_requires_(irql)
#define __drv_maxIRQL(irql) _IRQL_requires_max_(irql)
#define __drv_minIRQL(irql) _IRQL_requires_min_(irql)
#define __drv_savesIRQL _IRQL_saves_
#define __drv_savesIRQLGlobal _IRQL_saves_global_
#define __drv_savesIRQLGlobal(kind,param) _IRQL_saves_global_(kind,param)
#define __drv_restoresIRQL _IRQL_restores_
#define __drv_restoresIRQLGlobal _IRQL_restores_global_
#define __drv_minFunctionIRQL _IRQL_always_function_min_
#define __drv_maxFunctionIRQL _IRQL_always_function_max_
#define __drv_restoresIRQLGlobal(kind,param) _IRQL_restores_global_(kind,param)
#define __drv_minFunctionIRQL(irql) _IRQL_always_function_min_(irql)
#define __drv_maxFunctionIRQL(irql) _IRQL_always_function_max_(irql)
#define __drv_sameIRQL _IRQL_requires_same_
#define __drv_useCancelIRQL _IRQL_uses_cancel_
#define __drv_isCancelIRQL _IRQL_is_cancel_
@ -90,7 +104,6 @@ extern "C" {
__ANNOTATION(SAL_IRQL(__int64);)
__ANNOTATION(SAL_raiseIRQL(__int64);)
__ANNOTATION(SAL_IRQL(__int64);)
__ANNOTATION(SAL_maxIRQL(__int64);)
__ANNOTATION(SAL_minIRQL(__int64);)
__ANNOTATION(SAL_saveIRQL(void);)

View file

@ -20,13 +20,98 @@
*
*/
#if defined(_PREFAST_)
#define _Benign_race_begin_ __pragma(warning(push)) __pragma(warning(disable:26100 26101 26150 26130 26180 26131 26181 28112))
#define _Benign_race_end_ __pragma(warning(pop))
#define _No_competing_thread_begin_ __pragma(warning(push)) __pragma(warning(disable:26100 26101 26150 26101 26151 26110 26160 26130 26180 26131 26181 28112))
#define _No_competing_thread_end_ __pragma(warning(pop))
#define _Acquires_exclusive_lock_(lock)
#define _Acquires_lock_(lock)
#define _Acquires_nonreentrant_lock_(lock)
#define _Acquires_shared_lock_(lock)
#define _Analysis_assume_lock_acquired_(lock)
#define _Analysis_assume_lock_released_(lock)
#define _Analysis_assume_lock_held_(lock)
#define _Analysis_assume_lock_not_held_(lock)
#define _Analysis_assume_same_lock_(lock1, lock2)
#define _Analysis_suppress_lock_checking_(lock)
#define _Create_lock_level_(level)
#define _Csalcat1_(x,y)
#define _Csalcat2_(x,y)
#define _Function_ignore_lock_checking_(lock)
#define _Guarded_by_(lock)
#define _Has_lock_kind_(kind)
#define _Has_lock_level_(level)
#define _Interlocked_
#define _Internal_lock_level_order_(a,b)
#define _Lock_level_order_(a,b)
#define _No_competing_thread_
#define _Post_same_lock_(lock1,lock2)
#define _Releases_exclusive_lock_(lock)
#define _Releases_lock_(lock)
#define _Releases_nonreentrant_lock_(lock)
#define _Releases_shared_lock_(lock)
#define _Requires_exclusive_lock_held_(lock)
#define _Requires_shared_lock_held_(lock)
#define _Requires_lock_held_(lock)
#define _Requires_lock_not_held_(lock)
#define _Acquires_lock_(lock)
#define _Acquires_shared_lock_(lock)
#define _Acquires_exclusive_lock_(lock)
#define _Releases_lock_(lock)
#define _Post_same_lock_(lock1,lock2)
#define _Requires_no_locks_held_
#define _Write_guarded_by_(lock)
const char _Lock_kind_mutex_[] = "";
const char _Lock_kind_event_[] = "";
const char _Lock_kind_semaphore_[] = "";
const char _Lock_kind_spin_lock_[] = "";
const char _Lock_kind_critical_section_[] = "";
#else /* _PREFAST_ */
#define _Benign_race_begin_ __pragma(warning(push))
#define _Benign_race_end_ __pragma(warning(pop))
#define _No_competing_thread_begin_ __pragma(warning(push))
#define _No_competing_thread_end_ __pragma(warning(pop))
#define _Acquires_exclusive_lock_(lock)
#define _Acquires_lock_(lock)
#define _Acquires_nonreentrant_lock_(lock)
#define _Acquires_shared_lock_(lock)
#define _Analysis_assume_lock_acquired_(lock)
#define _Analysis_assume_lock_released_(lock)
#define _Analysis_assume_lock_held_(lock)
#define _Analysis_assume_lock_not_held_(lock)
#define _Analysis_assume_same_lock_(lock1, lock2)
#define _Analysis_suppress_lock_checking_(lock)
#define _Create_lock_level_(level)
#define _Csalcat1_(x,y)
#define _Csalcat2_(x,y)
#define _Function_ignore_lock_checking_(lock)
#define _Guarded_by_(lock)
#define _Has_lock_kind_(kind)
#define _Has_lock_level_(level)
#define _Interlocked_
#define _Internal_lock_level_order_(a,b)
#define _Lock_level_order_(a,b)
#define _No_competing_thread_
#define _Post_same_lock_(lock1,lock2)
#define _Releases_exclusive_lock_(lock)
#define _Releases_lock_(lock)
#define _Releases_nonreentrant_lock_(lock)
#define _Releases_shared_lock_(lock)
#define _Requires_exclusive_lock_held_(lock)
#define _Requires_shared_lock_held_(lock)
#define _Requires_lock_held_(lock)
#define _Requires_lock_not_held_(lock)
#define _Requires_no_locks_held_
#define _Write_guarded_by_(lock)
#endif /* _PREFAST_ */
#if 0 /* Check these */
#define _Internal_set_lock_count_(lock, count)
#define _Internal_set_lock_count_to_zero_(lock)
#define _Internal_set_lock_count_to_one_(lock)
#endif // 0

View file

@ -13,6 +13,7 @@
#include <specstrings.h>
#endif
//#include "sdv_driverspecs.h"
#include <concurrencysal.h>
#ifdef _PREFAST_
@ -34,7 +35,7 @@
#define _IRQL_uses_cancel_
#define __drv_setsIRQL(irql)
#define _Dispatch_type_ _Function_class_
#define _Dispatch_type_(x) _Function_class_(x)
#define _Kernel_clear_do_init_(yesNo) _Post_ _SA_annotes1(SAL_clearDoInit,yesNo)
#define _Kernel_float_restored_ _Post_ _SA_annotes0(SAL_floatRestored)
#define _Kernel_float_saved_ _Post_ _SA_annotes0(SAL_floatSaved)
@ -44,7 +45,7 @@
#define _Kernel_requires_resource_held_(kind) _Pre_ _SA_annotes1(SAL_mustHold, #kind)
#define _Kernel_requires_resource_not_held_(kind) _Pre_ _SA_annotes1(SAL_neverHold, #kind)
#define _Kernel_acquires_resource_(kind) _Post_ _SA_annotes1(SAL_acquire, #kind)
#define _Landmark_(name)
#define __drv_acquiresCancelSpinLock _Acquires_nonreentrant_lock_(_Global_cancel_spin_lock_)
#define __drv_acquiresCriticalRegion _Acquires_lock_(_Global_critical_region_)
#define __drv_acquiresExclusiveResource(kind) _Acquires_nonreentrant_lock_(_Curr_)
@ -70,7 +71,7 @@
#define __drv_formatString(kind) _SA_annotes1(SAL_IsFormatString, #kind)
#define __drv_freesMem(kind) _Post_ _SA_annotes1(SAL_NeedsRelease,__no)
#define __drv_fun(annotes) _At_(return, annotes)
#define __drv_functionClass _Function_class_
#define __drv_functionClass(x) _Function_class_(x)
#define __drv_holdsCancelSpinLock() _Holds_resource_global_("CancelSpinLock",)
#define __drv_holdsCriticalRegion() _Holds_resource_global_("CriticalRegion",)
#define __drv_holdsPriorityRegion() _Holds_resource_global_("PriorityRegion",)
@ -81,6 +82,7 @@
#define __drv_innerNeverHoldGlobal(kind,param)
#define __drv_innerReleasesGlobal(kind,param)
#define __drv_interlocked
#define __drv_inTry
#define __drv_IoGetDmaAdapter
#define __drv_isCancelIRQL _IRQL_is_cancel_
#define __drv_isObjectPointer
@ -118,7 +120,7 @@
#define __drv_reportError(why)
#define __drv_requiresIRQL(irql)
#define __drv_restoresIRQL
#define __drv_restoresIRQLGlobal
#define __drv_restoresIRQLGlobal(kind,param)
#define __drv_ret(annotes)
#define __drv_sameIRQL
#define __drv_savesIRQL
@ -143,8 +145,19 @@
#define ___drv_unit_user_code
#define ___drv_unit_user_driver
#define __drv_typeConst 0
#define __drv_typeCond 1
#define __drv_typeBitset 2
#define __drv_typeExpr 3
#ifdef __cplusplus
extern "C" {
#endif
__ANNOTATION(SAL_neverHold(_In_ char *);)
__ANNOTATION(SAL_neverHoldGlobal(__In_impl_ char *, ...);)
__ANNOTATION(SAL_acquire(_In_ char *);)
__ANNOTATION(SAL_acquireGlobal(__In_impl_ char *, ...);)
__ANNOTATION(SAL_floatUsed(void);)
__ANNOTATION(SAL_floatSaved(void);)
__ANNOTATION(SAL_floatRestored(void);)
@ -153,8 +166,34 @@ __ANNOTATION(SAL_maxIRQL(__int64);)
__ANNOTATION(SAL_IsAliased(void);)
__ANNOTATION(SAL_NeedsRelease(enum __SAL_YesNo);)
__ANNOTATION(SAL_mustHold(_In_ char *);)
__ANNOTATION(SAL_mustHoldGlobal(__In_impl_ char *, ...);)
__ANNOTATION(SAL_release(_In_ char *);)
__ANNOTATION(SAL_releaseGlobal(__In_impl_ char *, ...);)
__ANNOTATION(SAL_IoGetDmaAdapter(void);)
__ANNOTATION(SAL_kernel();)
__ANNOTATION(SAL_nokernel();)
__ANNOTATION(SAL_driver();)
__ANNOTATION(SAL_nodriver();)
__ANNOTATION(SAL_internal_kernel_driver();)
__ANNOTATION(SAL_landmark(__In_impl_ char *);)
__ANNOTATION(SAL_return(__In_impl_ __AuToQuOtE char *);)
__ANNOTATION(SAL_strictType(__In_impl_ __AuToQuOtE char *);)
__ANNOTATION(SAL_strictTypeMatch(__int64);)
__ANNOTATION(SAL_preferredFunction(__In_impl_ __AuToQuOtE char *, __In_impl_ __AuToQuOtE char *);)
__ANNOTATION(SAL_preferredFunction3(__In_impl_ __AuToQuOtE char *, __In_impl_ __AuToQuOtE char *, __In_impl_ __int64);)
__ANNOTATION(SAL_error(__In_impl_ __AuToQuOtE char *);)
__ANNOTATION(SAL_error2(__In_impl_ __AuToQuOtE char *, __In_impl_ __int64);)
__ANNOTATION(SAL_IsFormatString(__In_impl_ char *);)
__ANNOTATION(SAL_completionType(__In_impl_ __AuToQuOtE char *);)
__ANNOTATION(SAL_callbackType(__In_impl_ __AuToQuOtE char *);)
//__PRIMOP(int, _Holds_resource_(__In_impl_ __deferTypecheck char *,__In_impl_ char *);)
//__PRIMOP(int, _Holds_resource_global_(__In_impl_ char *, ...);)
//__PRIMOP(int, _Is_kernel_(void);)
//__PRIMOP(int, _Is_driver_(void);)
#ifdef __cplusplus
}
#endif
#else
@ -182,6 +221,7 @@ __ANNOTATION(SAL_IoGetDmaAdapter(void);)
#define _Kernel_requires_resource_held_(kind)
#define _Kernel_requires_resource_not_held_(kind)
#define _Kernel_acquires_resource_(kind)
#define _Landmark_(name)
#define __drv_acquiresCancelSpinLock
#define __drv_acquiresCriticalRegion
#define __drv_acquiresExclusiveResource(kind)
@ -218,6 +258,7 @@ __ANNOTATION(SAL_IoGetDmaAdapter(void);)
#define __drv_innerNeverHoldGlobal(kind,param)
#define __drv_innerReleasesGlobal(kind,param)
#define __drv_interlocked
#define __drv_inTry
#define __drv_IoGetDmaAdapter
#define __drv_isCancelIRQL
#define __drv_isObjectPointer
@ -255,7 +296,7 @@ __ANNOTATION(SAL_IoGetDmaAdapter(void);)
#define __drv_reportError(why)
#define __drv_requiresIRQL(irql)
#define __drv_restoresIRQL
#define __drv_restoresIRQLGlobal
#define __drv_restoresIRQLGlobal(kind,param)
#define __drv_ret(annotes)
#define __drv_sameIRQL
#define __drv_savesIRQL

View file

@ -45,7 +45,6 @@
#define __exceptthat __declspec("SAL_except")
#define __execeptthat __exceptthat
#define __inner_blocksOn(resource) __declspec("SAL_blocksOn("SPECSTRINGIZE(resource)")")
#define __inner_callback __declspec("__callback")
#define __inner_checkReturn __declspec("SAL_checkReturn")
#define __inner_control_entrypoint(category) __declspec("SAL_entrypoint(controlEntry, "SPECSTRINGIZE(category)")")
#define __inner_data_entrypoint(category) __declspec("SAL_entrypoint(dataEntry, "SPECSTRINGIZE(category)")")
@ -80,7 +79,6 @@
#define __exceptthat
#define __execeptthat
#define __inner_blocksOn(resource)
#define __inner_callback
#define __inner_checkReturn
#define __inner_control_entrypoint(category)
#define __inner_data_entrypoint(category)