Author: sginsberg Date: Sun Oct 5 07:21:55 2008 New Revision: 36654
URL: http://svn.reactos.org/svn/reactos?rev=36654&view=rev Log: - Implement ExEnterCriticalRegionAndAcquireResourceShared and ExEnterCriticalRegionAndAcquireSharedWaitForExclusive - Add missing prototypes to the NDK
Modified: branches/nwin32/include/ndk/exfuncs.h branches/nwin32/ntoskrnl/ex/resource.c (contents, props changed) branches/nwin32/ntoskrnl/ntoskrnl_i386.def
Modified: branches/nwin32/include/ndk/exfuncs.h URL: http://svn.reactos.org/svn/reactos/branches/nwin32/include/ndk/exfuncs.h?rev... ============================================================================== --- branches/nwin32/include/ndk/exfuncs.h [iso-8859-1] (original) +++ branches/nwin32/include/ndk/exfuncs.h [iso-8859-1] Sun Oct 5 07:21:55 2008 @@ -111,6 +111,34 @@ IN PEX_ENUM_HANDLE_CALLBACK EnumHandleProcedure, IN OUT PVOID Context, OUT PHANDLE Handle OPTIONAL +); + +// +// Resource Functions +// + +PVOID +NTAPI +ExEnterCriticalRegionAndAcquireResourceExclusive( + IN PERESOURCE Resource +); + +PVOID +NTAPI +ExEnterCriticalRegionAndAcquireResourceShared( + IN PERESOURCE Resource +); + +PVOID +NTAPI +ExEnterCriticalRegionAndAcquireSharedWaitForExclusive( + IN PERESOURCE Resource +); + +VOID +FASTCALL +ExReleaseResourceAndLeaveCriticalRegion( + IN PERESOURCE Resource );
#endif
Modified: branches/nwin32/ntoskrnl/ex/resource.c URL: http://svn.reactos.org/svn/reactos/branches/nwin32/ntoskrnl/ex/resource.c?re... ============================================================================== --- branches/nwin32/ntoskrnl/ex/resource.c [iso-8859-1] (original) +++ branches/nwin32/ntoskrnl/ex/resource.c [iso-8859-1] Sun Oct 5 07:21:55 2008 @@ -2179,10 +2179,10 @@
/*++ * @name ExEnterCriticalRegionAndAcquireResourceExclusive - * @implemented NT5.1 - * - * The ExEnterCriticalRegionAndAcquireResourceExclusive enters a critical - * region and then exclusively acquires a resource. + * @implemented NT5.2 + * + * The ExEnterCriticalRegionAndAcquireResourceExclusive routine + * enters a critical region and then exclusively acquires a resource. * * @param Resource * Pointer to the resource to acquire. @@ -2207,11 +2207,71 @@ }
/*++ + * @name ExEnterCriticalRegionAndAcquireResourceShared + * @implemented NT5.2 + * + * The ExEnterCriticalRegionAndAcquireResourceShared routine + * enters a critical region and then acquires a resource shared. + * + * @param Resource + * Pointer to the resource to acquire. + * + * @return Pointer to the Win32K thread pointer of the current thread. + * + * @remarks See ExAcquireResourceSharedLite. + * + *--*/ +PVOID +NTAPI +ExEnterCriticalRegionAndAcquireResourceShared(IN PERESOURCE Resource) +{ + /* Enter critical region */ + KeEnterCriticalRegion(); + + /* Acquire the resource */ + ExAcquireResourceSharedLite(Resource, TRUE); + + /* Return the Win32 Thread */ + return KeGetCurrentThread()->Win32Thread; +} + +/*++ + * @name ExEnterCriticalRegionAndAcquireSharedWaitForExclusive + * @implemented NT5.2 + * + * The ExEnterCriticalRegionAndAcquireSharedWaitForExclusive routine + * enters a critical region and then acquires a resource shared if + * shared access can be granted and there are no exclusive waiters. + * It then acquires the resource exclusively. + * + * @param Resource + * Pointer to the resource to acquire. + * + * @return Pointer to the Win32K thread pointer of the current thread. + * + * @remarks See ExAcquireSharedWaitForExclusive. + * + *--*/ +PVOID +NTAPI +ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(IN PERESOURCE Resource) +{ + /* Enter critical region */ + KeEnterCriticalRegion(); + + /* Acquire the resource */ + ExAcquireSharedWaitForExclusive(Resource, TRUE); + + /* Return the Win32 Thread */ + return KeGetCurrentThread()->Win32Thread; +} + +/*++ * @name ExReleaseResourceAndLeaveCriticalRegion - * @implemented NT5.1 - * - * The ExReleaseResourceAndLeaveCriticalRegion release a resource and - * then leaves a critical region. + * @implemented NT5.2 + * + * The ExReleaseResourceAndLeaveCriticalRegion routine releases a resource + * and then leaves a critical region. * * @param Resource * Pointer to the resource to release.
Propchange: branches/nwin32/ntoskrnl/ex/resource.c ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: branches/nwin32/ntoskrnl/ntoskrnl_i386.def URL: http://svn.reactos.org/svn/reactos/branches/nwin32/ntoskrnl/ntoskrnl_i386.de... ============================================================================== --- branches/nwin32/ntoskrnl/ntoskrnl_i386.def [iso-8859-1] (original) +++ branches/nwin32/ntoskrnl/ntoskrnl_i386.def [iso-8859-1] Sun Oct 5 07:21:55 2008 @@ -83,8 +83,8 @@ ExDisableResourceBoostLite@4 @ExEnterCriticalRegionAndAcquireFastMutexUnsafe@4 ExEnterCriticalRegionAndAcquireResourceExclusive@4 -;ExEnterCriticalRegionAndAcquireResourceShared -;ExEnterCriticalRegionAndAcquireSharedWaitForExclusive +ExEnterCriticalRegionAndAcquireResourceShared@4 +ExEnterCriticalRegionAndAcquireSharedWaitForExclusive@4 ExEnumHandleTable@16 ExEventObjectType=_ExEventObjectType ExExtendZone@12