EtwpFreeUserBufferSpace
VOID __fastcall EtwpFreeUserBufferSpace(_ETW_REALTIME_CONSUMER *Prc, UINT64 BufferSize, _WMI_BUFFER_HEADER *UserBuffer){
unsigned __int8 *ReservedBufferSpace;
ULONG_PTR RegionSize;
PVOID BaseAddress;
BaseAddress = UserBuffer;
RegionSize = BufferSize;
ReservedBufferSpace = Prc->ReservedBufferSpace;
if( UserBuffer < (_WMI_BUFFER_HEADER *)ReservedBufferSpace
|| UserBuffer >= (_WMI_BUFFER_HEADER *)&ReservedBufferSpace[Prc->ReservedBufferSpaceSize] )
{
ZwFreeVirtualMemory(Prc->ProcessHandle, &BaseAddress, &RegionSize, 0x8000ui64);
}
else
{
RtlInterlockedClearBitRun(
&Prc->ReservedBufferSpaceBitMap,
(unsigned int)(((char *)UserBuffer - (char *)ReservedBufferSpace) / 4096),
(((_DWORD)BufferSize + 4095) & 0xFFFFF000) >> 12);
}
}Referenced by:
No references.