2025-11-30 21:20:04 +01:00
|
|
|
|
#include "StdAfx.h"
|
2019-01-05 20:21:43 +08:00
|
|
|
|
#include "Buffer.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include <math.h>
|
|
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 增大页面对齐大小,减少重新分配次数 (4KB对齐)
|
|
|
|
|
|
#define U_PAGE_ALIGNMENT 4096
|
|
|
|
|
|
#define F_PAGE_ALIGNMENT 4096.0
|
|
|
|
|
|
// 压缩阈值:当已读取数据超过此比例时才进行压缩
|
|
|
|
|
|
#define COMPACT_THRESHOLD 0.5
|
2024-12-26 17:07:43 +08:00
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
CBuffer::CBuffer(void)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
m_ulMaxLength = 0;
|
2025-11-30 21:20:04 +01:00
|
|
|
|
m_ulReadOffset = 0;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
m_Ptr = m_Base = NULL;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
InitializeCriticalSection(&m_cs);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CBuffer::~CBuffer(void)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (m_Base) {
|
|
|
|
|
|
VirtualFree(m_Base, 0, MEM_RELEASE);
|
|
|
|
|
|
m_Base = NULL;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
DeleteCriticalSection(&m_cs);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
m_Base = m_Ptr = NULL;
|
|
|
|
|
|
m_ulMaxLength = 0;
|
2025-11-30 21:20:04 +01:00
|
|
|
|
m_ulReadOffset = 0;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-26 17:07:43 +08:00
|
|
|
|
ULONG CBuffer::RemoveCompletedBuffer(ULONG ulLength)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
EnterCriticalSection(&m_cs);
|
2024-12-26 17:07:43 +08:00
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
ULONG dataLen = m_Ptr - m_Base;
|
|
|
|
|
|
if (ulLength > m_ulMaxLength) { //请求长度比内存总长度还大
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
2025-11-30 21:20:04 +01:00
|
|
|
|
if (ulLength > dataLen) { //请求长度比有效数据长度还大
|
|
|
|
|
|
ulLength = dataLen;
|
2025-10-15 04:32:59 +08:00
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (ulLength) {
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 使用延迟移动策略:只更新读取偏移,不立即移动数据
|
|
|
|
|
|
m_ulReadOffset += ulLength;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 当已读取数据超过阈值时才进行压缩
|
|
|
|
|
|
if (m_ulReadOffset > m_ulMaxLength * COMPACT_THRESHOLD) {
|
|
|
|
|
|
CompactBuffer();
|
|
|
|
|
|
}
|
2025-10-15 04:32:59 +08:00
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
return ulLength;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 压缩缓冲区,移除已读取的数据
|
|
|
|
|
|
VOID CBuffer::CompactBuffer()
|
|
|
|
|
|
{
|
|
|
|
|
|
// 此函数应在持有锁的情况下调用
|
|
|
|
|
|
if (m_ulReadOffset > 0 && m_Base) {
|
|
|
|
|
|
ULONG remainingData = (m_Ptr - m_Base) - m_ulReadOffset;
|
|
|
|
|
|
if (remainingData > 0) {
|
|
|
|
|
|
MoveMemory(m_Base, m_Base + m_ulReadOffset, remainingData);
|
|
|
|
|
|
}
|
|
|
|
|
|
m_Ptr = m_Base + remainingData;
|
|
|
|
|
|
m_ulReadOffset = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// 尝试缩减缓冲区
|
|
|
|
|
|
DeAllocateBuffer(remainingData);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
ULONG CBuffer::ReadBuffer(PBYTE Buffer, ULONG ulLength)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
EnterCriticalSection(&m_cs);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 计算有效数据长度(考虑读取偏移)
|
|
|
|
|
|
ULONG effectiveDataLen = (m_Ptr - m_Base) - m_ulReadOffset;
|
2024-12-26 17:07:43 +08:00
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
if (ulLength > effectiveDataLen) {
|
|
|
|
|
|
ulLength = effectiveDataLen;
|
2025-10-15 04:32:59 +08:00
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (ulLength) {
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 从当前读取位置拷贝数据
|
|
|
|
|
|
CopyMemory(Buffer, m_Base + m_ulReadOffset, ulLength);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 更新读取偏移而不是移动数据
|
|
|
|
|
|
m_ulReadOffset += ulLength;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 当已读取数据超过阈值时才进行压缩
|
|
|
|
|
|
if (m_ulReadOffset > m_ulMaxLength * COMPACT_THRESHOLD) {
|
|
|
|
|
|
CompactBuffer();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
return ulLength;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 私有: 缩减缓存
|
2025-10-15 04:32:59 +08:00
|
|
|
|
ULONG CBuffer::DeAllocateBuffer(ULONG ulLength)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (ulLength < (m_Ptr - m_Base))
|
|
|
|
|
|
return 0;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (m_ulMaxLength <= ulNewMaxLength) {
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
ULONG ulv1 = m_Ptr - m_Base; //从原来内存中的有效数据
|
2025-10-15 04:32:59 +08:00
|
|
|
|
CopyMemory(NewBase,m_Base,ulv1);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
VirtualFree(m_Base,0,MEM_RELEASE);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
m_Base = NewBase;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
m_Ptr = m_Base + ulv1;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
m_ulMaxLength = ulNewMaxLength;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
return m_ulMaxLength;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOL CBuffer::WriteBuffer(PBYTE Buffer, ULONG ulLength)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
EnterCriticalSection(&m_cs);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (ReAllocateBuffer(ulLength + (m_Ptr - m_Base)) == -1) { //10 +1 1024
|
|
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
CopyMemory(m_Ptr,Buffer,ulLength);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
m_Ptr+=ulLength;
|
|
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
return TRUE;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 私有: 扩展缓存
|
2019-01-05 20:21:43 +08:00
|
|
|
|
ULONG CBuffer::ReAllocateBuffer(ULONG ulLength)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (ulLength < m_ulMaxLength)
|
|
|
|
|
|
return 0;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
|
|
|
|
|
|
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
|
|
|
|
|
|
if (NewBase == NULL) {
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2024-12-26 17:07:43 +08:00
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
ULONG ulv1 = m_Ptr - m_Base; //原先的有效数据长度
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
CopyMemory(NewBase,m_Base,ulv1);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (m_Base) {
|
|
|
|
|
|
VirtualFree(m_Base,0,MEM_RELEASE);
|
|
|
|
|
|
}
|
|
|
|
|
|
m_Base = NewBase;
|
|
|
|
|
|
m_Ptr = m_Base + ulv1; //1024
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
m_ulMaxLength = ulNewMaxLength; //2048
|
|
|
|
|
|
|
|
|
|
|
|
return m_ulMaxLength;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
VOID CBuffer::ClearBuffer()
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
EnterCriticalSection(&m_cs);
|
|
|
|
|
|
m_Ptr = m_Base;
|
2025-11-30 21:20:04 +01:00
|
|
|
|
m_ulReadOffset = 0; // 重置读取偏移
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
DeAllocateBuffer(1024);
|
|
|
|
|
|
LeaveCriticalSection(&m_cs);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
ULONG CBuffer::GetBufferLength() // 返回有效数据长度
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
EnterCriticalSection(&m_cs);
|
|
|
|
|
|
if (m_Base == NULL) {
|
|
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 有效数据长度需要减去已读取的偏移量
|
|
|
|
|
|
ULONG len = (m_Ptr - m_Base) - m_ulReadOffset;
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
|
|
|
|
|
|
return len;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
std::string CBuffer::Skip(ULONG ulPos)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (ulPos == 0)
|
|
|
|
|
|
return "";
|
2025-07-12 20:27:14 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
EnterCriticalSection(&m_cs);
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 从当前读取位置开始跳过
|
|
|
|
|
|
std::string ret((char*)(m_Base + m_ulReadOffset), (char*)(m_Base + m_ulReadOffset + ulPos));
|
|
|
|
|
|
|
|
|
|
|
|
// 使用延迟移动策略
|
|
|
|
|
|
m_ulReadOffset += ulPos;
|
|
|
|
|
|
|
|
|
|
|
|
// 当已读取数据超过阈值时才进行压缩
|
|
|
|
|
|
if (m_ulReadOffset > m_ulMaxLength * COMPACT_THRESHOLD) {
|
|
|
|
|
|
CompactBuffer();
|
|
|
|
|
|
}
|
2025-07-12 20:27:14 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
return ret;
|
2025-07-12 20:27:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 此函数是多线程安全的. 只能远程调用使用它.
|
2024-12-26 17:07:43 +08:00
|
|
|
|
LPBYTE CBuffer::GetBuffer(ULONG ulPos)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
EnterCriticalSection(&m_cs);
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 计算有效数据长度
|
|
|
|
|
|
ULONG effectiveDataLen = (m_Ptr - m_Base) - m_ulReadOffset;
|
|
|
|
|
|
if (m_Base == NULL || ulPos >= effectiveDataLen) {
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
return NULL;
|
|
|
|
|
|
}
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 返回相对于当前读取位置的指针
|
|
|
|
|
|
LPBYTE result = m_Base + m_ulReadOffset + ulPos;
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 此函数是多线程安全的. 获取缓存,得到Buffer对象.
|
2024-12-26 17:07:43 +08:00
|
|
|
|
Buffer CBuffer::GetMyBuffer(ULONG ulPos)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
EnterCriticalSection(&m_cs);
|
2025-11-30 21:20:04 +01:00
|
|
|
|
ULONG effectiveDataLen = (m_Ptr - m_Base) - m_ulReadOffset;
|
|
|
|
|
|
if (m_Base == NULL || ulPos >= effectiveDataLen) {
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
return Buffer();
|
|
|
|
|
|
}
|
2025-11-30 21:20:04 +01:00
|
|
|
|
Buffer result = Buffer(m_Base + m_ulReadOffset + ulPos, effectiveDataLen - ulPos);
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
2024-12-26 17:07:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 此函数是多线程安全的. 获取缓存指定位置处的字节值.
|
2025-10-15 04:32:59 +08:00
|
|
|
|
BYTE CBuffer::GetBYTE(ULONG ulPos)
|
|
|
|
|
|
{
|
|
|
|
|
|
EnterCriticalSection(&m_cs);
|
2025-11-30 21:20:04 +01:00
|
|
|
|
ULONG effectiveDataLen = (m_Ptr - m_Base) - m_ulReadOffset;
|
|
|
|
|
|
if (m_Base == NULL || ulPos >= effectiveDataLen) {
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
2025-11-30 21:20:04 +01:00
|
|
|
|
return 0;
|
2025-10-15 04:32:59 +08:00
|
|
|
|
}
|
2025-11-30 21:20:04 +01:00
|
|
|
|
BYTE p = *(m_Base + m_ulReadOffset + ulPos);
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
|
|
|
|
|
|
return p;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2024-12-26 17:07:43 +08:00
|
|
|
|
|
2025-11-30 21:20:04 +01:00
|
|
|
|
// 此函数是多线程安全的. 将缓存拷贝到目标内存中.
|
2025-10-15 04:32:59 +08:00
|
|
|
|
BOOL CBuffer::CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos)
|
|
|
|
|
|
{
|
|
|
|
|
|
EnterCriticalSection(&m_cs);
|
2025-11-30 21:20:04 +01:00
|
|
|
|
ULONG effectiveDataLen = (m_Ptr - m_Base) - m_ulReadOffset;
|
|
|
|
|
|
if (m_Base == NULL || effectiveDataLen - ulPos < nLen) {
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
}
|
2025-11-30 21:20:04 +01:00
|
|
|
|
memcpy(pDst, m_Base + m_ulReadOffset + ulPos, nLen);
|
2025-10-15 04:32:59 +08:00
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
return TRUE;
|
2025-11-30 21:20:04 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取可直接写入的缓冲区指针,用于零拷贝接收
|
|
|
|
|
|
LPBYTE CBuffer::GetWriteBuffer(ULONG requiredSize, ULONG& availableSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
EnterCriticalSection(&m_cs);
|
|
|
|
|
|
|
|
|
|
|
|
// 先压缩缓冲区以获得更多空间
|
|
|
|
|
|
if (m_ulReadOffset > 0) {
|
|
|
|
|
|
CompactBuffer();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 确保有足够空间
|
|
|
|
|
|
ULONG currentDataLen = m_Ptr - m_Base;
|
|
|
|
|
|
if (ReAllocateBuffer(currentDataLen + requiredSize) == (ULONG)-1) {
|
|
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
availableSize = 0;
|
|
|
|
|
|
return NULL;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
availableSize = m_ulMaxLength - currentDataLen;
|
|
|
|
|
|
LPBYTE result = m_Ptr;
|
|
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 确认写入完成,更新内部指针
|
|
|
|
|
|
VOID CBuffer::CommitWrite(ULONG writtenSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
EnterCriticalSection(&m_cs);
|
|
|
|
|
|
m_Ptr += writtenSize;
|
|
|
|
|
|
LeaveCriticalSection(&m_cs);
|
|
|
|
|
|
}
|