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

Function ExFastRefDereference

KernelLibrary/SysMon.cpp:441–465  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

439}
440
441LOGICAL ExFastRefDereference(
442 _Inout_ PEX_FAST_REF_S FastRef,
443 _In_ PVOID Object
444) {
445 EX_FAST_REF_S OldRef, NewRef;
446
447 while (true) {
448 OldRef = ReadForWriteAccess(FastRef);
449 if ((OldRef.Value ^ (ULONG_PTR)Object) >= MAX_FAST_REFS) {
450 return FALSE;
451 }
452
453 NewRef.Value = OldRef.Value + 1;
454 NewRef.Object = InterlockedCompareExchangePointerRelease(
455 &FastRef->Object,
456 NewRef.Object,
457 OldRef.Object
458 );
459 if (NewRef.Object != OldRef.Object) {
460 continue;
461 }
462 break;
463 }
464 return TRUE;
465}
466
467VOID ExDereferenceCallBackBlock(
468 _Inout_ PEX_CALLBACK Callback,

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected