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

Function ExFastRefAddAdditionalReferenceCounts

KernelLibrary/SysMon.cpp:323–349  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

321}
322
323LOGICAL
324ExFastRefAddAdditionalReferenceCounts(
325 _Inout_ PEX_FAST_REF_S FastRef,
326 _In_ PVOID Object,
327 _In_ ULONG RefsToAdd
328) {
329 EX_FAST_REF_S OldRef, NewRef;
330
331 while (true) {
332 OldRef = ReadForWriteAccess(FastRef);
333
334 if (OldRef.RefCnt + RefsToAdd > MAX_FAST_REFS ||
335 (ULONG_PTR)Object != (OldRef.Value & ~MAX_FAST_REFS)) {
336 return FALSE;
337 }
338
339 NewRef.Value = OldRef.Value + RefsToAdd;
340 NewRef.Object = InterlockedCompareExchangePointerAcquire(&FastRef->Object,
341 NewRef.Object, OldRef.Object);
342
343 if (NewRef.Object != OldRef.Object) {
344 continue;
345 }
346 break;
347 }
348 return TRUE;
349}
350
351BOOLEAN
352ExFastRefObjectNull(

Callers 1

ExReferenceCallBackBlockFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected