📄 peerregeditctrl.cpp
字号:
// PeerRegeditCtrl.cpp: implementation of the PeerRegeditCtrl.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "PeerRegeditCtrl.h"
#include "command.h"
#include "peersocket.h"
#include "peerthread.h"
////////把字符串主键转换成主键句柄/////////////
HKEY GetPeerRegKey(char* keystr)
{
HKEY hKey;
if(strcmp(keystr,"HKEY_CLASSES_ROOT")==0)
hKey=HKEY_CLASSES_ROOT;
if(strcmp(keystr,"HKEY_CURRENT_CONFIG")==0)
hKey=HKEY_CURRENT_CONFIG;
if(strcmp(keystr,"HKEY_CURRENT_USER")==0)
hKey=HKEY_CURRENT_USER;
if(strcmp(keystr,"HKEY_LOCAL_MACHINE")==0)
hKey=HKEY_LOCAL_MACHINE;
if(strcmp(keystr,"HKEY_USERS")==0)
hKey=HKEY_USERS;
return hKey;
}
/////枚举键值//////
bool PeerRegeditEnumValue(SOCKET s,WSAEVENT hEvent)
{
DWORD retLen;
DWORD namelen;
DWORD datalen;
DWORD index;
HKEY hRootKey,hKey;
REGEDIT regValue;
//////////取得枚举注册表所需的信息,主键,子键///////////
if(!PeerRecvDataS(s,(char*)®Value,sizeof(regValue),&retLen,
hEvent,SENDRECV_TIMEOUT))
{
return false;
}
//////////转换主键名到主键句柄/////////////
if(!(hRootKey=GetPeerRegKey(regValue.key)))
{
return false;
}
//////////打开相应子键,取得句柄//////////////
if(RegOpenKey(hRootKey,regValue.sunkey,&hKey)!=ERROR_SUCCESS)
{
return false;
}
namelen=256;datalen=512;
/////检索键的缺省项值,并做相应处理/////////////////
memset((char*)®Value,0,sizeof(regValue));
if(RegQueryValueEx(hKey,"",NULL,®Value.type,regValue.data,&datalen)
!=ERROR_SUCCESS)
{
strcpy((char*)regValue.data,"(数据未设项)");
regValue.datalen=strlen("(数据未设项)")+1;;
regValue.type=REG_SZ;
}
else
{
regValue.datalen=datalen;
}
strcpy(regValue.value,"(默认)");
/////////发送值////////////////////
PeerSendDataS(s,(char*)®Value,sizeof(regValue),&retLen,hEvent,
SENDRECV_TIMEOUT);
//////////////枚举键的项值并发送///////////////
namelen=256;datalen=512;index=0;
memset((char*)®Value,0,sizeof(regValue));
while(RegEnumValue(hKey,index,regValue.value,&namelen,NULL,
®Value.type,regValue.data,&datalen)!=ERROR_NO_MORE_ITEMS)
{
regValue.datalen=datalen;
if(strlen(regValue.value)!=0)
{
PeerSendDataS(s,(char*)®Value,sizeof(regValue),&retLen,
hEvent,SENDRECV_TIMEOUT);
if(GetLastError()==PEER_FUNERROR)
break;
}
memset((char*)®Value,0,sizeof(regValue));
namelen=256;datalen=512;
index++;
}
RegCloseKey(hKey);
return true;
}
/////枚举子键//////
bool PeerRegeditEnumKey(SOCKET s,WSAEVENT hEvent)
{
DWORD retLen;
DWORD namelen;
DWORD index;
HKEY hRootKey,hKey;
REGEDIT regKey;
//////////取得枚举注册表所需的信息,主键,子键///////////
if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen,
hEvent,SENDRECV_TIMEOUT))
{
return false;
}
//////////转换主键名到主键句柄/////////////
if(!(hRootKey=GetPeerRegKey(regKey.key)))
{
return false;
}
//////////打开相应子键,取得句柄//////////////
if(RegOpenKey(hRootKey,regKey.sunkey,&hKey)!=ERROR_SUCCESS)
{
return false;
}
namelen=256;index=0;
memset(®Key,0,sizeof(regKey));
HKEY childkey;
char childkeyvalue[256];
DWORD childkeylen;childkeylen=256;
while(RegEnumKey(hKey,index,regKey.sunkey,namelen)!=ERROR_NO_MORE_ITEMS)
{
//////////检查键key是否还有子键,有则在regKey.havechild中标志//
if(RegOpenKey(hKey,regKey.sunkey,&childkey)==ERROR_SUCCESS)
{
if(RegEnumKey(childkey,0,childkeyvalue,childkeylen)
==ERROR_SUCCESS)
regKey.havechild=1;
else
regKey.havechild=0;
}
else
{
regKey.havechild=0;
RegCloseKey(childkey);
}
//////////发送枚举到的子键/////////////////////
PeerSendDataS(s,(char*)®Key,sizeof(regKey),&retLen,hEvent,
SENDRECV_TIMEOUT);
if(GetLastError()==PEER_FUNERROR)
break;
index++;
}
RegCloseKey(hKey);
return true;
}
////////创建子键///////////////
bool PeerRegeditCreateKey(SOCKET s,WSAEVENT hEvent)
{
DWORD retLen;
REGEDIT regKey;
HKEY hRootKey,hMakeKey;
///////////得到要创建的键名////////////////
if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen,
hEvent,SENDRECV_TIMEOUT))
{
return false;
}
//////////转换主键名到主键句柄/////////////
if(!(hRootKey=GetPeerRegKey(regKey.key)))
{
return false;
}
if(RegCreateKey(hRootKey,regKey.sunkey,&hMakeKey)!=ERROR_SUCCESS)
return false;
/////////发回确认信息/////////////////
COMMAND cmd;
memset(&cmd,0,sizeof(cmd));
cmd.CommandID=PEER_OK;
if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&retLen,hEvent,
SENDRECV_TIMEOUT))
{
return false;
}
RegCloseKey(hMakeKey);
return true;
}
////////删除子键///////////////
bool PeerRegeditDeleteKey(SOCKET s,WSAEVENT hEvent)
{
DWORD retLen;
REGEDIT regKey;
HKEY hRootKey;
///////////得到要创建的键名////////////////
if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen,
hEvent,SENDRECV_TIMEOUT))
{
return false;
}
//////////转换主键名到主键句柄/////////////
if(!(hRootKey=GetPeerRegKey(regKey.key)))
{
return false;
}
//////////删除指定键////////////////////////
if(RegDeleteKey(hRootKey,regKey.sunkey)!=ERROR_SUCCESS)
return false;
/////////发回确认信息/////////////////
COMMAND cmd;
memset(&cmd,0,sizeof(cmd));
cmd.CommandID=PEER_OK;
if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&retLen,hEvent,
SENDRECV_TIMEOUT))
{
return false;
}
return true;
}
////////得到键的某项值/////////
bool PeerRegeditGetValue(SOCKET s,WSAEVENT hEvent)
{
DWORD retLen;
REGEDIT regKey;
HKEY hRootKey,hGetKey;
///////////得到要创建的键名////////////////
if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen,
hEvent,SENDRECV_TIMEOUT))
{
return false;
}
//////////转换主键名到主键句柄/////////////
if(!(hRootKey=GetPeerRegKey(regKey.key)))
{
return false;
}
COMMAND cmd;
memset(&cmd,0,sizeof(cmd));
if(RegOpenKey(hRootKey,regKey.sunkey,&hGetKey)!=ERROR_SUCCESS)
return false;
else
{
DWORD datalen=512;
if(RegQueryValueEx(hGetKey,regKey.value,NULL,®Key.type,
regKey.data,&datalen)!=ERROR_SUCCESS)
return false;
regKey.datalen=datalen;
}
/////////发回得到的键的项的值/////////////////
if(!PeerSendDataS(s,(char*)®Key,sizeof(regKey),&retLen,hEvent,
SENDRECV_TIMEOUT))
{
return false;
}
RegCloseKey(hGetKey);
return true;
}
////////创建/设置键的某项值////
bool PeerRegeditSetValue(SOCKET s,WSAEVENT hEvent)
{
DWORD retLen;
REGEDIT regKey;
HKEY hRootKey,hSetKey;
///////////得到要创建的键名////////////////
if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen,
hEvent,SENDRECV_TIMEOUT))
{
return false;
}
//////////转换主键名到主键句柄/////////////
if(!(hRootKey=GetPeerRegKey(regKey.key)))
{
return false;
}
if(RegOpenKey(hRootKey,regKey.sunkey,&hSetKey)!=ERROR_SUCCESS)
return false;
else
{
DWORD datalen=512;
if(RegSetValueEx(hSetKey,regKey.value,NULL,regKey.type,
regKey.data,regKey.datalen)!=ERROR_SUCCESS)
return false;
}
/////////发回确认信息/////////////////
COMMAND cmd;
memset(&cmd,0,sizeof(cmd));
cmd.CommandID=PEER_OK;
if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&retLen,hEvent,
SENDRECV_TIMEOUT))
{
return false;
}
RegCloseKey(hSetKey);
return true;
}
////////删除键的某项///////////
bool PeerRegeditDelValue(SOCKET s,WSAEVENT hEvent)
{
DWORD retLen;
REGEDIT regKey;
HKEY hRootKey,hDelKey;
///////////得到要创建的键名////////////////
if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen,
hEvent,SENDRECV_TIMEOUT))
{
return false;
}
//////////转换主键名到主键句柄/////////////
if(!(hRootKey=GetPeerRegKey(regKey.key)))
{
return false;
}
if(RegOpenKey(hRootKey,regKey.sunkey,&hDelKey)!=ERROR_SUCCESS)
return false;
else
{
DWORD datalen=512;
if(RegDeleteValue(hDelKey,regKey.value)!=ERROR_SUCCESS)
return false;
}
/////////发回确认信息/////////////////
COMMAND cmd;
memset(&cmd,0,sizeof(cmd));
cmd.CommandID=PEER_OK;
if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&retLen,hEvent,
SENDRECV_TIMEOUT))
{
return false;
}
RegCloseKey(hDelKey);
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -