Files
DBService/param/Param.cpp
T
2026-07-09 11:27:59 +08:00

100 lines
2.8 KiB
C++

#include "typedef.h"
#include "Param.h"
#ifdef _SERVER
DWORD PM_HandleParam( DWORD dwParam1, DWORD dwParam2 )
{
DWORD dwRet = dwParam1;
int iShift = dwParam2 % 32; //移位个数
DWORD dwLoRev=0xFFFFFFFF;
for( int i=0; i<iShift; i++ ){
dwLoRev >>= 1; //低32-x位
}
DWORD dwHiRev = 0xFFFFFFFF - dwLoRev; //高x位
DWORD dwTemp1 = dwRet & dwHiRev; //取高x位
dwRet = (dwRet<<iShift) | (dwTemp1>>(32-iShift)); //左移x位 + 高x位右移32-x位
DWORD dwTemp2 = ~(dwRet & dwLoRev) & dwLoRev; //低32-x位取反
return (dwRet & dwHiRev) | dwTemp2; //高x位 + 低32-x位取反
}
#else
DWORD PM_GetParam( void* param1, void* param2, DWORD dwParam )
{
DWORD dwRet = (((long)param1&0xFFFF)<<16) | ((long)param2&0xFFFF); //分别取低16位
int iShift = dwParam % 32; //移位个数
DWORD dwLoMask=0, dwLoRev=0xFFFFFFFF;
for( int i=0; i<iShift; i++ ){
dwLoMask = (dwLoMask<<1) + 1; //低x位
dwLoRev >>= 1; //低32-x位
}
DWORD dwHiRev = 0xFFFFFFFF - dwLoRev; //高x位
//取反加密
DWORD dwTemp1 = ~(dwRet & dwLoRev) & dwLoRev; //低32-x位取反
dwRet = (dwRet & dwHiRev) | dwTemp1; //高x位 + 低32-x位取反
//移位
DWORD dwTemp2 = dwRet & dwLoMask; //低x位
dwRet = (dwRet>>iShift) | (dwTemp2<<(32-iShift)); //右移x位 + 低x位左移32-x位
return dwRet;
}
void PM_SetParam( void** param1, void** param2, DWORD dwParam )
{
*param1 = (void*)(((long)*param1 & (long)0xFFFFFFFFFFFF0000) + ( dwParam>>16 ));
*param2 = (void*)(((long)*param2 & (long)0xFFFFFFFFFFFF0000) + ( dwParam&0xFFFF ));
}
DWORD g_dwMMParam = 0, //MM传递参数
g_dwVerifyParam = 0; //CS传递参数
void PM_SetMMParam( void* param1, void* param2 )
{
g_dwMMParam = (((long)param1&0xFFFF)<<16) | ((long)param2&0xFFFF); //分别取低16位
g_dwVerifyParam = 0;
}
DWORD PM_GetMMParam( DWORD dwParam )
{
DWORD dwRet = g_dwMMParam;
int iShift = dwParam % 32; //移位个数
DWORD dwLoMask=0, dwLoRev=0xFFFFFFFF;
for( int i=0; i<iShift; i++ ){
dwLoMask = (dwLoMask<<1) + 1; //低x位
dwLoRev >>= 1; //低32-x位
}
DWORD dwHiRev = 0xFFFFFFFF - dwLoRev; //高x位
//取反加密
DWORD dwTemp1 = ~(dwRet & dwLoRev) & dwLoRev; //低32-x位取反
dwRet = (dwRet & dwHiRev) | dwTemp1; //高x位 + 低32-x位取反
//移位
DWORD dwTemp2 = dwRet & dwLoMask; //低x位
dwRet = (dwRet>>iShift) | (dwTemp2<<(32-iShift)); //右移x位 + 低x位左移32-x位
return dwRet;
}
void PM_SetVerifyParam( DWORD dwParam )
{
g_dwVerifyParam = dwParam==0 ? g_dwMMParam : dwParam;
}
void PM_VerifyParam( void** param1, void** param2 )
{
*param1 = (void*)(((long)*param1 & (long)0xFFFFFFFFFFFF0000) + ( g_dwVerifyParam>>16 ));
*param2 = (void*)(((long)*param2 & (long)0xFFFFFFFFFFFF0000) + ( g_dwVerifyParam&0xFFFF ));
}
#endif //_SERVER