#define UInt32x32To64(a,b) ((unsigned __int64)(unsigned int)(a)*(unsigned __int64)(unsigned int)(b))
#endif
-#if defined(MIDL_PASS)|| defined(RC_INVOKED) || defined(_M_CEE_PURE)
+#if defined(MIDL_PASS)|| defined(RC_INVOKED) || defined(_M_CEE_PURE) || defined(_M_ARM)
/* Use native math */
#define Int64ShllMod32(a,b) ((unsigned __int64)(a)<<(b))
#define Int64ShraMod32(a,b) (((__int64)(a))>>(b))
#define LOCALE_CUSTOM_UI_DEFAULT MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT), SORT_DEFAULT)
#define LOCALE_NEUTRAL MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT)
#define LOCALE_INVARIANT MAKELCID(MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT)
+/******************************************************************************
+ * INTERLOCKED Functions *
+ ******************************************************************************/
+
+#define BitScanForward _BitScanForward
+#define BitScanReverse _BitScanReverse
+#define BitTest _bittest
+#define BitTestAndComplement _bittestandcomplement
+#define BitTestAndSet _bittestandset
+#define BitTestAndReset _bittestandreset
+#ifdef _WIN64
+#define BitScanForward64 _BitScanForward64
+#define BitScanReverse64 _BitScanReverse64
+#define BitTest64 _bittest64
+#define BitTestAndComplement64 _bittestandcomplement64
+#define BitTestAndSet64 _bittestandset64
+#define BitTestAndReset64 _bittestandreset64
+#endif /* _WIN64 */
+
+#if defined(_M_ARM) || defined(_M_IA64)
+#define __ACQ_(x) x##_acq
+#define __REL_(x) x##_rel
+#define __NF_(x) x##_nf
+#else
+#define __ACQ_(x) x
+#define __REL_(x) x
+#define __NF_(x) x
+#endif
+
+#define InterlockedBitTestAndSet _interlockedbittestandset
+#define InterlockedBitTestAndSetAcquire __ACQ_(_interlockedbittestandset)
+#define InterlockedBitTestAndSetRelease __REL_(_interlockedbittestandset)
+#define InterlockedBitTestAndSetNoFence __NF_(_interlockedbittestandset)
+
+#define InterlockedBitTestAndReset _interlockedbittestandreset
+#define InterlockedBitTestAndResetAcquire __ACQ_(_interlockedbittestandreset)
+#define InterlockedBitTestAndResetRelease __REL_(_interlockedbittestandreset)
+#define InterlockedBitTestAndResetNoFence __NF_(_interlockedbittestandreset)
+
+#ifdef _WIN64
+#define InterlockedBitTestAndSet64 _interlockedbittestandset64
+#define InterlockedBitTestAndSet64Acquire __ACQ_(_interlockedbittestandset64)
+#define InterlockedBitTestAndSet64Release __REL_(_interlockedbittestandset64)
+#define InterlockedBitTestAndSet64NoFence __NF_(_interlockedbittestandset64)
+
+#define InterlockedBitTestAndReset64 _interlockedbittestandreset64
+#define InterlockedBitTestAndReset64Acquire __ACQ_(_interlockedbittestandreset64)
+#define InterlockedBitTestAndReset64Release __REL_(_interlockedbittestandreset64)
+#define InterlockedBitTestAndReset64NoFence __NF_(_interlockedbittestandreset64)
+#endif /* _WIN64 */
+
+#define InterlockedAdd _InterlockedAdd
+#define InterlockedAddAcquire __ACQ_(_InterlockedAdd)
+#define InterlockedAddRelease __REL_(_InterlockedAdd)
+#define InterlockedAddNoFence __NF_(_InterlockedAdd)
+
+#define InterlockedAdd64 _InterlockedAdd64
+#define InterlockedAddAcquire64 __ACQ_(_InterlockedAdd64)
+#define InterlockedAddRelease64 __REL_(_InterlockedAdd64)
+#define InterlockedAddNoFence64 __NF_(_InterlockedAdd64)
+
+#define InterlockedAnd _InterlockedAnd
+#define InterlockedAndAcquire __ACQ_(_InterlockedAnd)
+#define InterlockedAndRelease __REL_(_InterlockedAnd)
+#define InterlockedAndNoFence __NF_(_InterlockedAnd)
+
+#define InterlockedAnd8 _InterlockedAnd8
+#ifdef _M_ARM
+#define InterlockedAndAcquire8 _InterlockedAnd8_acq
+#define InterlockedAndRelease8 _InterlockedAnd8_rel
+#define InterlockedAndNoFence8 _InterlockedAnd8_nf
+#elif defined(_M_IA64)
+#define InterlockedAnd8Acquire _InterlockedAnd8_acq
+#define InterlockedAnd8Release _InterlockedAnd8_rel
+#endif // _M_ARM
+
+#define InterlockedAnd16 _InterlockedAnd16
+#ifdef _M_ARM
+#define InterlockedAndAcquire16 _InterlockedAnd16_acq
+#define InterlockedAndRelease16 _InterlockedAnd16_rel
+#define InterlockedAndNoFence16 _InterlockedAnd16_nf
+#elif defined(_M_IA64)
+#define InterlockedAnd16Acquire _InterlockedAnd16_acq
+#define InterlockedAnd16Release _InterlockedAnd16_rel
+#endif // _M_ARM
+
+#define InterlockedAnd64 _InterlockedAnd64
+#ifdef _M_ARM
+#define InterlockedAndAcquire64 __ACQ_(_InterlockedAnd64)
+#define InterlockedAndRelease64 __REL_(_InterlockedAnd64)
+#define InterlockedAndNoFence64 __NF_(_InterlockedAnd64)
+#else // _M_ARM
+#define InterlockedAnd64Acquire __ACQ_(_InterlockedAnd64)
+#define InterlockedAnd64Release __REL_(_InterlockedAnd64)
+#define InterlockedAnd64NoFence __NF_(_InterlockedAnd64)
+#endif // _M_ARM
+
+#ifdef _WIN64
+#define InterlockedAndAffinity InterlockedAnd64
+#else
+#define InterlockedAndAffinity InterlockedAnd
+#endif // _WIN64
+
+#define InterlockedCompareExchange _InterlockedCompareExchange
+#define InterlockedCompareExchangeAcquire __ACQ_(_InterlockedCompareExchange)
+#define InterlockedCompareExchangeRelease __REL_(_InterlockedCompareExchange)
+#define InterlockedCompareExchangeNoFence __NF_(_InterlockedCompareExchange)
+
+#define InterlockedCompareExchange16 _InterlockedCompareExchange16
+#define InterlockedCompareExchangeAcquire16 __ACQ_(_InterlockedCompareExchange16)
+#define InterlockedCompareExchangeRelease16 __REL_(_InterlockedCompareExchange16)
+#define InterlockedCompareExchangeNoFence16 __NF_(_InterlockedCompareExchange16)
+
+#define InterlockedCompareExchange64 _InterlockedCompareExchange64
+#define InterlockedCompareExchangeAcquire64 __ACQ_(_InterlockedCompareExchange64)
+#define InterlockedCompareExchangeRelease64 __REL_(_InterlockedCompareExchange64)
+#define InterlockedCompareExchangeNoFence64 __NF_(_InterlockedCompareExchange64)
+
+#ifdef _WIN64
+#define InterlockedCompareExchange128 _InterlockedCompareExchange128
+#endif // _WIN64
+
+#ifdef _M_IA64
+#define InterlockedCompare64Exchange128 _InterlockedCompare64Exchange128
+#define InterlockedCompare64ExchangeAcquire128 _InterlockedCompare64Exchange128_acq
+#define InterlockedCompare64ExchangeRelease128 _InterlockedCompare64Exchange128_rel
+#endif // _M_IA64
+
+#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
+#define InterlockedCompareExchangePointerAcquire __ACQ_(_InterlockedCompareExchangePointer)
+#define InterlockedCompareExchangePointerRelease __REL_(_InterlockedCompareExchangePointer)
+#define InterlockedCompareExchangePointerNoFence __NF_(_InterlockedCompareExchangePointer)
+
+#define InterlockedDecrement _InterlockedDecrement
+#define InterlockedDecrementAcquire __ACQ_(_InterlockedDecrement)
+#define InterlockedDecrementRelease __REL_(_InterlockedDecrement)
+#define InterlockedDecrementNoFence __NF_(_InterlockedDecrement)
+
+#define InterlockedDecrement16 _InterlockedDecrement16
+#define InterlockedDecrementAcquire16 __ACQ_(_InterlockedDecrement16)
+#define InterlockedDecrementRelease16 __REL_(_InterlockedDecrement16)
+#define InterlockedDecrementNoFence16 __NF_(_InterlockedDecrement16)
+
+#define InterlockedDecrement64 _InterlockedDecrement64
+#define InterlockedDecrementAcquire64 __ACQ_(_InterlockedDecrement64)
+#define InterlockedDecrementRelease64 __REL_(_InterlockedDecrement64)
+#define InterlockedDecrementNoFence64 __NF_(_InterlockedDecrement64)
+
+#ifdef _WIN64
+#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
+#define InterlockedDecrementSizeTNoFence(a) InterlockedDecrementNoFence64((LONG64 *)a)
+#else
+#define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
+#define InterlockedDecrementSizeTNoFence(a) InterlockedDecrementNoFence((LONG *)a)
+#endif // _WIN64
+
+#define InterlockedExchange _InterlockedExchange
+#define InterlockedExchangeAcquire __ACQ_(_InterlockedExchange)
+/* No release here */
+#define InterlockedExchangeNoFence __NF_(_InterlockedExchange)
+
+#if (_MSC_VER >= 1600)
+#define InterlockedExchange8 _InterlockedExchange8
+#endif // (_MSC_VER >= 1600)
+
+#define InterlockedExchange16 _InterlockedExchange16
+/* No release here */
+#define InterlockedExchangeAcquire16 __ACQ_(_InterlockedExchange16)
+#define InterlockedExchangeNoFence16 __NF_(_InterlockedExchange16)
+
+#define InterlockedExchange64 _InterlockedExchange64
+#define InterlockedExchangeAcquire64 __ACQ_(_InterlockedExchange64)
+/* No release here */
+#define InterlockedExchangeNoFence64 __NF_(_InterlockedExchange64)
+
+#define InterlockedExchangePointer _InterlockedExchangePointer
+#define InterlockedExchangePointerAcquire __ACQ_(_InterlockedExchangePointer)
+/* No release here */
+#define InterlockedExchangePointerNoFence __NF_(_InterlockedExchangePointer)
+
+#define InterlockedExchangeAdd _InterlockedExchangeAdd
+#define InterlockedExchangeAddAcquire __ACQ_(_InterlockedExchangeAdd)
+#define InterlockedExchangeAddRelease __REL_(_InterlockedExchangeAdd)
+#define InterlockedExchangeAddNoFence __NF_(_InterlockedExchangeAdd)
+
+#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
+#define InterlockedExchangeAddAcquire64 __ACQ_(_InterlockedExchangeAdd64)
+#define InterlockedExchangeAddRelease64 __REL_(_InterlockedExchangeAdd64)
+#define InterlockedExchangeAddNoFence64 __NF_(_InterlockedExchangeAdd64)
+
+#ifdef _WIN64
+#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONG64 *)a, b)
+#define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAddAcquire64((LONG64 *)a, b)
+#define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAddNoFence64((LONG64 *)a, b)
+#else
+#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
+#define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAddAcquire((LONG *)a, b)
+#define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAddNoFence((LONG *)a, b)
+#endif // _WIN64
+
+#define InterlockedIncrement _InterlockedIncrement
+#define InterlockedIncrementAcquire __ACQ_(_InterlockedIncrement)
+#define InterlockedIncrementRelease __REL_(_InterlockedIncrement)
+#define InterlockedIncrementNoFence __NF_(_InterlockedIncrement)
+
+#define InterlockedIncrement16 _InterlockedIncrement16
+#define InterlockedIncrementAcquire16 __ACQ_(_InterlockedIncrement16)
+#define InterlockedIncrementRelease16 __REL_(_InterlockedIncrement16)
+#define InterlockedIncrementNoFence16 __NF_(_InterlockedIncrement16)
+
+#define InterlockedIncrement64 _InterlockedIncrement64
+#define InterlockedIncrementAcquire64 __ACQ_(_InterlockedIncrement64)
+#define InterlockedIncrementRelease64 __REL_(_InterlockedIncrement64)
+#define InterlockedIncrementNoFence64 __NF_(_InterlockedIncrement64)
+
+#ifdef _WIN64
+#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
+#define InterlockedIncrementSizeTNoFence(a) InterlockedIncrementNoFence64((LONG64 *)a)
+#else
+#define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
+#define InterlockedIncrementSizeTNoFence(a) InterlockedIncrementNoFence((LONG *)a)
+#endif // _WIN64
+
+#define InterlockedOr _InterlockedOr
+#define InterlockedOrAcquire __ACQ_(_InterlockedOr)
+#define InterlockedOrRelease __REL_(_InterlockedOr)
+#define InterlockedOrNoFence __NF_(_InterlockedOr)
+
+#define InterlockedOr8 _InterlockedOr8
+#ifdef _M_ARM
+#define InterlockedOrAcquire8 _InterlockedOr8_acq
+#define InterlockedOrRelease8 _InterlockedOr8_rel
+#define InterlockedOrNoFence8 _InterlockedOr8_nf
+#elif defined(_M_IA64)
+#define InterlockedOr8Acquire _InterlockedOr8_acq
+#define InterlockedOr8Release _InterlockedOr8_rel
+#endif // _M_ARM
+
+#define InterlockedOr16 _InterlockedOr16
+#ifdef _M_ARM
+#define InterlockedOrAcquire16 _InterlockedOr16_acq
+#define InterlockedOrRelease16 _InterlockedOr16_rel
+#define InterlockedOrNoFence16 _InterlockedOr16_nf
+#elif defined(_M_IA64)
+#define InterlockedOr16Acquire _InterlockedOr16_acq
+#define InterlockedOr16Release _InterlockedOr16_rel
+#endif // _M_ARM
+
+#define InterlockedOr64 _InterlockedOr64
+#ifdef _M_ARM
+#define InterlockedOrAcquire64 _InterlockedOr64_acq
+#define InterlockedOrRelease64 _InterlockedOr64_rel
+#define InterlockedOrNoFence64 _InterlockedOr64_nf
+#elif defined(_M_IA64) || defined(_M_AMD64)
+#define InterlockedOr64Acquire __ACQ_(_InterlockedOr64)
+#define InterlockedOr64Release __REL_(_InterlockedOr64)
+#define InterlockedOr64NoFence __NF_(_InterlockedOr64)
+#endif // _M_ARM
+
+#ifdef _WIN64
+#define InterlockedOrAffinity InterlockedOr64
+#else
+#define InterlockedOrAffinity InterlockedOr
+#endif // _WIN64
+
+#define InterlockedXor _InterlockedXor
+#define InterlockedXorAcquire __ACQ_(_InterlockedXor)
+#define InterlockedXorRelease __REL_(_InterlockedXor)
+#define InterlockedXorNoFence __NF_(_InterlockedXor)
+
+#define InterlockedXor8 _InterlockedXor8
+#ifdef _M_ARM
+#define InterlockedXorAcquire8 _InterlockedXor8_acq
+#define InterlockedXorRelease8 _InterlockedXor8_rel
+#define InterlockedXorNoFence8 _InterlockedXor8_nf
+#elif defined(_M_IA64)
+#define InterlockedXor8Acquire _InterlockedXor8_acq
+#define InterlockedXor8Release _InterlockedXor8_rel
+#endif /* _M_ARM */
+
+#define InterlockedXor16 _InterlockedXor16
+#ifdef _M_ARM
+#define InterlockedXorAcquire16 _InterlockedXor16_acq
+#define InterlockedXorRelease16 _InterlockedXor16_rel
+#define InterlockedXorNoFence16 _InterlockedXor16_nf
+#elif defined(_M_IA64)
+#define InterlockedXor16Acquire _InterlockedXor16_acq
+#define InterlockedXor16Release _InterlockedXor16_rel
+#endif /* _M_ARM */
+
+#define InterlockedXor64 _InterlockedXor64
+#ifdef _M_ARM
+#define InterlockedXorAcquire64 _InterlockedXor64_acq
+#define InterlockedXorRelease64 _InterlockedXor64_rel
+#define InterlockedXorNoFence64 _InterlockedXor64_nf
+#elif defined(_M_IA64) || defined(_M_AMD64)
+#define InterlockedXor64Acquire __ACQ_(_InterlockedXor64)
+#define InterlockedXor64Release __REL_(_InterlockedXor64)
+#define InterlockedXor64NoFence __NF_(_InterlockedXor64)
+#endif /* _M_ARM */
+
+#ifdef _M_IX86
+
+FORCEINLINE
+LONG64
+_InterlockedExchange64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target,
+ _In_ LONG64 Value)
+{
+ LONG64 Old, Prev;
+ for (Old = *Target; ; Old = Prev)
+ {
+ Prev = _InterlockedCompareExchange64(Target, Value, Old);
+ if (Prev == Old)
+ return Prev;
+ }
+}
+
+FORCEINLINE
+LONG64
+_InterlockedAdd64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target,
+ _In_ LONG64 Value)
+{
+ LONG64 Old, Prev, New;
+ for (Old = *Target; ; Old = Prev)
+ {
+ New = Old + Value;
+ Prev = _InterlockedCompareExchange64(Target, New, Old);
+ if (Prev == Old)
+ return New;
+ }
+}
+
+FORCEINLINE
+LONG64
+_InterlockedExchangeAdd64 (
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target,
+ _In_ LONG64 Value
+ )
+{
+ LONG64 Old, Prev, New;
+ for (Old = *Target; ; Old = Prev)
+ {
+ New = Old + Value;
+ Prev = _InterlockedCompareExchange64(Target, New, Old);
+ if (Prev == Old)
+ return Prev;
+ }
+}
+
+FORCEINLINE
+LONG64
+_InterlockedAnd64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target,
+ _In_ LONG64 Value)
+{
+ LONG64 Old, Prev, New;
+ for (Old = *Target; ; Old = Prev)
+ {
+ New = Old & Value;
+ Prev = _InterlockedCompareExchange64(Target, New, Old);
+ if (Prev == Old)
+ return New;
+ }
+}
+
+FORCEINLINE
+LONG64
+_InterlockedOr64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target,
+ _In_ LONG64 Value)
+{
+ LONG64 Old, Prev, New;
+ for (Old = *Target; ; Old = Prev)
+ {
+ New = Old | Value;
+ Prev = _InterlockedCompareExchange64(Target, New, Old);
+ if (Prev == Old)
+ return New;
+ }
+}
+
+FORCEINLINE
+LONG64
+_InterlockedXor64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target,
+ _In_ LONG64 Value)
+{
+ LONG64 Old, Prev, New;
+ for (Old = *Target; ; Old = Prev)
+ {
+ New = Old ^ Value;
+ Prev = _InterlockedCompareExchange64(Target, New, Old);
+ if (Prev == Old)
+ return New;
+ }
+}
+
+FORCEINLINE
+LONG64
+_InterlockedIncrement64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target)
+{
+ return _InterlockedAdd64(Target, 1);
+}
+
+FORCEINLINE
+LONG64
+_InterlockedDecrement64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target)
+{
+ return _InterlockedAdd64(Target, -1);
+}
+
+#undef _InterlockedExchangePointer
+#define _InterlockedExchangePointer _InlineInterlockedExchangePointer
+FORCEINLINE
+_Ret_writes_(_Inexpressible_(Unknown))
+PVOID
+_InterlockedExchangePointer(
+ _Inout_ _At_(*Destination, _Pre_writable_byte_size_(_Inexpressible_(Unknown))
+ _Post_writable_byte_size_(_Inexpressible_(Unknown)))
+ _Interlocked_operand_ volatile PVOID *Destination,
+ _In_opt_ PVOID Value)
+{
+ return (PVOID)InterlockedExchange((volatile long *)Destination, (long)Value);
+}
+
+#undef _InterlockedCompareExchangePointer
+#define _InterlockedCompareExchangePointer _InlineInterlockedCompareExchangePointer
+FORCEINLINE
+_Ret_writes_(_Inexpressible_(Unknown))
+PVOID
+_InterlockedCompareExchangePointer(
+ _Inout_ _At_(*Destination, _Pre_writable_byte_size_(_Inexpressible_(Unknown))
+ _Post_writable_byte_size_(_Inexpressible_(Unknown)))
+ _Interlocked_operand_ volatile PVOID *Destination,
+ _In_opt_ PVOID ExChange,
+ _In_opt_ PVOID Comperand)
+{
+ return (PVOID)InterlockedCompareExchange((volatile long *)Destination,
+ (long)ExChange,
+ (long)Comperand);
+}
+
+#endif /* _M_IX86 */
+
+#ifdef _M_AMD64
+
+FORCEINLINE
+LONG64
+_InterlockedAdd64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target,
+ _In_ LONG64 Value)
+
+{
+ return _InterlockedExchangeAdd64(Target, Value) + Value;
+}
+
+#endif /* _M_AMD64 */
+
+#ifdef _M_IA64
+
+#undef _InterlockedBitTestAndSet
+#define _InterlockedBitTestAndSet InterlockedBitTestAndSet_Inline
+FORCEINLINE
+BOOLEAN
+_InterlockedBitTestAndSet(
+ _Inout_ _Interlocked_operand_ volatile LONG *Target,
+ _In_ LONG Bit)
+{
+ ULONG Mask = 1 << (Bit & 31);
+ return (BOOLEAN)((InterlockedOr(&Target[Bit / 32], Mask) & Mask) != 0);
+}
+
+#undef _InterlockedBitTestAndReset
+#define _InterlockedBitTestAndReset InterlockedBitTestAndReset_Inline
+FORCEINLINE
+BOOLEAN
+_InterlockedBitTestAndReset(
+ _Inout_ _Interlocked_operand_ volatile LONG *Target,
+ _In_ LONG Bit)
+{
+ ULONG Mask = 1 << (Bit & 31);
+ return (BOOLEAN)((InterlockedAnd(&Target[Bit / 32], ~Mask) & Mask) != 0);
+}
+
+#undef _InterlockedBitTestAndSet64
+#define _InterlockedBitTestAndSet64 InterlockedBitTestAndSet64_Inline
+FORCEINLINE
+BOOLEAN
+_InterlockedBitTestAndSet64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target,
+ _In_ LONG64 Bit)
+{
+ ULONG64 Mask = 1LL << (Bit & 63);
+ return (BOOLEAN)((InterlockedOr64(&Target[Bit / 64], Mask) & Mask) != 0);
+}
+
+#undef _InterlockedBitTestAndReset64
+#define _InterlockedBitTestAndReset64 InterlockedBitTestAndReset64_Inline
+FORCEINLINE
+BOOLEAN
+_InterlockedBitTestAndReset64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target,
+ _In_ LONG64 Bit)
+{
+ ULONG64 Mask = 1LL << (Bit & 63);
+ return (BOOLEAN)((InterlockedAnd64(&Target[Bit / 64], ~Mask) & Mask) != 0);
+}
+
+#undef _InterlockedBitTestAndComplement
+#define _InterlockedBitTestAndComplement InterlockedBitTestAndComplement_Inline
+FORCEINLINE
+BOOLEAN
+_InterlockedBitTestAndComplement(
+ _Inout_ _Interlocked_operand_ volatile LONG *Target,
+ _In_ LONG Bit)
+{
+ ULONG Mask = 1 << (Bit & 31);
+ return (BOOLEAN)((InterlockedXor(&Target[Bit / 32], Mask) & Mask) != 0);
+}
+
+#undef _InterlockedBitTestAndComplement64
+#define _InterlockedBitTestAndComplement64 InterlockedBitTestAndComplement64_Inline
+FORCEINLINE
+BOOLEAN
+_InterlockedBitTestAndComplement64(
+ _Inout_ _Interlocked_operand_ volatile LONG64 *Target,
+ _In_ LONG64 Bit)
+{
+ ULONG64 Mask = 1LL << (Bit & 63);
+ return (BOOLEAN)((InterlockedXor64(&Target[Bit / 64], Mask) & Mask) != 0);
+}
+
+#endif /* M_IA64 */
+
+
+#if defined(__ROS_LONG64__)
+#undef InterlockedExchange
+#define InterlockedExchange(a,b) _InterlockedExchange((long*)a,b)
+#undef InterlockedExchangeAdd
+#define InterlockedExchangeAdd(a,b) _InterlockedExchangeAdd((long*)a,b)
+#undef InterlockedCompareExchange
+#define InterlockedCompareExchange(a,b,c) _InterlockedCompareExchange((long*)a,b,c)
+#undef InterlockedIncrement
+#define InterlockedIncrement(a) _InterlockedIncrement((long*)a)
+#undef InterlockedDecrement
+#define InterlockedDecrement(a) _InterlockedDecrement((long*)a)
+#endif
#undef __C89_NAMELESS
#undef __C89_NAMELESSSTRUCTNAME
#define SYSTEM_AUDIT_ACE_TYPE (0x2)
#define SYSTEM_ALARM_ACE_TYPE (0x3)
/*end ntifs.h */
-#define OBJECT_INHERIT_ACE 1
-#define CONTAINER_INHERIT_ACE 2
-#define NO_PROPAGATE_INHERIT_ACE 4
-#define INHERIT_ONLY_ACE 8
-#define INHERITED_ACE 16
-#define VALID_INHERIT_FLAGS 0x1F
-#define SUCCESSFUL_ACCESS_ACE_FLAG 64
-#define FAILED_ACCESS_ACE_FLAG 128
-#define DELETE 0x00010000L
-#define READ_CONTROL 0x20000L
-#define WRITE_DAC 0x40000L
-#define WRITE_OWNER 0x80000L
-#define SYNCHRONIZE 0x100000L
-#define STANDARD_RIGHTS_REQUIRED 0xF0000
-#define STANDARD_RIGHTS_READ 0x20000
-#define STANDARD_RIGHTS_WRITE 0x20000
-#define STANDARD_RIGHTS_EXECUTE 0x20000
-#define STANDARD_RIGHTS_ALL 0x1F0000
-#define SPECIFIC_RIGHTS_ALL 0xFFFF
-#define ACCESS_SYSTEM_SECURITY 0x1000000
#define REG_STANDARD_FORMAT 1
#define REG_LATEST_FORMAT 2
#endif /* WIN32_NO_STATUS */
-#define MAXIMUM_ALLOWED 0x2000000
-#define GENERIC_READ 0x80000000
-#define GENERIC_WRITE 0x40000000
-#define GENERIC_EXECUTE 0x20000000
-#define GENERIC_ALL 0x10000000
-
#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
/* Also in ddk/winddk.h */
#define PROCESS_SET_LIMITED_INFORMATION 0x2000
#define THREAD_RESUME 0x1000
-/*
- * To prevent gcc compiler warnings, bracket these defines when initialising
- * a SID_IDENTIFIER_AUTHORITY, eg.
- * SID_IDENTIFIER_AUTHORITY aNullSidAuthority = {SECURITY_NULL_SID_AUTHORITY};
- */
-#define SID_MAX_SUB_AUTHORITIES 15
-
-/* security entities */
-#define SECURITY_NULL_RID (0x00000000L)
-#define SECURITY_WORLD_RID (0x00000000L)
-#define SECURITY_LOCAL_RID (0X00000000L)
-
-#define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
-
-/* S-1-1 */
-#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
-
-/* S-1-2 */
-#define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
+#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
+#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
+#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
+#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
+#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
+#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
+#define SE_TCB_NAME TEXT("SeTcbPrivilege")
+#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
+#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
+#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
+#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
+#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
+#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
+#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
+#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
+#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
+#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
+#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
+#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
+#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
+#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
+#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
+#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
+#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
+#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
+#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
+#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
+#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
+#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
+#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
-/* S-1-3 */
-#define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
-#define SECURITY_CREATOR_OWNER_RID (0x00000000L)
-#define SECURITY_CREATOR_GROUP_RID (0x00000001L)
-#define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
-#define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
+#define SE_GROUP_MANDATORY 0x00000001
+#define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002
+#define SE_GROUP_ENABLED 0x00000004
+#define SE_GROUP_OWNER 0x00000008
+#define SE_GROUP_USE_FOR_DENY_ONLY 0x00000010
+#define SE_GROUP_INTEGRITY 0x00000020
+#define SE_GROUP_INTEGRITY_ENABLED 0x00000040
+#define SE_GROUP_LOGON_ID 0xC0000000
+#define SE_GROUP_RESOURCE 0x20000000
+#define SE_GROUP_VALID_ATTRIBUTES 0xE000007F
-/* S-1-4 */
-#define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
+/* FIXME: non-standard */
+#define LANG_ESPERANTO 0x8f
+#define LANG_WALON 0x90
+#define LANG_CORNISH 0x92
-/* S-1-5 */
-#define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
-#define SECURITY_DIALUP_RID 0x00000001L
-#define SECURITY_NETWORK_RID 0x00000002L
-#define SECURITY_BATCH_RID 0x00000003L
-#define SECURITY_INTERACTIVE_RID 0x00000004L
-#define SECURITY_LOGON_IDS_RID 0x00000005L
-#define SECURITY_SERVICE_RID 0x00000006L
-#define SECURITY_ANONYMOUS_LOGON_RID 0x00000007L
-#define SECURITY_PROXY_RID 0x00000008L
-#define SECURITY_ENTERPRISE_CONTROLLERS_RID 0x00000009L
-#define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
-#define SECURITY_PRINCIPAL_SELF_RID 0x0000000AL
-#define SECURITY_AUTHENTICATED_USER_RID 0x0000000BL
-#define SECURITY_RESTRICTED_CODE_RID 0x0000000CL
-#define SECURITY_TERMINAL_SERVER_RID 0x0000000DL
-#define SECURITY_REMOTE_LOGON_RID 0x0000000EL
-#define SECURITY_THIS_ORGANIZATION_RID 0x0000000FL
-#define SECURITY_LOCAL_SYSTEM_RID 0x00000012L
-#define SECURITY_LOCAL_SERVICE_RID 0x00000013L
-#define SECURITY_NETWORK_SERVICE_RID 0x00000014L
-#define SECURITY_NT_NON_UNIQUE 0x00000015L
-#define SECURITY_BUILTIN_DOMAIN_RID 0x00000020L
-
-#define SECURITY_PACKAGE_BASE_RID 0x00000040L
-#define SECURITY_PACKAGE_NTLM_RID 0x0000000AL
-#define SECURITY_PACKAGE_SCHANNEL_RID 0x0000000EL
-#define SECURITY_PACKAGE_DIGEST_RID 0x00000015L
-#define SECURITY_OTHER_ORGANIZATION_RID 0x000003E8L
-
-#define SECURITY_LOGON_IDS_RID_COUNT 0x3
-#define SID_REVISION 1
-
-#define FOREST_USER_RID_MAX 0x000001F3L
-#define DOMAIN_USER_RID_ADMIN 0x000001F4L
-#define DOMAIN_USER_RID_GUEST 0x000001F5L
-#define DOMAIN_USER_RID_KRBTGT 0x000001F6L
-#define DOMAIN_USER_RID_MAX 0x000003E7L
-
-#define DOMAIN_GROUP_RID_ADMINS 0x00000200L
-#define DOMAIN_GROUP_RID_USERS 0x00000201L
-#define DOMAIN_GROUP_RID_GUESTS 0x00000202L
-#define DOMAIN_GROUP_RID_COMPUTERS 0x00000203L
-#define DOMAIN_GROUP_RID_CONTROLLERS 0x00000204L
-#define DOMAIN_GROUP_RID_CERT_ADMINS 0x00000205L
-#define DOMAIN_GROUP_RID_SCHEMA_ADMINS 0x00000206L
-#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS 0x00000207L
-#define DOMAIN_GROUP_RID_POLICY_ADMINS 0x00000208L
-
-#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
-#define SECURITY_MANDATORY_UNTRUSTED_RID 0x00000000L
-#define SECURITY_MANDATORY_LOW_RID 0x00001000L
-#define SECURITY_MANDATORY_MEDIUM_RID 0x00002000L
-#define SECURITY_MANDATORY_HIGH_RID 0x00003000L
-#define SECURITY_MANDATORY_SYSTEM_RID 0x00004000L
-#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID 0x00005000L
-
-#define DOMAIN_ALIAS_RID_ADMINS 0x00000220L
-#define DOMAIN_ALIAS_RID_USERS 0x00000221L
-#define DOMAIN_ALIAS_RID_GUESTS 0x00000222L
-#define DOMAIN_ALIAS_RID_POWER_USERS 0x00000223L
-
-#define DOMAIN_ALIAS_RID_ACCOUNT_OPS 0x00000224L
-#define DOMAIN_ALIAS_RID_SYSTEM_OPS 0x00000225L
-#define DOMAIN_ALIAS_RID_PRINT_OPS 0x00000226L
-#define DOMAIN_ALIAS_RID_BACKUP_OPS 0x00000227L
-
-#define DOMAIN_ALIAS_RID_REPLICATOR 0x00000228L
-#define DOMAIN_ALIAS_RID_RAS_SERVERS 0x00000229L
-#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS 0x0000022AL
-#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS 0x0000022BL
-#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS 0x0000022CL
-#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS 0x0000022DL
-
-#define DOMAIN_ALIAS_RID_MONITORING_USERS 0x0000022EL
-#define DOMAIN_ALIAS_RID_LOGGING_USERS 0x0000022FL
-#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS 0x00000230L
-#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS 0x00000231L
-#define DOMAIN_ALIAS_RID_DCOM_USERS 0x00000232L
-
-#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
+/* FIXME: not present in the official headers */
+#define LANG_MALAGASY 0x8d
+#define LANG_GAELIC 0x94
+#define LANG_SAAMI 0x3b
+#define LANG_SUTU 0x30
+#define LANG_TSONGA 0x31
+#define LANG_VENDA 0x33
+#define LANG_MANX_GAELIC 0x94
+#define SUBLANG_PORTUGUESE_PORTUGAL 0x02
-typedef enum {
- WinNullSid = 0,
- WinWorldSid = 1,
- WinLocalSid = 2,
- WinCreatorOwnerSid = 3,
- WinCreatorGroupSid = 4,
- WinCreatorOwnerServerSid = 5,
- WinCreatorGroupServerSid = 6,
- WinNtAuthoritySid = 7,
- WinDialupSid = 8,
- WinNetworkSid = 9,
- WinBatchSid = 10,
- WinInteractiveSid = 11,
- WinServiceSid = 12,
- WinAnonymousSid = 13,
- WinProxySid = 14,
- WinEnterpriseControllersSid = 15,
- WinSelfSid = 16,
- WinAuthenticatedUserSid = 17,
- WinRestrictedCodeSid = 18,
- WinTerminalServerSid = 19,
- WinRemoteLogonIdSid = 20,
- WinLogonIdsSid = 21,
- WinLocalSystemSid = 22,
- WinLocalServiceSid = 23,
- WinNetworkServiceSid = 24,
- WinBuiltinDomainSid = 25,
- WinBuiltinAdministratorsSid = 26,
- WinBuiltinUsersSid = 27,
- WinBuiltinGuestsSid = 28,
- WinBuiltinPowerUsersSid = 29,
- WinBuiltinAccountOperatorsSid = 30,
- WinBuiltinSystemOperatorsSid = 31,
- WinBuiltinPrintOperatorsSid = 32,
- WinBuiltinBackupOperatorsSid = 33,
- WinBuiltinReplicatorSid = 34,
- WinBuiltinPreWindows2000CompatibleAccessSid = 35,
- WinBuiltinRemoteDesktopUsersSid = 36,
- WinBuiltinNetworkConfigurationOperatorsSid = 37,
- WinAccountAdministratorSid = 38,
- WinAccountGuestSid = 39,
- WinAccountKrbtgtSid = 40,
- WinAccountDomainAdminsSid = 41,
- WinAccountDomainUsersSid = 42,
- WinAccountDomainGuestsSid = 43,
- WinAccountComputersSid = 44,
- WinAccountControllersSid = 45,
- WinAccountCertAdminsSid = 46,
- WinAccountSchemaAdminsSid = 47,
- WinAccountEnterpriseAdminsSid = 48,
- WinAccountPolicyAdminsSid = 49,
- WinAccountRasAndIasServersSid = 50,
- WinNTLMAuthenticationSid = 51,
- WinDigestAuthenticationSid = 52,
- WinSChannelAuthenticationSid = 53,
- WinThisOrganizationSid = 54,
- WinOtherOrganizationSid = 55,
- WinBuiltinIncomingForestTrustBuildersSid = 56,
- WinBuiltinPerfMonitoringUsersSid = 57,
- WinBuiltinPerfLoggingUsersSid = 58,
- WinBuiltinAuthorizationAccessSid = 59,
- WinBuiltinTerminalServerLicenseServersSid = 60,
- WinBuiltinDCOMUsersSid = 61,
- WinBuiltinIUsersSid = 62,
- WinIUserSid = 63,
- WinBuiltinCryptoOperatorsSid = 64,
- WinUntrustedLabelSid = 65,
- WinLowLabelSid = 66,
- WinMediumLabelSid = 67,
- WinHighLabelSid = 68,
- WinSystemLabelSid = 69,
- WinWriteRestrictedCodeSid = 70,
- WinCreatorOwnerRightsSid = 71,
- WinCacheablePrincipalsGroupSid = 72,
- WinNonCacheablePrincipalsGroupSid = 73,
- WinEnterpriseReadonlyControllersSid = 74,
- WinAccountReadonlyControllersSid = 75,
- WinBuiltinEventLogReadersGroup = 76,
- WinNewEnterpriseReadonlyControllersSid = 77,
- WinBuiltinCertSvcDComAccessGroup = 78,
- WinMediumPlusLabelSid = 79,
- WinLocalLogonSid = 80,
- WinConsoleLogonSid = 81,
- WinThisOrganizationCertificateSid = 82,
-} WELL_KNOWN_SID_TYPE;
-
-#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
-#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
-#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
-#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
-#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
-#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
-#define SE_TCB_NAME TEXT("SeTcbPrivilege")
-#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
-#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
-#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
-#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
-#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
-#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
-#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
-#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
-#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
-#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
-#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
-#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
-#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
-#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
-#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
-#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
-#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
-#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
-#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
-#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
-#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
-#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
-#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
-
-#define SE_GROUP_MANDATORY 0x00000001
-#define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002
-#define SE_GROUP_ENABLED 0x00000004
-#define SE_GROUP_OWNER 0x00000008
-#define SE_GROUP_USE_FOR_DENY_ONLY 0x00000010
-#define SE_GROUP_INTEGRITY 0x00000020
-#define SE_GROUP_INTEGRITY_ENABLED 0x00000040
-#define SE_GROUP_LOGON_ID 0xC0000000
-#define SE_GROUP_RESOURCE 0x20000000
-#define SE_GROUP_VALID_ATTRIBUTES 0xE000007F
-
-/* FIXME: non-standard */
-#define LANG_ESPERANTO 0x8f
-#define LANG_WALON 0x90
-#define LANG_CORNISH 0x92
-
-/* FIXME: not present in the official headers */
-#define LANG_MALAGASY 0x8d
-#define LANG_GAELIC 0x94
-#define LANG_SAAMI 0x3b
-#define LANG_SUTU 0x30
-#define LANG_TSONGA 0x31
-#define LANG_VENDA 0x33
-#define LANG_MANX_GAELIC 0x94
-#define SUBLANG_PORTUGUESE_PORTUGAL 0x02
-
-#define ACL_REVISION 2
-#define ACL_REVISION_DS 4
-#define ACL_REVISION1 1
-#define ACL_REVISION2 2
-#define ACL_REVISION3 3
-#define ACL_REVISION4 4
-#define MIN_ACL_REVISION 2
-#define MAX_ACL_REVISION 4
#define PROCESSOR_INTEL_386 386
#define PROCESSOR_INTEL_486 486
#define PROCESSOR_INTEL_PENTIUM 586
#define PROCESSOR_ARCHITECTURE_MSIL 8
#define PROCESSOR_ARCHITECTURE_AMD64 9
#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
-#define PF_FLOATING_POINT_PRECISION_ERRATA 0
-#define PF_FLOATING_POINT_EMULATED 1
-#define PF_COMPARE_EXCHANGE_DOUBLE 2
-#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
-#define PF_PPC_MOVEMEM_64BIT_OK 4
-#define PF_ALPHA_BYTE_INSTRUCTIONS 5
-#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
-#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
-#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
-#define PF_PAE_ENABLED 9
-#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
-#define PF_NX_ENABLED 12
+
+/* Processor features */
+#define PF_FLOATING_POINT_PRECISION_ERRATA 0
+#define PF_FLOATING_POINT_EMULATED 1
+#define PF_COMPARE_EXCHANGE_DOUBLE 2
+#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
+#define PF_PPC_MOVEMEM_64BIT_OK 4
+#define PF_ALPHA_BYTE_INSTRUCTIONS 5
+#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
+#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
+#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
+#define PF_PAE_ENABLED 9
+#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
+#define PF_SSE_DAZ_MODE_AVAILABLE 11
+#define PF_NX_ENABLED 12
+#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
+#define PF_COMPARE_EXCHANGE128 14
+#define PF_COMPARE64_EXCHANGE128 15
+#define PF_CHANNELS_ENABLED 16
+#define PF_XSAVE_ENABLED 17
+#define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
+#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
+#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
+#define PF_VIRT_FIRMWARE_ENABLED 21
+#define PF_RDWRFSGSBASE_AVAILABLE 22
+#define PF_FASTFAIL_AVAILABLE 23
+#define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
+#define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
+#define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
+#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
+#define PF_RDRAND_INSTRUCTION_AVAILABLE 28
+#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
+#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
+#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
/* also in ddk/ntifs.h */
#define FILE_ACTION_ADDED 0x00000001
#define REG_OPTION_BACKUP_RESTORE 4
#define REG_OPTION_OPEN_LINK 8
#define REG_LEGAL_OPTION 15
-#define OWNER_SECURITY_INFORMATION 1
-#define GROUP_SECURITY_INFORMATION 2
-#define DACL_SECURITY_INFORMATION 4
-#define SACL_SECURITY_INFORMATION 8
-#define PROTECTED_DACL_SECURITY_INFORMATION 0x80000000
-#define PROTECTED_SACL_SECURITY_INFORMATION 0x40000000
-#define UNPROTECTED_DACL_SECURITY_INFORMATION 0x20000000
-#define UNPROTECTED_SACL_SECURITY_INFORMATION 0x10000000
#define MAXIMUM_PROCESSORS 32
#define PAGE_NOACCESS 0x0001
#define PAGE_READONLY 0x0002
#define SERVICE_ERROR_NORMAL 1
#define SERVICE_ERROR_SEVERE 2
#define SERVICE_ERROR_CRITICAL 3
-#define SE_OWNER_DEFAULTED 0x0001
-#define SE_GROUP_DEFAULTED 0x0002
-#define SE_DACL_PRESENT 0x0004
-#define SE_DACL_DEFAULTED 0x0008
-#define SE_SACL_PRESENT 0x0010
-#define SE_SACL_DEFAULTED 0x0020
-#define SE_DACL_UNTRUSTED 0x0040
-#define SE_SERVER_SECURITY 0x0080
-#define SE_DACL_AUTO_INHERIT_REQ 0x0100
-#define SE_SACL_AUTO_INHERIT_REQ 0x0200
-#define SE_DACL_AUTO_INHERITED 0x0400
-#define SE_SACL_AUTO_INHERITED 0x0800
-#define SE_DACL_PROTECTED 0x1000
-#define SE_SACL_PROTECTED 0x2000
-#define SE_RM_CONTROL_VALID 0x4000
-#define SE_SELF_RELATIVE 0x8000
-#define SECURITY_DESCRIPTOR_MIN_LENGTH 20
-#define SECURITY_DESCRIPTOR_REVISION 1
-#define SECURITY_DESCRIPTOR_REVISION1 1
-#define SE_PRIVILEGE_ENABLED_BY_DEFAULT 1
-#define SE_PRIVILEGE_ENABLED 2
-#define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
-#define PRIVILEGE_SET_ALL_NECESSARY 1
-#define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
-#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
-#define SECURITY_DYNAMIC_TRACKING TRUE
-#define SECURITY_STATIC_TRACKING FALSE
+
/* also in ddk/ntifs.h */
#define TOKEN_ASSIGN_PRIMARY (0x0001)
#define TOKEN_DUPLICATE (0x0002)
#define IO_REPARSE_TAG_MOUNT_POINT 0xA0000003
#define IO_REPARSE_TAG_SYMLINK 0xA000000CL
#ifndef RC_INVOKED
-typedef DWORD ACCESS_MASK, *PACCESS_MASK;
#ifdef _GUID_DEFINED
# warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
} GUID, *REFGUID, *LPGUID;
#endif /* GUID_DEFINED */
-#define SYSTEM_LUID { 0x3E7, 0x0 }
-
-/* ACE Access Types, also in ntifs.h */
-#define ACCESS_MIN_MS_ACE_TYPE (0x0)
-#define ACCESS_ALLOWED_ACE_TYPE (0x0)
-#define ACCESS_DENIED_ACE_TYPE (0x1)
-#define SYSTEM_AUDIT_ACE_TYPE (0x2)
-#define SYSTEM_ALARM_ACE_TYPE (0x3)
-#define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
-#define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
-#define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
-#define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
-#define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
-#define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
-#define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
-#define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
-#define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
-#define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
-#define ACCESS_MAX_MS_ACE_TYPE (0x8)
-#define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
-#define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
-#define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
-#define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
-#define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
-#define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
-#define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
-#define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
-#define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
-#define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
-/* end ntifs.h */
-
-typedef struct _GENERIC_MAPPING {
- ACCESS_MASK GenericRead;
- ACCESS_MASK GenericWrite;
- ACCESS_MASK GenericExecute;
- ACCESS_MASK GenericAll;
-} GENERIC_MAPPING, *PGENERIC_MAPPING;
+typedef enum _ACL_INFORMATION_CLASS {
+ AclRevisionInformation = 1,
+ AclSizeInformation
+} ACL_INFORMATION_CLASS;
-typedef struct _ACE_HEADER {
- BYTE AceType;
- BYTE AceFlags;
- WORD AceSize;
-} ACE_HEADER, *PACE_HEADER;
+typedef struct _ACL_REVISION_INFORMATION {
+ DWORD AclRevision;
+} ACL_REVISION_INFORMATION, *PACL_REVISION_INFORMATION;
-typedef struct _ACCESS_ALLOWED_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD SidStart;
-} ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
+typedef struct _ACL_SIZE_INFORMATION {
+ DWORD AceCount;
+ DWORD AclBytesInUse;
+ DWORD AclBytesFree;
+} ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION;
-typedef struct _ACCESS_DENIED_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD SidStart;
-} ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
+#ifndef _LDT_ENTRY_DEFINED
+#define _LDT_ENTRY_DEFINED
-typedef struct _SYSTEM_AUDIT_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD SidStart;
-} SYSTEM_AUDIT_ACE, *PSYSTEM_AUDIT_ACE;
+typedef struct _LDT_ENTRY {
+ WORD LimitLow;
+ WORD BaseLow;
+ union {
+ struct {
+ BYTE BaseMid;
+ BYTE Flags1;
+ BYTE Flags2;
+ BYTE BaseHi;
+ } Bytes;
+ struct {
+ DWORD BaseMid:8;
+ DWORD Type:5;
+ DWORD Dpl:2;
+ DWORD Pres:1;
+ DWORD LimitHi:4;
+ DWORD Sys:1;
+ DWORD Reserved_0:1;
+ DWORD Default_Big:1;
+ DWORD Granularity:1;
+ DWORD BaseHi:8;
+ } Bits;
+ } HighWord;
+} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
-typedef struct _SYSTEM_ALARM_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD SidStart;
-} SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
+#endif /* _LDT_ENTRY_DEFINED */
-typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD SidStart;
-} SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
+/* FIXME: add more machines */
+#if defined(_X86_)
+#define SIZE_OF_80387_REGISTERS 80
+#define CONTEXT_i386 0x10000
+#define CONTEXT_i486 0x10000
+#define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
+#define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
+#define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
+#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
+#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
+#define MAXIMUM_SUPPORTED_EXTENSION 512
-#define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
-#define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
-#define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
-#define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | SYSTEM_MANDATORY_LABEL_NO_READ_UP | SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
-
-typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD Flags;
- GUID ObjectType;
- GUID InheritedObjectType;
- DWORD SidStart;
-} ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
-
-typedef struct _ACCESS_DENIED_OBJECT_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD Flags;
- GUID ObjectType;
- GUID InheritedObjectType;
- DWORD SidStart;
-} ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
-
-typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD Flags;
- GUID ObjectType;
- GUID InheritedObjectType;
- DWORD SidStart;
-} SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
-
-typedef struct _SYSTEM_ALARM_OBJECT_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD Flags;
- GUID ObjectType;
- GUID InheritedObjectType;
- DWORD SidStart;
-} SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
-
-typedef struct _ACCESS_ALLOWED_CALLBACK_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD SidStart;
-} ACCESS_ALLOWED_CALLBACK_ACE, *PACCESS_ALLOWED_CALLBACK_ACE;
-
-typedef struct _ACCESS_DENIED_CALLBACK_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD SidStart;
-} ACCESS_DENIED_CALLBACK_ACE, *PACCESS_DENIED_CALLBACK_ACE;
-
-typedef struct _SYSTEM_AUDIT_CALLBACK_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD SidStart;
-} SYSTEM_AUDIT_CALLBACK_ACE, *PSYSTEM_AUDIT_CALLBACK_ACE;
-
-typedef struct _SYSTEM_ALARM_CALLBACK_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD SidStart;
-} SYSTEM_ALARM_CALLBACK_ACE, *PSYSTEM_ALARM_CALLBACK_ACE;
-
-typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD Flags;
- GUID ObjectType;
- GUID InheritedObjectType;
- DWORD SidStart;
-} ACCESS_ALLOWED_CALLBACK_OBJECT_ACE, *PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
-
-typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD Flags;
- GUID ObjectType;
- GUID InheritedObjectType;
- DWORD SidStart;
-} ACCESS_DENIED_CALLBACK_OBJECT_ACE, *PACCESS_DENIED_CALLBACK_OBJECT_ACE;
-
-typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD Flags;
- GUID ObjectType;
- GUID InheritedObjectType;
- DWORD SidStart;
-} SYSTEM_AUDIT_CALLBACK_OBJECT_ACE, *PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
-
-typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
- ACE_HEADER Header;
- ACCESS_MASK Mask;
- DWORD Flags;
- GUID ObjectType;
- GUID InheritedObjectType;
- DWORD SidStart;
-} SYSTEM_ALARM_CALLBACK_OBJECT_ACE, *PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
-
-typedef struct _ACL {
- BYTE AclRevision;
- BYTE Sbz1;
- WORD AclSize;
- WORD AceCount;
- WORD Sbz2;
-} ACL,*PACL;
-
-typedef enum _ACL_INFORMATION_CLASS {
- AclRevisionInformation = 1,
- AclSizeInformation
-} ACL_INFORMATION_CLASS;
-
-typedef struct _ACL_REVISION_INFORMATION {
- DWORD AclRevision;
-} ACL_REVISION_INFORMATION, *PACL_REVISION_INFORMATION;
-
-typedef struct _ACL_SIZE_INFORMATION {
- DWORD AceCount;
- DWORD AclBytesInUse;
- DWORD AclBytesFree;
-} ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION;
-
-#ifndef _LDT_ENTRY_DEFINED
-#define _LDT_ENTRY_DEFINED
-
-typedef struct _LDT_ENTRY {
- WORD LimitLow;
- WORD BaseLow;
- union {
- struct {
- BYTE BaseMid;
- BYTE Flags1;
- BYTE Flags2;
- BYTE BaseHi;
- } Bytes;
- struct {
- DWORD BaseMid:8;
- DWORD Type:5;
- DWORD Dpl:2;
- DWORD Pres:1;
- DWORD LimitHi:4;
- DWORD Sys:1;
- DWORD Reserved_0:1;
- DWORD Default_Big:1;
- DWORD Granularity:1;
- DWORD BaseHi:8;
- } Bits;
- } HighWord;
-} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
-
-#endif /* _LDT_ENTRY_DEFINED */
-
-/* FIXME: add more machines */
-#if defined(_X86_)
-#define SIZE_OF_80387_REGISTERS 80
-#define CONTEXT_i386 0x10000
-#define CONTEXT_i486 0x10000
-#define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
-#define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
-#define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
-#define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
-#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
-#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
-#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
-#define MAXIMUM_SUPPORTED_EXTENSION 512
-
-#define EXCEPTION_READ_FAULT 0
-#define EXCEPTION_WRITE_FAULT 1
-#define EXCEPTION_EXECUTE_FAULT 8
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
typedef struct _FLOATING_SAVE_AREA {
DWORD ControlWord;
/* The following flags control the contents of the CONTEXT structure. */
-#define CONTEXT_ARM 0x0000040
+#define CONTEXT_ARM 0x200000L
#define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001L)
#define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x00000004L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008L)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
-typedef struct _CONTEXT {
+typedef struct _NEON128
+{
+ ULONGLONG Low;
+ LONGLONG High;
+} NEON128, *PNEON128;
+
+#define ARM_MAX_BREAKPOINTS 8
+#define ARM_MAX_WATCHPOINTS 1
+
+typedef struct _CONTEXT
+{
/* The flags values within this flag control the contents of
a CONTEXT record.
context corresponding to set flags will be returned.
The context record is never used as an OUT only parameter. */
-
DWORD ContextFlags;
/* This section is specified/returned if the ContextFlags word contains
DWORD Sp;
DWORD Lr;
DWORD Pc;
- DWORD Psr;
+ DWORD Cpsr;
+
+ /* Floating Point/NEON Registers */
+ DWORD Fpscr;
+ DWORD Padding;
+ union
+ {
+ NEON128 Q[16];
+ ULONGLONG D[32];
+ DWORD S[32];
+ } DUMMYUNIONNAME;
+
+ /* Debug registers */
+ DWORD Bvr[ARM_MAX_BREAKPOINTS];
+ DWORD Bcr[ARM_MAX_BREAKPOINTS];
+ DWORD Wvr[ARM_MAX_WATCHPOINTS];
+ DWORD Wcr[ARM_MAX_WATCHPOINTS];
+
+ DWORD Padding2[2];
} CONTEXT;
#else
DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD32,*PEXCEPTION_RECORD32;
-typedef struct _EXCEPTION_RECORD64 {
- DWORD ExceptionCode;
- DWORD ExceptionFlags;
- DWORD64 ExceptionRecord;
- DWORD64 ExceptionAddress;
- DWORD NumberParameters;
- DWORD __unusedAlignment;
- DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
-} EXCEPTION_RECORD64,*PEXCEPTION_RECORD64;
+typedef struct _EXCEPTION_RECORD64 {
+ DWORD ExceptionCode;
+ DWORD ExceptionFlags;
+ DWORD64 ExceptionRecord;
+ DWORD64 ExceptionAddress;
+ DWORD NumberParameters;
+ DWORD __unusedAlignment;
+ DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} EXCEPTION_RECORD64,*PEXCEPTION_RECORD64;
+
+typedef struct _EXCEPTION_POINTERS {
+ PEXCEPTION_RECORD ExceptionRecord;
+ PCONTEXT ContextRecord;
+} EXCEPTION_POINTERS,*PEXCEPTION_POINTERS, *LPEXCEPTION_POINTERS;
+
+typedef struct _SECURITY_ATTRIBUTES {
+ DWORD nLength;
+ LPVOID lpSecurityDescriptor;
+ BOOL bInheritHandle;
+} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
+
+#define SECURITY_MIN_SID_SIZE (sizeof(SID))
+
+/******************************************************************************
+ * Security Manager Types *
+ ******************************************************************************/
+
+/* Simple types */
+typedef PVOID PSECURITY_DESCRIPTOR;
+typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
+typedef DWORD ACCESS_MASK, *PACCESS_MASK;
+
+typedef PVOID PACCESS_TOKEN;
+typedef PVOID PSID;
+
+#define DELETE 0x00010000L
+#define READ_CONTROL 0x00020000L
+#define WRITE_DAC 0x00040000L
+#define WRITE_OWNER 0x00080000L
+#define SYNCHRONIZE 0x00100000L
+#define STANDARD_RIGHTS_REQUIRED 0x000F0000L
+#define STANDARD_RIGHTS_READ READ_CONTROL
+#define STANDARD_RIGHTS_WRITE READ_CONTROL
+#define STANDARD_RIGHTS_EXECUTE READ_CONTROL
+#define STANDARD_RIGHTS_ALL 0x001F0000L
+#define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
+#define ACCESS_SYSTEM_SECURITY 0x01000000L
+#define MAXIMUM_ALLOWED 0x02000000L
+#define GENERIC_READ 0x80000000L
+#define GENERIC_WRITE 0x40000000L
+#define GENERIC_EXECUTE 0x20000000L
+#define GENERIC_ALL 0x10000000L
+
+typedef struct _GENERIC_MAPPING {
+ ACCESS_MASK GenericRead;
+ ACCESS_MASK GenericWrite;
+ ACCESS_MASK GenericExecute;
+ ACCESS_MASK GenericAll;
+} GENERIC_MAPPING, *PGENERIC_MAPPING;
+
+#define ACL_REVISION 2
+#define ACL_REVISION_DS 4
+
+#define ACL_REVISION1 1
+#define ACL_REVISION2 2
+#define ACL_REVISION3 3
+#define ACL_REVISION4 4
+#define MIN_ACL_REVISION ACL_REVISION2
+#define MAX_ACL_REVISION ACL_REVISION4
+
+typedef struct _ACL {
+ BYTE AclRevision;
+ BYTE Sbz1;
+ WORD AclSize;
+ WORD AceCount;
+ WORD Sbz2;
+} ACL, *PACL;
+
+/* Current security descriptor revision value */
+#define SECURITY_DESCRIPTOR_REVISION (1)
+#define SECURITY_DESCRIPTOR_REVISION1 (1)
+
+/* Privilege attributes */
+#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
+#define SE_PRIVILEGE_ENABLED (0x00000002L)
+#define SE_PRIVILEGE_REMOVED (0X00000004L)
+#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
+
+#define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
+ SE_PRIVILEGE_ENABLED | \
+ SE_PRIVILEGE_REMOVED | \
+ SE_PRIVILEGE_USED_FOR_ACCESS)
+
+#include <pshpack4.h>
+typedef struct _LUID_AND_ATTRIBUTES {
+ LUID Luid;
+ DWORD Attributes;
+} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
+#include <poppack.h>
+
+typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
+
+/* Privilege sets */
+#define PRIVILEGE_SET_ALL_NECESSARY (1)
+
+typedef struct _PRIVILEGE_SET {
+ DWORD PrivilegeCount;
+ DWORD Control;
+ LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
+} PRIVILEGE_SET, *PPRIVILEGE_SET;
+
+typedef enum _SECURITY_IMPERSONATION_LEVEL {
+ SecurityAnonymous,
+ SecurityIdentification,
+ SecurityImpersonation,
+ SecurityDelegation
+} SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL;
+
+#define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
+#define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
+#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
+#define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
+
+#define SECURITY_DYNAMIC_TRACKING (TRUE)
+#define SECURITY_STATIC_TRACKING (FALSE)
+
+typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE;
+
+typedef struct _SECURITY_QUALITY_OF_SERVICE {
+ DWORD Length;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
+ BOOLEAN EffectiveOnly;
+} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
+
+typedef struct _SE_IMPERSONATION_STATE {
+ PACCESS_TOKEN Token;
+ BOOLEAN CopyOnOpen;
+ BOOLEAN EffectiveOnly;
+ SECURITY_IMPERSONATION_LEVEL Level;
+} SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE;
+
+
+#define OWNER_SECURITY_INFORMATION (0x00000001L)
+#define GROUP_SECURITY_INFORMATION (0x00000002L)
+#define DACL_SECURITY_INFORMATION (0x00000004L)
+#define SACL_SECURITY_INFORMATION (0x00000008L)
+#define LABEL_SECURITY_INFORMATION (0x00000010L)
+
+#define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
+#define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
+#define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
+#define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
+
+
+typedef enum _WELL_KNOWN_SID_TYPE {
+ WinNullSid = 0,
+ WinWorldSid = 1,
+ WinLocalSid = 2,
+ WinCreatorOwnerSid = 3,
+ WinCreatorGroupSid = 4,
+ WinCreatorOwnerServerSid = 5,
+ WinCreatorGroupServerSid = 6,
+ WinNtAuthoritySid = 7,
+ WinDialupSid = 8,
+ WinNetworkSid = 9,
+ WinBatchSid = 10,
+ WinInteractiveSid = 11,
+ WinServiceSid = 12,
+ WinAnonymousSid = 13,
+ WinProxySid = 14,
+ WinEnterpriseControllersSid = 15,
+ WinSelfSid = 16,
+ WinAuthenticatedUserSid = 17,
+ WinRestrictedCodeSid = 18,
+ WinTerminalServerSid = 19,
+ WinRemoteLogonIdSid = 20,
+ WinLogonIdsSid = 21,
+ WinLocalSystemSid = 22,
+ WinLocalServiceSid = 23,
+ WinNetworkServiceSid = 24,
+ WinBuiltinDomainSid = 25,
+ WinBuiltinAdministratorsSid = 26,
+ WinBuiltinUsersSid = 27,
+ WinBuiltinGuestsSid = 28,
+ WinBuiltinPowerUsersSid = 29,
+ WinBuiltinAccountOperatorsSid = 30,
+ WinBuiltinSystemOperatorsSid = 31,
+ WinBuiltinPrintOperatorsSid = 32,
+ WinBuiltinBackupOperatorsSid = 33,
+ WinBuiltinReplicatorSid = 34,
+ WinBuiltinPreWindows2000CompatibleAccessSid = 35,
+ WinBuiltinRemoteDesktopUsersSid = 36,
+ WinBuiltinNetworkConfigurationOperatorsSid = 37,
+ WinAccountAdministratorSid = 38,
+ WinAccountGuestSid = 39,
+ WinAccountKrbtgtSid = 40,
+ WinAccountDomainAdminsSid = 41,
+ WinAccountDomainUsersSid = 42,
+ WinAccountDomainGuestsSid = 43,
+ WinAccountComputersSid = 44,
+ WinAccountControllersSid = 45,
+ WinAccountCertAdminsSid = 46,
+ WinAccountSchemaAdminsSid = 47,
+ WinAccountEnterpriseAdminsSid = 48,
+ WinAccountPolicyAdminsSid = 49,
+ WinAccountRasAndIasServersSid = 50,
+ WinNTLMAuthenticationSid = 51,
+ WinDigestAuthenticationSid = 52,
+ WinSChannelAuthenticationSid = 53,
+ WinThisOrganizationSid = 54,
+ WinOtherOrganizationSid = 55,
+ WinBuiltinIncomingForestTrustBuildersSid = 56,
+ WinBuiltinPerfMonitoringUsersSid = 57,
+ WinBuiltinPerfLoggingUsersSid = 58,
+ WinBuiltinAuthorizationAccessSid = 59,
+ WinBuiltinTerminalServerLicenseServersSid = 60,
+ WinBuiltinDCOMUsersSid = 61,
+ WinBuiltinIUsersSid = 62,
+ WinIUserSid = 63,
+ WinBuiltinCryptoOperatorsSid = 64,
+ WinUntrustedLabelSid = 65,
+ WinLowLabelSid = 66,
+ WinMediumLabelSid = 67,
+ WinHighLabelSid = 68,
+ WinSystemLabelSid = 69,
+ WinWriteRestrictedCodeSid = 70,
+ WinCreatorOwnerRightsSid = 71,
+ WinCacheablePrincipalsGroupSid = 72,
+ WinNonCacheablePrincipalsGroupSid = 73,
+ WinEnterpriseReadonlyControllersSid = 74,
+ WinAccountReadonlyControllersSid = 75,
+ WinBuiltinEventLogReadersGroup = 76,
+ WinNewEnterpriseReadonlyControllersSid = 77,
+ WinBuiltinCertSvcDComAccessGroup = 78,
+ WinMediumPlusLabelSid = 79,
+ WinLocalLogonSid = 80,
+ WinConsoleLogonSid = 81,
+ WinThisOrganizationCertificateSid = 82,
+} WELL_KNOWN_SID_TYPE;
+
+
+#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
+#define SID_IDENTIFIER_AUTHORITY_DEFINED
+typedef struct _SID_IDENTIFIER_AUTHORITY {
+ BYTE Value[6];
+} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
+#endif
+
+#ifndef SID_DEFINED
+#define SID_DEFINED
+typedef struct _SID {
+ BYTE Revision;
+ BYTE SubAuthorityCount;
+ SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+#ifdef MIDL_PASS
+ [size_is(SubAuthorityCount)] DWORD SubAuthority[*];
+#else
+ DWORD SubAuthority[ANYSIZE_ARRAY];
+#endif
+} SID, *PISID;
+#endif
+
+#define SID_REVISION 1
+#define SID_MAX_SUB_AUTHORITIES 15
+#define SID_RECOMMENDED_SUB_AUTHORITIES 1
+
+#ifndef MIDL_PASS
+#define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))
+#endif
+
+typedef enum _SID_NAME_USE {
+ SidTypeUser = 1,
+ SidTypeGroup,
+ SidTypeDomain,
+ SidTypeAlias,
+ SidTypeWellKnownGroup,
+ SidTypeDeletedAccount,
+ SidTypeInvalid,
+ SidTypeUnknown,
+ SidTypeComputer,
+ SidTypeLabel
+} SID_NAME_USE, *PSID_NAME_USE;
+
+typedef struct _SID_AND_ATTRIBUTES {
+#ifdef MIDL_PASS
+ PISID Sid;
+#else
+ PSID Sid;
+#endif
+ DWORD Attributes;
+} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
+typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
+
+#define SID_HASH_SIZE 32
+typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
+
+typedef struct _SID_AND_ATTRIBUTES_HASH {
+ DWORD SidCount;
+ PSID_AND_ATTRIBUTES SidAttr;
+ SID_HASH_ENTRY Hash[SID_HASH_SIZE];
+} SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
+
+/* Universal well-known SIDs */
+
+#define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
+
+/* S-1-1 */
+#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
+
+/* S-1-2 */
+#define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
+
+/* S-1-3 */
+#define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
+
+/* S-1-4 */
+#define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
+
+#define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
+
+#define SECURITY_NULL_RID (0x00000000L)
+#define SECURITY_WORLD_RID (0x00000000L)
+#define SECURITY_LOCAL_RID (0x00000000L)
+#define SECURITY_LOCAL_LOGON_RID (0x00000001L)
+
+#define SECURITY_CREATOR_OWNER_RID (0x00000000L)
+#define SECURITY_CREATOR_GROUP_RID (0x00000001L)
+#define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
+#define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
+#define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
+
+/* NT well-known SIDs */
+
+/* S-1-5 */
+#define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
+
+#define SECURITY_DIALUP_RID (0x00000001L)
+#define SECURITY_NETWORK_RID (0x00000002L)
+#define SECURITY_BATCH_RID (0x00000003L)
+#define SECURITY_INTERACTIVE_RID (0x00000004L)
+#define SECURITY_LOGON_IDS_RID (0x00000005L)
+#define SECURITY_LOGON_IDS_RID_COUNT (3L)
+#define SECURITY_SERVICE_RID (0x00000006L)
+#define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L)
+#define SECURITY_PROXY_RID (0x00000008L)
+#define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
+#define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
+#define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL)
+#define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
+#define SECURITY_RESTRICTED_CODE_RID (0x0000000CL)
+#define SECURITY_TERMINAL_SERVER_RID (0x0000000DL)
+#define SECURITY_REMOTE_LOGON_RID (0x0000000EL)
+#define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL)
+#define SECURITY_IUSER_RID (0x00000011L)
+#define SECURITY_LOCAL_SYSTEM_RID (0x00000012L)
+#define SECURITY_LOCAL_SERVICE_RID (0x00000013L)
+#define SECURITY_NETWORK_SERVICE_RID (0x00000014L)
+#define SECURITY_NT_NON_UNIQUE (0x00000015L)
+#define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L)
+#define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
+
+#define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
+#define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
+
+
+#define SECURITY_PACKAGE_BASE_RID (0x00000040L)
+#define SECURITY_PACKAGE_RID_COUNT (2L)
+#define SECURITY_PACKAGE_NTLM_RID (0x0000000AL)
+#define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL)
+#define SECURITY_PACKAGE_DIGEST_RID (0x00000015L)
+
+#define SECURITY_CRED_TYPE_BASE_RID (0x00000041L)
+#define SECURITY_CRED_TYPE_RID_COUNT (2L)
+#define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID (0x00000001L)
+
+#define SECURITY_MIN_BASE_RID (0x00000050L)
+#define SECURITY_SERVICE_ID_BASE_RID (0x00000050L)
+#define SECURITY_SERVICE_ID_RID_COUNT (6L)
+#define SECURITY_RESERVED_ID_BASE_RID (0x00000051L)
+#define SECURITY_APPPOOL_ID_BASE_RID (0x00000052L)
+#define SECURITY_APPPOOL_ID_RID_COUNT (6L)
+#define SECURITY_VIRTUALSERVER_ID_BASE_RID (0x00000053L)
+#define SECURITY_VIRTUALSERVER_ID_RID_COUNT (6L)
+#define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID (0x00000054L)
+#define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (6L)
+#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID (0x00000055L)
+#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (6L)
+#define SECURITY_WMIHOST_ID_BASE_RID (0x00000056L)
+#define SECURITY_WMIHOST_ID_RID_COUNT (6L)
+#define SECURITY_TASK_ID_BASE_RID (0x00000057L)
+#define SECURITY_NFS_ID_BASE_RID (0x00000058L)
+#define SECURITY_COM_ID_BASE_RID (0x00000059L)
+#define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (6L)
+
+#define SECURITY_MAX_BASE_RID (0x0000006FL)
+
+#define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
+#define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
+
+#define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
+
+#define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
+
+/* Well-known domain relative sub-authority values (RIDs) */
+
+#define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
+
+#define FOREST_USER_RID_MAX (0x000001F3L)
+
+/* Well-known users */
+
+#define DOMAIN_USER_RID_ADMIN (0x000001F4L)
+#define DOMAIN_USER_RID_GUEST (0x000001F5L)
+#define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
+
+#define DOMAIN_USER_RID_MAX (0x000003E7L)
+
+/* Well-known groups */
+
+#define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
+#define DOMAIN_GROUP_RID_USERS (0x00000201L)
+#define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
+#define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
+#define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
+#define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
+#define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
+#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
+#define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
+#define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
+
+/* Well-known aliases */
+
+#define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
+#define DOMAIN_ALIAS_RID_USERS (0x00000221L)
+#define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
+#define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
+
+#define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
+#define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
+#define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L)
+#define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L)
+
+#define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L)
+#define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L)
+#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL)
+#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL)
+#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL)
+#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
+
+#define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL)
+#define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL)
+#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L)
+#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L)
+#define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L)
+
+#define DOMAIN_ALIAS_RID_IUSERS (0x00000238L)
+#define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L)
+#define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
+#define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
+#define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
+#define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL)
+
+#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
+#define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
+#define SECURITY_MANDATORY_LOW_RID (0x00001000L)
+#define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
+#define SECURITY_MANDATORY_HIGH_RID (0x00003000L)
+#define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L)
+#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L)
+
+/* SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
+ can be set by a usermode caller.*/
+
+#define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
+
+#define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
+
+/* Allocate the System Luid. The first 1000 LUIDs are reserved.
+ Use #999 here (0x3e7 = 999) */
+
+#define SYSTEM_LUID {0x3e7, 0x0}
+#define ANONYMOUS_LOGON_LUID {0x3e6, 0x0}
+#define LOCALSERVICE_LUID {0x3e5, 0x0}
+#define NETWORKSERVICE_LUID {0x3e4, 0x0}
+#define IUSER_LUID {0x3e3, 0x0}
+
+typedef struct _ACE_HEADER {
+ BYTE AceType;
+ BYTE AceFlags;
+ WORD AceSize;
+} ACE_HEADER, *PACE_HEADER;
+
+#define ACCESS_MIN_MS_ACE_TYPE (0x0)
+#define ACCESS_ALLOWED_ACE_TYPE (0x0)
+#define ACCESS_DENIED_ACE_TYPE (0x1)
+#define SYSTEM_AUDIT_ACE_TYPE (0x2)
+#define SYSTEM_ALARM_ACE_TYPE (0x3)
+#define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
+#define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
+#define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
+#define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
+#define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
+#define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
+#define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
+#define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
+#define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
+#define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
+#define ACCESS_MAX_MS_ACE_TYPE (0x8)
+#define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
+#define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
+#define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
+#define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
+#define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
+#define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
+#define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
+#define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
+#define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
+#define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
+
+/* The following are the inherit flags that go into the AceFlags field
+ of an Ace header. */
+
+#define OBJECT_INHERIT_ACE (0x1)
+#define CONTAINER_INHERIT_ACE (0x2)
+#define NO_PROPAGATE_INHERIT_ACE (0x4)
+#define INHERIT_ONLY_ACE (0x8)
+#define INHERITED_ACE (0x10)
+#define VALID_INHERIT_FLAGS (0x1F)
+
+#define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
+#define FAILED_ACCESS_ACE_FLAG (0x80)
+
+typedef struct _ACCESS_ALLOWED_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
+
+typedef struct _ACCESS_DENIED_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
+
+typedef struct _SYSTEM_AUDIT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} SYSTEM_AUDIT_ACE, *PSYSTEM_AUDIT_ACE;
+
+typedef struct _SYSTEM_ALARM_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} SYSTEM_ALARM_ACE, *PSYSTEM_ALARM_ACE;
+
+typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
+
+#define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
+#define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
+#define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
+#define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | \
+ SYSTEM_MANDATORY_LABEL_NO_READ_UP | \
+ SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
+
+#define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
+
+typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
+
+#define SE_OWNER_DEFAULTED 0x0001
+#define SE_GROUP_DEFAULTED 0x0002
+#define SE_DACL_PRESENT 0x0004
+#define SE_DACL_DEFAULTED 0x0008
+#define SE_SACL_PRESENT 0x0010
+#define SE_SACL_DEFAULTED 0x0020
+#define SE_DACL_UNTRUSTED 0x0040
+#define SE_SERVER_SECURITY 0x0080
+#define SE_DACL_AUTO_INHERIT_REQ 0x0100
+#define SE_SACL_AUTO_INHERIT_REQ 0x0200
+#define SE_DACL_AUTO_INHERITED 0x0400
+#define SE_SACL_AUTO_INHERITED 0x0800
+#define SE_DACL_PROTECTED 0x1000
+#define SE_SACL_PROTECTED 0x2000
+#define SE_RM_CONTROL_VALID 0x4000
+#define SE_SELF_RELATIVE 0x8000
+
+typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
+ BYTE Revision;
+ BYTE Sbz1;
+ SECURITY_DESCRIPTOR_CONTROL Control;
+ DWORD Owner;
+ DWORD Group;
+ DWORD Sacl;
+ DWORD Dacl;
+} SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
+
+typedef struct _SECURITY_DESCRIPTOR {
+ BYTE Revision;
+ BYTE Sbz1;
+ SECURITY_DESCRIPTOR_CONTROL Control;
+ PSID Owner;
+ PSID Group;
+ PACL Sacl;
+ PACL Dacl;
+} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
-typedef struct _EXCEPTION_POINTERS {
- PEXCEPTION_RECORD ExceptionRecord;
- PCONTEXT ContextRecord;
-} EXCEPTION_POINTERS,*PEXCEPTION_POINTERS, *LPEXCEPTION_POINTERS;
+typedef struct _OBJECT_TYPE_LIST {
+ WORD Level;
+ WORD Sbz;
+ GUID *ObjectType;
+} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
-#include <pshpack4.h>
+#define ACCESS_OBJECT_GUID 0
+#define ACCESS_PROPERTY_SET_GUID 1
+#define ACCESS_PROPERTY_GUID 2
+#define ACCESS_MAX_LEVEL 4
-typedef struct _LUID_AND_ATTRIBUTES {
- LUID Luid;
- DWORD Attributes;
-} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
-typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
-typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
+typedef enum _AUDIT_EVENT_TYPE {
+ AuditEventObjectAccess,
+ AuditEventDirectoryServiceAccess
+} AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
-#include <poppack.h>
+#define AUDIT_ALLOW_NO_PRIVILEGE 0x1
+
+#define ACCESS_DS_SOURCE_A "DS"
+#define ACCESS_DS_SOURCE_W L"DS"
+#define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
+#define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
+
+#define ACCESS_REASON_TYPE_MASK 0xffff0000
+#define ACCESS_REASON_DATA_MASK 0x0000ffff
+
+typedef enum _ACCESS_REASON_TYPE {
+ AccessReasonNone = 0x00000000,
+ AccessReasonAllowedAce = 0x00010000,
+ AccessReasonDeniedAce = 0x00020000,
+ AccessReasonAllowedParentAce = 0x00030000,
+ AccessReasonDeniedParentAce = 0x00040000,
+ AccessReasonMissingPrivilege = 0x00100000,
+ AccessReasonFromPrivilege = 0x00200000,
+ AccessReasonIntegrityLevel = 0x00300000,
+ AccessReasonOwnership = 0x00400000,
+ AccessReasonNullDacl = 0x00500000,
+ AccessReasonEmptyDacl = 0x00600000,
+ AccessReasonNoSD = 0x00700000,
+ AccessReasonNoGrant = 0x00800000
+} ACCESS_REASON_TYPE;
+
+typedef DWORD ACCESS_REASON;
+
+typedef struct _ACCESS_REASONS {
+ ACCESS_REASON Data[32];
+} ACCESS_REASONS, *PACCESS_REASONS;
+
+#define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x00000001
+#define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x00000002
+#define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x00000003
+
+typedef struct _SE_SECURITY_DESCRIPTOR {
+ DWORD Size;
+ DWORD Flags;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+} SE_SECURITY_DESCRIPTOR, *PSE_SECURITY_DESCRIPTOR;
-typedef struct _PRIVILEGE_SET {
- DWORD PrivilegeCount;
- DWORD Control;
- LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
-} PRIVILEGE_SET,*PPRIVILEGE_SET;
-typedef struct _SECURITY_ATTRIBUTES {
- DWORD nLength;
- LPVOID lpSecurityDescriptor;
- BOOL bInheritHandle;
-} SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;
+typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
-typedef enum _SECURITY_IMPERSONATION_LEVEL {
- SecurityAnonymous,
- SecurityIdentification,
- SecurityImpersonation,
- SecurityDelegation
-} SECURITY_IMPERSONATION_LEVEL,*PSECURITY_IMPERSONATION_LEVEL;
+typedef struct _ACCESS_DENIED_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
-typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,*PSECURITY_CONTEXT_TRACKING_MODE;
+typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
-typedef struct _SECURITY_QUALITY_OF_SERVICE {
- DWORD Length;
- SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
- SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
- BOOLEAN EffectiveOnly;
-} SECURITY_QUALITY_OF_SERVICE,*PSECURITY_QUALITY_OF_SERVICE;
+typedef struct _SYSTEM_ALARM_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
-typedef PVOID PACCESS_TOKEN;
+typedef struct _ACCESS_ALLOWED_CALLBACK_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} ACCESS_ALLOWED_CALLBACK_ACE, *PACCESS_ALLOWED_CALLBACK_ACE;
-typedef struct _SE_IMPERSONATION_STATE {
- PACCESS_TOKEN Token;
- BOOLEAN CopyOnOpen;
- BOOLEAN EffectiveOnly;
- SECURITY_IMPERSONATION_LEVEL Level;
-} SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
+typedef struct _ACCESS_DENIED_CALLBACK_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} ACCESS_DENIED_CALLBACK_ACE, *PACCESS_DENIED_CALLBACK_ACE;
-typedef struct _SID_IDENTIFIER_AUTHORITY {
- BYTE Value[6];
-} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
+typedef struct _SYSTEM_AUDIT_CALLBACK_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} SYSTEM_AUDIT_CALLBACK_ACE, *PSYSTEM_AUDIT_CALLBACK_ACE;
-typedef PVOID PSID;
+typedef struct _SYSTEM_ALARM_CALLBACK_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} SYSTEM_ALARM_CALLBACK_ACE, *PSYSTEM_ALARM_CALLBACK_ACE;
-typedef struct _SID {
- BYTE Revision;
- BYTE SubAuthorityCount;
- SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
- DWORD SubAuthority[ANYSIZE_ARRAY];
-} SID, *PISID;
+typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} ACCESS_ALLOWED_CALLBACK_OBJECT_ACE, *PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
-#define SECURITY_MIN_SID_SIZE (sizeof(SID))
-#define SECURITY_MAX_SID_SIZE (FIELD_OFFSET(SID, SubAuthority) + SID_MAX_SUB_AUTHORITIES * sizeof(DWORD))
+typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} ACCESS_DENIED_CALLBACK_OBJECT_ACE, *PACCESS_DENIED_CALLBACK_OBJECT_ACE;
-typedef struct _SID_AND_ATTRIBUTES {
- PSID Sid;
- DWORD Attributes;
-} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
-typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
-typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
+typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} SYSTEM_AUDIT_CALLBACK_OBJECT_ACE, *PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
+
+typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} SYSTEM_ALARM_CALLBACK_OBJECT_ACE, *PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
typedef struct _TOKEN_SOURCE {
CHAR SourceName[TOKEN_SOURCE_LENGTH];
SID_AND_ATTRIBUTES User;
} TOKEN_USER, *PTOKEN_USER;
-typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
-typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
-
-#ifndef _SECURITY_ATTRIBUTES_
-#define _SECURITY_ATTRIBUTES_
-typedef struct _SECURITY_DESCRIPTOR {
- BYTE Revision;
- BYTE Sbz1;
- SECURITY_DESCRIPTOR_CONTROL Control;
- PSID Owner;
- PSID Group;
- PACL Sacl;
- PACL Dacl;
-} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
-typedef PVOID PSECURITY_DESCRIPTOR;
-#endif
-
-typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
- BYTE Revision;
- BYTE Sbz1;
- SECURITY_DESCRIPTOR_CONTROL Control;
- DWORD Owner;
- DWORD Group;
- DWORD Sacl;
- DWORD Dacl;
-} SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
-
typedef enum _TOKEN_INFORMATION_CLASS {
TokenUser = 1,
TokenGroups,
MaxTokenInfoClass
} TOKEN_INFORMATION_CLASS;
-typedef enum _SID_NAME_USE {
- SidTypeUser=1,
- SidTypeGroup,
- SidTypeDomain,
- SidTypeAlias,
- SidTypeWellKnownGroup,
- SidTypeDeletedAccount,
- SidTypeInvalid,
- SidTypeUnknown,
- SidTypeComputer,
- SidTypeLabel
-} SID_NAME_USE,*PSID_NAME_USE;
-
typedef struct _QUOTA_LIMITS {
SIZE_T PagedPoolLimit;
SIZE_T NonPagedPoolLimit;
#define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x0100
#define JOB_OBJECT_LIMIT_JOB_MEMORY 0x0200
#define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x0400
-#define JOB_OBJECT_BREAKAWAY_OK 0x0800
-#define JOB_OBJECT_SILENT_BREAKAWAY 0x1000
+#define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x0800
+#define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x1000
+#define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x2000
/* JOBOBJECT_BASIC_UI_RESTRICTIONS.UIRestrictionsClass constants */
#define JOB_OBJECT_UILIMIT_HANDLES 0x0001
} SYSTEM_POWER_INFORMATION,*PSYSTEM_POWER_INFORMATION;
#endif
-#if (_WIN32_WINNT >= 0x0500)
-#define _AUDIT_EVENT_TYPE_HACK 1
-typedef enum _AUDIT_EVENT_TYPE {
- AuditEventObjectAccess,
- AuditEventDirectoryServiceAccess
-} AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
-#endif
-
#if (_WIN32_WINNT >= 0x0501)
typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
return Buffer;
}
-typedef struct _OBJECT_TYPE_LIST {
- WORD Level;
- WORD Sbz;
- GUID *ObjectType;
-} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
-
#if defined(_M_IX86)
FORCEINLINE struct _TEB * NtCurrentTeb(void)
{
}
FORCEINLINE PVOID GetCurrentFiber(VOID)
{
+ #ifdef NONAMELESSUNION
+ return ((PNT_TIB )(ULONG_PTR)_MoveFromCoprocessor(CP15_TPIDRURW))->DUMMYUNIONNAME.FiberData;
+ #else
return ((PNT_TIB )(ULONG_PTR)_MoveFromCoprocessor(CP15_TPIDRURW))->FiberData;
+ #endif
}
#elif defined(_M_PPC)
FORCEINLINE unsigned long _read_teb_dword(const unsigned long Offset)
return *((PVOID *)GetCurrentFiber());
}
-#define BitScanForward _BitScanForward
-#define BitScanReverse _BitScanReverse
-#define BitTest _bittest
-#define BitTestAndComplement _bittestandcomplement
-#define BitTestAndSet _bittestandset
-#define BitTestAndReset _bittestandreset
-#define InterlockedBitTestAndSet _interlockedbittestandset
-#define InterlockedBitTestAndReset _interlockedbittestandreset
-#define InterlockedAnd16 _InterlockedAnd16
-#define InterlockedCompareExchange16 _InterlockedCompareExchange16
-#define InterlockedOr16 _InterlockedOr16
-#define InterlockedIncrement16 _InterlockedIncrement16
-#define InterlockedDecrement16 _InterlockedDecrement16
-
-#ifdef _M_AMD64
-#define BitScanForward64 _BitScanForward64
-#define BitScanReverse64 _BitScanReverse64
-
-#define InterlockedAnd _InterlockedAnd
-#define InterlockedExchange _InterlockedExchange
-#define InterlockedOr _InterlockedOr
-
-#define InterlockedAnd64 _InterlockedAnd64
-#define InterlockedOr64 _InterlockedOr64
-
-#define InterlockedBitTestAndSet64 _interlockedbittestandset64
-#define InterlockedBitTestAndReset64 _interlockedbittestandreset64
-
-#endif
-
-#ifdef _WIN64
-#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONG64 *)a, b)
-#else
-#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
-#endif
-
/* TODO: Other architectures than X86 */
#if defined(_M_IX86)
#define PF_TEMPORAL_LEVEL_1