From a0bbb9ef99a812c67ccd9a2f16016c01b2867444 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 11 Sep 2024 10:57:42 +0300 Subject: [PATCH] [XDK] Improve unaligned pointer read macros - The #if was missing x86 (Windows SDK bug!) - The unaligned attribute was on the wrong side (Windows SDK bug!) - Add a comment that these are unsafe and shouldn't be used --- sdk/include/xdk/rtlfuncs.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/sdk/include/xdk/rtlfuncs.h b/sdk/include/xdk/rtlfuncs.h index 88fd0f76baa..8f5ed2854ba 100644 --- a/sdk/include/xdk/rtlfuncs.h +++ b/sdk/include/xdk/rtlfuncs.h @@ -829,7 +829,13 @@ RtlSetDaclSecurityDescriptor( _In_opt_ PACL Dacl, _In_opt_ BOOLEAN DaclDefaulted); -#if defined(_AMD64_) +// +// These functions are really bad and shouldn't be used. +// They have no type checking and can easily overwrite the target +// variable or only set half of it. +// Use Read/WriteUnalignedU16/U32/U64 from reactos/unaligned.h instead. +// +#if defined(_AMD64_) || defined(_M_AMD64) || defined(_X86) || defined(_M_IX86) /* VOID * RtlStoreUlong( @@ -861,7 +867,7 @@ RtlSetDaclSecurityDescriptor( * PUSHORT SourceAddress); */ #define RtlRetrieveUshort(DestAddress,SrcAddress) \ - *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress) + *(USHORT*)(DestAddress) = *(USHORT UNALIGNED *)(SrcAddress) /* VOID * RtlRetrieveUlong( @@ -869,7 +875,7 @@ RtlSetDaclSecurityDescriptor( * PULONG SourceAddress); */ #define RtlRetrieveUlong(DestAddress,SrcAddress) \ - *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress) + *(ULONG*)(DestAddress) = *(ULONG UNALIGNED *)(SrcAddress) #else @@ -927,7 +933,7 @@ RtlSetDaclSecurityDescriptor( *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \ } -#endif /* defined(_AMD64_) */ +#endif /* defined(_AMD64_) || defined(_M_AMD64) || defined(_X86) || defined(_M_IX86) */ #ifdef _WIN64 /* VOID