diff --git a/reactos/include/ddk/wdm.h b/reactos/include/ddk/wdm.h index d202e315b20..74aac33f7cb 100644 --- a/reactos/include/ddk/wdm.h +++ b/reactos/include/ddk/wdm.h @@ -9621,6 +9621,10 @@ RtlFailFast( #define NO_KERNEL_LIST_ENTRY_CHECKS #endif +#if !defined(EXTRA_KERNEL_LIST_ENTRY_CHECKS) && defined(__REACTOS__) +#define EXTRA_KERNEL_LIST_ENTRY_CHECKS +#endif + #if !defined(MIDL_PASS) && !defined(SORTPP_PASS) #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x } @@ -9693,6 +9697,10 @@ RemoveEntryList( OldFlink = Entry->Flink; OldBlink = Entry->Blink; #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) +#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS + if (OldFlink == Entry || OldBlink == Entry) + FatalListEntryError(OldBlink, Entry, OldFlink); +#endif if (OldFlink->Blink != Entry || OldBlink->Flink != Entry) FatalListEntryError(OldBlink, Entry, OldFlink); #endif @@ -9711,6 +9719,10 @@ RemoveHeadList( #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG RtlpCheckListEntry(ListHead); +#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS + if (ListHead->Flink == ListHead || ListHead->Blink == ListHead) + FatalListEntryError(ListHead->Blink, ListHead, ListHead->Flink); +#endif #endif Entry = ListHead->Flink; Flink = Entry->Flink; @@ -9733,6 +9745,10 @@ RemoveTailList( #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG RtlpCheckListEntry(ListHead); +#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS + if (ListHead->Flink == ListHead || ListHead->Blink == ListHead) + FatalListEntryError(ListHead->Blink, ListHead, ListHead->Flink); +#endif #endif Entry = ListHead->Blink; Blink = Entry->Blink; diff --git a/reactos/include/xdk/rtlfuncs.h b/reactos/include/xdk/rtlfuncs.h index 394fb1ed39a..96e04860724 100644 --- a/reactos/include/xdk/rtlfuncs.h +++ b/reactos/include/xdk/rtlfuncs.h @@ -35,6 +35,10 @@ RtlFailFast( #define NO_KERNEL_LIST_ENTRY_CHECKS #endif +#if !defined(EXTRA_KERNEL_LIST_ENTRY_CHECKS) && defined(__REACTOS__) +#define EXTRA_KERNEL_LIST_ENTRY_CHECKS +#endif + #if !defined(MIDL_PASS) && !defined(SORTPP_PASS) #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x } @@ -107,6 +111,10 @@ RemoveEntryList( OldFlink = Entry->Flink; OldBlink = Entry->Blink; #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) +#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS + if (OldFlink == Entry || OldBlink == Entry) + FatalListEntryError(OldBlink, Entry, OldFlink); +#endif if (OldFlink->Blink != Entry || OldBlink->Flink != Entry) FatalListEntryError(OldBlink, Entry, OldFlink); #endif @@ -125,6 +133,10 @@ RemoveHeadList( #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG RtlpCheckListEntry(ListHead); +#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS + if (ListHead->Flink == ListHead || ListHead->Blink == ListHead) + FatalListEntryError(ListHead->Blink, ListHead, ListHead->Flink); +#endif #endif Entry = ListHead->Flink; Flink = Entry->Flink; @@ -147,6 +159,10 @@ RemoveTailList( #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG RtlpCheckListEntry(ListHead); +#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS + if (ListHead->Flink == ListHead || ListHead->Blink == ListHead) + FatalListEntryError(ListHead->Blink, ListHead, ListHead->Flink); +#endif #endif Entry = ListHead->Blink; Blink = Entry->Blink;