?? 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 + -