X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=include%2Fxdk%2Fexfuncs.h;h=3b215d9382d4e1f66624fc0ead0c3f66c5f98548;hp=7c34d93e04e1f0028778074a5ee6265702b2ce08;hb=87ac6e35042ef210a62ebcf506f5ee48b9f67847;hpb=e9047cd52461a6db2bb7b673f91c2a6acd36371a diff --git a/include/xdk/exfuncs.h b/include/xdk/exfuncs.h index 7c34d93e04e..3b215d9382d 100644 --- a/include/xdk/exfuncs.h +++ b/include/xdk/exfuncs.h @@ -2,6 +2,100 @@ * Executive Functions * ******************************************************************************/ +$if (_NTDDK_) +static __inline PVOID +ExAllocateFromZone( + IN PZONE_HEADER Zone) +{ + if (Zone->FreeList.Next) + Zone->FreeList.Next = Zone->FreeList.Next->Next; + return (PVOID) Zone->FreeList.Next; +} + +static __inline PVOID +ExFreeToZone( + IN PZONE_HEADER Zone, + IN PVOID Block) +{ + ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next; + Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block); + return ((PSINGLE_LIST_ENTRY) Block)->Next; +} + +/* + * PVOID + * ExInterlockedAllocateFromZone( + * IN PZONE_HEADER Zone, + * IN PKSPIN_LOCK Lock) + */ +#define ExInterlockedAllocateFromZone(Zone, Lock) \ + ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock)) + +/* PVOID + * ExInterlockedFreeToZone( + * IN PZONE_HEADER Zone, + * IN PVOID Block, + * IN PKSPIN_LOCK Lock); + */ +#define ExInterlockedFreeToZone(Zone, Block, Lock) \ + ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock) + +/* + * BOOLEAN + * ExIsFullZone( + * IN PZONE_HEADER Zone) + */ +#define ExIsFullZone(Zone) \ + ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL) + +/* BOOLEAN + * ExIsObjectInFirstZoneSegment( + * IN PZONE_HEADER Zone, + * IN PVOID Object); + */ +#define ExIsObjectInFirstZoneSegment(Zone,Object) \ + ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \ + ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \ + (Zone)->TotalSegmentSize)) ) + +#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite +#define ExAcquireResourceShared ExAcquireResourceSharedLite +#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite +#define ExDeleteResource ExDeleteResourceLite +#define ExInitializeResource ExInitializeResourceLite +#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite +#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite +#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite +#define ExReleaseResourceForThread ExReleaseResourceForThreadLite + +typedef enum _INTERLOCKED_RESULT { + ResultNegative = RESULT_NEGATIVE, + ResultZero = RESULT_ZERO, + ResultPositive = RESULT_POSITIVE +} INTERLOCKED_RESULT; + +#ifdef _X86_ +NTKERNELAPI +INTERLOCKED_RESULT +FASTCALL +Exfi386InterlockedIncrementLong( + IN OUT LONG volatile *Addend); + +NTKERNELAPI +INTERLOCKED_RESULT +FASTCALL +Exfi386InterlockedDecrementLong( + IN PLONG Addend); + +NTKERNELAPI +ULONG +FASTCALL +Exfi386InterlockedExchangeUlong( + IN PULONG Target, + IN ULONG Value); +#endif + +$endif (_NTDDK_) $if (_WDMDDK_) #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend) #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend) @@ -122,6 +216,8 @@ FASTCALL ExInterlockedFlushSList( IN OUT PSLIST_HEADER ListHead); +#endif /* !defined(_WIN64) */ + #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) NTKERNELAPI @@ -152,12 +248,14 @@ ExFreeToPagedLookasideList( IN OUT PPAGED_LOOKASIDE_LIST Lookaside, IN PVOID Entry); -#else +#else /* !_WIN2K_COMPAT_SLIST_USAGE */ +#if !defined(_WIN64) #define ExInterlockedPopEntrySList(_ListHead, _Lock) \ InterlockedPopEntrySList(_ListHead) #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \ InterlockedPushEntrySList(_ListHead, _ListEntry) +#endif static __inline PVOID @@ -194,7 +292,6 @@ ExFreeToPagedLookasideList( #endif /* _WIN2K_COMPAT_SLIST_USAGE */ -#endif /* !defined(_WIN64) */ /* ERESOURCE_THREAD * ExGetCurrentResourceThread( @@ -229,8 +326,55 @@ ExInitializeFastMutex( return; } +$endif (_WDMDDK_) #if (NTDDI_VERSION >= NTDDI_WIN2K) +$if (_NTDDK_) +NTKERNELAPI +NTSTATUS +NTAPI +ExExtendZone( + IN OUT PZONE_HEADER Zone, + IN OUT PVOID Segment, + IN ULONG SegmentSize); + +NTKERNELAPI +NTSTATUS +NTAPI +ExInitializeZone( + OUT PZONE_HEADER Zone, + IN ULONG BlockSize, + IN OUT PVOID InitialSegment, + IN ULONG InitialSegmentSize); +NTKERNELAPI +NTSTATUS +NTAPI +ExInterlockedExtendZone( + IN OUT PZONE_HEADER Zone, + IN OUT PVOID Segment, + IN ULONG SegmentSize, + IN OUT PKSPIN_LOCK Lock); + +NTKERNELAPI +NTSTATUS +NTAPI +ExUuidCreate( + OUT UUID *Uuid); + +NTKERNELAPI +DECLSPEC_NORETURN +VOID +NTAPI +ExRaiseAccessViolation(VOID); + +NTKERNELAPI +DECLSPEC_NORETURN +VOID +NTAPI +ExRaiseDatatypeMisalignment(VOID); + +$endif (_NTDDK_) +$if (_WDMDDK_) NTKERNELAPI VOID FASTCALL @@ -607,8 +751,10 @@ NTAPI ExUnregisterCallback( IN OUT PVOID CbRegistration); +$endif (_WDMDDK_) #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ +$if (_WDMDDK_) #if (NTDDI_VERSION >= NTDDI_WINXP) NTKERNELAPI @@ -890,5 +1036,4 @@ ExFreeToNPagedLookasideList( } } -$endif - +$endif (_WDMDDK_)