#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>= 1; //低32-x位 } DWORD dwHiRev = 0xFFFFFFFF - dwLoRev; //高x位 DWORD dwTemp1 = dwRet & dwHiRev; //取高x位 dwRet = (dwRet<>(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>= 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>= 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