MCPcopy Create free account
hub / github.com/BeneficialCode/WinArk / ExFastRefAddAdditionalReferenceCounts

Function ExFastRefAddAdditionalReferenceCounts

KernelLibrary/kDbgSys.cpp:1654–1680  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1652}
1653
1654LOGICAL
1655ExFastRefAddAdditionalReferenceCounts(
1656 _Inout_ PEX_FAST_REF FastRef,
1657 _In_ PVOID Object,
1658 _In_ ULONG RefsToAdd
1659) {
1660 EX_FAST_REF OldRef, NewRef;
1661
1662 while (true) {
1663 OldRef = ReadForWriteAccess(FastRef);
1664
1665 if (OldRef.RefCnt + RefsToAdd > MAX_FAST_REFS ||
1666 (ULONG_PTR)Object != (OldRef.Value & ~MAX_FAST_REFS)) {
1667 return FALSE;
1668 }
1669
1670 NewRef.Value = OldRef.Value + RefsToAdd;
1671 NewRef.Object = InterlockedCompareExchangePointerAcquire(&FastRef->Object,
1672 NewRef.Object,
1673 OldRef.Object);
1674 if (NewRef.Object != OldRef.Object) {
1675 continue;
1676 }
1677 break;
1678 }
1679 return TRUE;
1680}
1681
1682PVOID ObFastReferenceObject(
1683 _In_ PEX_FAST_REF FastRef

Callers 1

ObFastReferenceObjectFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected