From 7c79de7f488b40034b70aadf56f507784c6d0faf Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 3 Mar 2010 12:39:52 +0000 Subject: [PATCH] - Move more stuff to wdm.h - Fix RTL_VERIFYMSG - Improve NLS_MB_CODE_PAGE_TAG and NLS_MB_OEM_CODE_PAGE_TAG - Fix/Improve some RTL and Guarded Mutex routines svn path=/branches/header-work/; revision=45785 --- include/ddk/wdm.h | 287 +++++++++++++++++++++++++++++++++++++++++++ include/ddk/winddk.h | 285 ------------------------------------------ 2 files changed, 287 insertions(+), 285 deletions(-) diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index 0b052938a6b..49161cdf384 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1476,6 +1476,71 @@ KeTestSpinLock( ); #endif +#if (NTDDI_VERSION >= NTDDI_WS03SP1) +NTKERNELAPI +BOOLEAN +KeAreAllApcsDisabled( + VOID); + +/* Guarded Mutex routines */ + +NTKERNELAPI +VOID +FASTCALL +KeAcquireGuardedMutex( + IN OUT PKGUARDED_MUTEX GuardedMutex +); + +NTKERNELAPI +VOID +FASTCALL +KeAcquireGuardedMutexUnsafe( + IN OUT PKGUARDED_MUTEX GuardedMutex +); + +NTKERNELAPI +VOID +KeEnterGuardedRegion( + VOID +); + +NTKERNELAPI +VOID +NTAPI +KeLeaveGuardedRegion( + VOID +); + +NTKERNELAPI +VOID +FASTCALL +KeInitializeGuardedMutex( + OUT PKGUARDED_MUTEX GuardedMutex +); + +NTKERNELAPI +VOID +FASTCALL +KeReleaseGuardedMutexUnsafe( + IN OUT PKGUARDED_MUTEX GuardedMutex +); + +NTKERNELAPI +VOID +FASTCALL +KeReleaseGuardedMutex( + IN OUT PKGUARDED_MUTEX GuardedMutex +); + +NTKERNELAPI +BOOLEAN +FASTCALL +KeTryToAcquireGuardedMutex( + IN OUT PKGUARDED_MUTEX GuardedMutex +); + +#endif + /* ** Utillity functions */ @@ -1512,6 +1577,112 @@ KeTestSpinLock( #define ROUND_TO_PAGES(Size) \ (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)) +#if defined(_X86_) || defined(_AMD64_) + +// +// x86 and x64 performs a 0x2C interrupt +// +#define DbgRaiseAssertionFailure __int2c + +#elif defined(_ARM_) + +// +// TODO +// + +#else +#error Unsupported Architecture +#endif + +#if DBG + +#define ASSERT(exp) \ + (VOID)((!(exp)) ? \ + RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE) + +#define ASSERTMSG(msg, exp) \ + (VOID)((!(exp)) ? \ + RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE) + +#define RTL_SOFT_ASSERT(exp) \ + (VOID)((!(exp)) ? \ + DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE) + +#define RTL_SOFT_ASSERTMSG(msg, exp) \ + (VOID)((!(exp)) ? \ + DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE) + +#define RTL_VERIFY(exp) ASSERT(exp) +#define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp) + +#define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp) +#define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp) + +#if defined(_MSC_VER) + +#define NT_ASSERT(exp) \ + ((!(exp)) ? \ + (__annotation(L"Debug", L"AssertFail", L#exp), \ + DbgRaiseAssertionFailure(), FALSE) : TRUE) + +#define NT_ASSERTMSG(msg, exp) \ + ((!(exp)) ? \ + (__annotation(L"Debug", L"AssertFail", L##msg), \ + DbgRaiseAssertionFailure(), FALSE) : TRUE) + +#define NT_ASSERTMSGW(msg, exp) \ + ((!(exp)) ? \ + (__annotation(L"Debug", L"AssertFail", msg), \ + DbgRaiseAssertionFailure(), FALSE) : TRUE) + +#else + +// +// GCC doesn't support __annotation (nor PDB) +// +#define NT_ASSERT(exp) \ + (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE) + +#define NT_ASSERTMSG NT_ASSERT +#define NT_ASSERTMSGW NT_ASSERT + +#endif + +#else /* !DBG */ + +#define ASSERT(exp) ((VOID) 0) +#define ASSERTMSG(msg, exp) ((VOID) 0) + +#define RTL_SOFT_ASSERT(exp) ((VOID) 0) +#define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0) + +#define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE) +#define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) + +#define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE) +#define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) + +#define NT_ASSERT(exp) ((VOID)0) +#define NT_ASSERTMSG(exp) ((VOID)0) +#define NT_ASSERTMSGW(exp) ((VOID)0) + +#endif /* DBG */ + +#ifdef _NTSYSTEM_ + +#define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag +#define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag + +#else + +#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag) +#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag) + +#endif /* _NTSYSTEM_ */ + +extern BOOLEAN NLS_MB_CODE_PAGE_TAG; +extern BOOLEAN NLS_MB_OEM_CODE_PAGE_TAG; + /****************************************************************************** * Memory manager Types * @@ -5057,6 +5228,122 @@ typedef struct _TIME_FIELDS { * RTL Functions * ******************************************************************************/ +FORCEINLINE +VOID +InitializeListHead( + OUT PLIST_ENTRY ListHead) +{ + ListHead->Flink = ListHead->Blink = ListHead; +} + +FORCEINLINE +VOID +InsertHeadList( + IN OUT PLIST_ENTRY ListHead, + IN OUT PLIST_ENTRY Entry) +{ + PLIST_ENTRY OldFlink; + OldFlink = ListHead->Flink; + Entry->Flink = OldFlink; + Entry->Blink = ListHead; + OldFlink->Blink = Entry; + ListHead->Flink = Entry; +} + +FORCEINLINE +VOID +InsertTailList( + IN OUT PLIST_ENTRY ListHead, + IN OUT PLIST_ENTRY Entry) +{ + PLIST_ENTRY OldBlink; + OldBlink = ListHead->Blink; + Entry->Flink = ListHead; + Entry->Blink = OldBlink; + OldBlink->Flink = Entry; + ListHead->Blink = Entry; +} + +/* + * BOOLEAN + * IsListEmpty( + * IN PLIST_ENTRY ListHead) + */ +#define IsListEmpty(_ListHead) \ + ((_ListHead)->Flink == (_ListHead)) + +/* + * PSINGLE_LIST_ENTRY + * PopEntryList( + * IN PSINGLE_LIST_ENTRY ListHead) + */ +#define PopEntryList(ListHead) \ +{ \ + PSINGLE_LIST_ENTRY _FirstEntry; \ + _FirstEntry = (ListHead)->Next; \ + if (_FirstEntry != NULL) \ + (ListHead)->Next = _FirstEntry->Next; \ +} + +/* + * VOID + * PushEntryList( + * IN PSINGLE_LIST_ENTRY ListHead, + * IN PSINGLE_LIST_ENTRY Entry) + */ +#define PushEntryList(_ListHead, _Entry) \ +{ + (_Entry)->Next = (_ListHead)->Next; \ + (_ListHead)->Next = (_Entry); \ +} + +FORCEINLINE +BOOLEAN +RemoveEntryList( + IN PLIST_ENTRY Entry) +{ + PLIST_ENTRY OldFlink; + PLIST_ENTRY OldBlink; + + OldFlink = Entry->Flink; + OldBlink = Entry->Blink; + OldFlink->Blink = OldBlink; + OldBlink->Flink = OldFlink; + return (BOOLEAN)(OldFlink == OldBlink); +} + +FORCEINLINE +PLIST_ENTRY +RemoveHeadList( + IN OUT PLIST_ENTRY ListHead) +{ + PLIST_ENTRY Flink; + PLIST_ENTRY Entry; + + Entry = ListHead->Flink; + Flink = Entry->Flink; + ListHead->Flink = Flink; + Flink->Blink = ListHead; + return Entry; +} + +FORCEINLINE +PLIST_ENTRY +RemoveTailList( + IN OUT PLIST_ENTRY ListHead) +{ + PLIST_ENTRY Blink; + PLIST_ENTRY Entry; + + Entry = ListHead->Blink; + Blink = Entry->Blink; + ListHead->Blink = Blink; + Blink->Flink = ListHead; + return Entry; +} + + + NTSYSAPI VOID NTAPI diff --git a/include/ddk/winddk.h b/include/ddk/winddk.h index 4e881c6894a..137f2dc4947 100644 --- a/include/ddk/winddk.h +++ b/include/ddk/winddk.h @@ -2242,229 +2242,9 @@ KeAcquireSpinLockRaiseToDpc( #endif // !defined (_X86_) -/* -** Utillity functions -*/ - #define ARGUMENT_PRESENT(ArgumentPointer) \ ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL) -#if defined(_X86_) || defined(_AMD64_) - -// -// x86 and x64 performs a 0x2C interrupt -// -#define DbgRaiseAssertionFailure __int2c - -#elif defined(_ARM_) - -// -// TODO -// - -#else -#error Unsupported Architecture -#endif - -#if DBG - -#define ASSERT(exp) \ - (VOID)((!(exp)) ? \ - RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE) - -#define ASSERTMSG(msg, exp) \ - (VOID)((!(exp)) ? \ - RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE) - -#define RTL_SOFT_ASSERT(exp) \ - (VOID)((!(exp)) ? \ - DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE) - -#define RTL_SOFT_ASSERTMSG(msg, exp) \ - (VOID)((!(exp)) ? \ - DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE) - -#define RTL_VERIFY(exp) ASSERT(exp) -#define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp) - -#define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp) -#define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp) - -#if defined(_MSC_VER) - -#define NT_ASSERT(exp) \ - ((!(exp)) ? \ - (__annotation(L"Debug", L"AssertFail", L#exp), \ - DbgRaiseAssertionFailure(), FALSE) : TRUE) - -#define NT_ASSERTMSG(msg, exp) \ - ((!(exp)) ? \ - (__annotation(L"Debug", L"AssertFail", L##msg), \ - DbgRaiseAssertionFailure(), FALSE) : TRUE) - -#define NT_ASSERTMSGW(msg, exp) \ - ((!(exp)) ? \ - (__annotation(L"Debug", L"AssertFail", msg), \ - DbgRaiseAssertionFailure(), FALSE) : TRUE) - -#else - -// -// GCC doesn't support __annotation (nor PDB) -// -#define NT_ASSERT(exp) \ - (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE) - -#define NT_ASSERTMSG NT_ASSERT -#define NT_ASSERTMSGW NT_ASSERT - -#endif - -#else /* !DBG */ - -#define ASSERT(exp) ((VOID) 0) -#define ASSERTMSG(msg, exp) ((VOID) 0) - -#define RTL_SOFT_ASSERT(exp) ((VOID) 0) -#define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0) - -#define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE) -#define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) - -#define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE) -#define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) - -#define NT_ASSERT(exp) ((VOID)0) -#define NT_ASSERTMSG(exp) ((VOID)0) -#define NT_ASSERTMSGW(exp) ((VOID)0) - -#endif /* DBG */ - -/* HACK HACK HACK - GCC (or perhaps LD) is messing this up */ -#if defined(_NTSYSTEM_) || defined(__GNUC__) -#define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag -#define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag -#else -#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag) -#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag) -#endif /* _NT_SYSTEM */ - -extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG; -extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG; - -/* -** Driver support routines -*/ - -/** Runtime library routines **/ - -static __inline VOID -InitializeListHead( - IN PLIST_ENTRY ListHead) -{ - ListHead->Flink = ListHead->Blink = ListHead; -} - -static __inline VOID -InsertHeadList( - IN PLIST_ENTRY ListHead, - IN PLIST_ENTRY Entry) -{ - PLIST_ENTRY OldFlink; - OldFlink = ListHead->Flink; - Entry->Flink = OldFlink; - Entry->Blink = ListHead; - OldFlink->Blink = Entry; - ListHead->Flink = Entry; -} - -static __inline VOID -InsertTailList( - IN PLIST_ENTRY ListHead, - IN PLIST_ENTRY Entry) -{ - PLIST_ENTRY OldBlink; - OldBlink = ListHead->Blink; - Entry->Flink = ListHead; - Entry->Blink = OldBlink; - OldBlink->Flink = Entry; - ListHead->Blink = Entry; -} - -/* - * BOOLEAN - * IsListEmpty( - * IN PLIST_ENTRY ListHead) - */ -#define IsListEmpty(_ListHead) \ - ((_ListHead)->Flink == (_ListHead)) - -/* - * PSINGLE_LIST_ENTRY - * PopEntryList( - * IN PSINGLE_LIST_ENTRY ListHead) - */ -#define PopEntryList(ListHead) \ - (ListHead)->Next; \ - { \ - PSINGLE_LIST_ENTRY _FirstEntry; \ - _FirstEntry = (ListHead)->Next; \ - if (_FirstEntry != NULL) \ - (ListHead)->Next = _FirstEntry->Next; \ - } - -/* - * VOID - * PushEntryList( - * IN PSINGLE_LIST_ENTRY ListHead, - * IN PSINGLE_LIST_ENTRY Entry) - */ -#define PushEntryList(_ListHead, _Entry) \ - (_Entry)->Next = (_ListHead)->Next; \ - (_ListHead)->Next = (_Entry); \ - -static __inline BOOLEAN -RemoveEntryList( - IN PLIST_ENTRY Entry) -{ - PLIST_ENTRY OldFlink; - PLIST_ENTRY OldBlink; - - OldFlink = Entry->Flink; - OldBlink = Entry->Blink; - OldFlink->Blink = OldBlink; - OldBlink->Flink = OldFlink; - return (BOOLEAN)(OldFlink == OldBlink); -} - -static __inline PLIST_ENTRY -RemoveHeadList( - IN PLIST_ENTRY ListHead) -{ - PLIST_ENTRY Flink; - PLIST_ENTRY Entry; - - Entry = ListHead->Flink; - Flink = Entry->Flink; - ListHead->Flink = Flink; - Flink->Blink = ListHead; - return Entry; -} - -static __inline PLIST_ENTRY -RemoveTailList( - IN PLIST_ENTRY ListHead) -{ - PLIST_ENTRY Blink; - PLIST_ENTRY Entry; - - Entry = ListHead->Blink; - Blink = Entry->Blink; - ListHead->Blink = Blink; - Blink->Flink = ListHead; - return Entry; -} - NTSYSAPI NTSTATUS NTAPI @@ -2616,71 +2396,6 @@ RtlWalkFrameChain( IN ULONG Count, IN ULONG Flags); -NTKERNELAPI -BOOLEAN -NTAPI -KeAreAllApcsDisabled( - VOID -); - -/* Guarded Mutex routines */ - -NTKERNELAPI -VOID -FASTCALL -KeAcquireGuardedMutex( - IN OUT PKGUARDED_MUTEX GuardedMutex -); - -NTKERNELAPI -VOID -FASTCALL -KeAcquireGuardedMutexUnsafe( - IN OUT PKGUARDED_MUTEX GuardedMutex -); - -NTKERNELAPI -VOID -NTAPI -KeEnterGuardedRegion( - VOID -); - -NTKERNELAPI -VOID -NTAPI -KeLeaveGuardedRegion( - VOID -); - -NTKERNELAPI -VOID -FASTCALL -KeInitializeGuardedMutex( - OUT PKGUARDED_MUTEX GuardedMutex -); - -NTKERNELAPI -VOID -FASTCALL -KeReleaseGuardedMutexUnsafe( - IN OUT PKGUARDED_MUTEX GuardedMutex -); - -NTKERNELAPI -VOID -FASTCALL -KeReleaseGuardedMutex( - IN OUT PKGUARDED_MUTEX GuardedMutex -); - -NTKERNELAPI -BOOLEAN -FASTCALL -KeTryToAcquireGuardedMutex( - IN OUT PKGUARDED_MUTEX GuardedMutex -); - /* Fast Mutex */ #define ExInitializeFastMutex(_FastMutex) \ { \ -- 2.17.1