ObReferenceObjectSafe(IN PVOID Object)
{
POBJECT_HEADER ObjectHeader;
- LONG OldValue, NewValue;
+ LONG_PTR OldValue, NewValue;
/* Get the object header */
ObjectHeader = OBJECT_TO_OBJECT_HEADER(Object);
do
{
/* Increase the reference count */
- NewValue = InterlockedCompareExchange(&ObjectHeader->PointerCount,
- OldValue + 1,
- OldValue);
+ NewValue = InterlockedCompareExchangeSizeT(&ObjectHeader->PointerCount,
+ OldValue + 1,
+ OldValue);
if (OldValue == NewValue) return TRUE;
/* Keep looping */
IN LONG Count)
{
/* Increment the reference count and return the count now */
- return InterlockedExchangeAdd(&OBJECT_TO_OBJECT_HEADER(Object)->
- PointerCount,
- Count) + Count;
+ return InterlockedExchangeAddSizeT(&OBJECT_TO_OBJECT_HEADER(Object)->
+ PointerCount,
+ Count) + Count;
}
LONG
IN LONG Count)
{
POBJECT_HEADER Header;
- LONG NewCount;
+ LONG_PTR NewCount;
/* Extract the object header */
Header = OBJECT_TO_OBJECT_HEADER(Object);
/* Check whether the object can now be deleted. */
- NewCount = InterlockedExchangeAdd(&Header->PointerCount, -Count) - Count;
+ NewCount = InterlockedExchangeAddSizeT(&Header->PointerCount, -Count) - Count;
if (!NewCount) ObpDeferObjectDeletion(Header);
/* Return the current count */
/* FIXME: Audit access if required */
/* Reference the object directly since we have its header */
- InterlockedIncrement(&ObjectHeader->PointerCount);
+ InterlockedIncrementSizeT(&ObjectHeader->PointerCount);
/* Unlock the handle */
ExUnlockHandleTableEntry(HandleTable, HandleEntry);
ASSERT(Object);
/* Get the header and increment the reference count */
- return InterlockedIncrement(&OBJECT_TO_OBJECT_HEADER(Object)->PointerCount);
+ return InterlockedIncrementSizeT(&OBJECT_TO_OBJECT_HEADER(Object)->PointerCount);
}
LONG_PTR
}
/* Check whether the object can now be deleted. */
- OldCount = InterlockedDecrement(&Header->PointerCount);
+ OldCount = InterlockedDecrementSizeT(&Header->PointerCount);
if (!OldCount)
{
/* Sanity check */
POBJECT_HEADER Header = OBJECT_TO_OBJECT_HEADER(Object);
/* Check whether the object can now be deleted. */
- if (!InterlockedDecrement(&Header->PointerCount))
+ if (!InterlockedDecrementSizeT(&Header->PointerCount))
{
/* Add us to the deferred deletion list */
ObpDeferObjectDeletion(Header);
}
/* Increment the reference count and return success */
- InterlockedIncrement(&Header->PointerCount);
+ InterlockedIncrementSizeT(&Header->PointerCount);
return STATUS_SUCCESS;
}
/* Reference ourselves */
ObjectHeader = OBJECT_TO_OBJECT_HEADER(CurrentProcess);
- InterlockedExchangeAdd(&ObjectHeader->PointerCount, 1);
+ InterlockedExchangeAddSizeT(&ObjectHeader->PointerCount, 1);
/* Return the pointer */
*Object = CurrentProcess;
/* Reference ourselves */
ObjectHeader = OBJECT_TO_OBJECT_HEADER(CurrentThread);
- InterlockedExchangeAdd(&ObjectHeader->PointerCount, 1);
+ InterlockedExchangeAddSizeT(&ObjectHeader->PointerCount, 1);
/* Return the pointer */
*Object = CurrentThread;
!(~GrantedAccess & DesiredAccess))
{
/* Reference the object directly since we have its header */
- InterlockedIncrement(&ObjectHeader->PointerCount);
+ InterlockedIncrementSizeT(&ObjectHeader->PointerCount);
/* Mask out the internal attributes */
Attributes = HandleEntry->ObAttributes & OBJ_HANDLE_ATTRIBUTES;