#include "interlockedapi.h" #include "common.h" #include namespace kernel32 { LONG WIN_FUNC InterlockedIncrement(LONG volatile *Addend) { WIN_API_SEGMENT_GUARD(); VERBOSE_LOG("InterlockedIncrement(%p)\n", Addend); return ++(*Addend); } LONG WIN_FUNC InterlockedDecrement(LONG volatile *Addend) { WIN_API_SEGMENT_GUARD(); VERBOSE_LOG("InterlockedDecrement(%p)\n", Addend); return --(*Addend); } LONG WIN_FUNC InterlockedExchange(LONG volatile *Target, LONG Value) { WIN_API_SEGMENT_GUARD(); VERBOSE_LOG("InterlockedExchange(%p, %ld)\n", Target, static_cast(Value)); LONG initial = *Target; *Target = Value; return initial; } LONG WIN_FUNC InterlockedCompareExchange(LONG volatile *Destination, LONG Exchange, LONG Comperand) { WIN_API_SEGMENT_GUARD(); VERBOSE_LOG("InterlockedCompareExchange(%p, %ld, %ld)\n", Destination, static_cast(Exchange), static_cast(Comperand)); LONG original = *Destination; if (original == Comperand) { *Destination = Exchange; } return original; } void WIN_FUNC InitializeSListHead(PSLIST_HEADER ListHead) { WIN_API_SEGMENT_GUARD(); DEBUG_LOG("InitializeSListHead(%p)\n", ListHead); if (!ListHead) { return; } std::memset(ListHead, 0, sizeof(*ListHead)); } } // namespace kernel32