- Sync 36654 to trunk

svn path=/trunk/; revision=37149
This commit is contained in:
Stefan Ginsberg 2008-11-02 14:08:49 +00:00
parent 174ffe7d8c
commit d14b6b0318
3 changed files with 89 additions and 5 deletions

View file

@ -113,6 +113,33 @@ ExEnumHandleTable(
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
//

View file

@ -2198,6 +2198,66 @@ ExEnterCriticalRegionAndAcquireResourceExclusive(IN PERESOURCE Resource)
return KeGetCurrentThread()->Win32Thread;
}
/*++
* @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
@ -2223,6 +2283,3 @@ ExReleaseResourceAndLeaveCriticalRegion(IN PERESOURCE Resource)
/* Leave critical region */
KeLeaveCriticalRegion();
}
/* EOF */

View file

@ -80,8 +80,8 @@
@ stdcall ExDisableResourceBoostLite(ptr)
@ fastcall ExEnterCriticalRegionAndAcquireFastMutexUnsafe(ptr)
@ stdcall ExEnterCriticalRegionAndAcquireResourceExclusive(ptr)
;ExEnterCriticalRegionAndAcquireResourceShared
;ExEnterCriticalRegionAndAcquireSharedWaitForExclusive
@ stdcall ExEnterCriticalRegionAndAcquireResourceShared(ptr)
@ stdcall ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(ptr)
@ stdcall ExEnumHandleTable(ptr ptr ptr ptr)
@ extern ExEventObjectType _ExEventObjectType
@ stdcall ExExtendZone(ptr ptr long)