📄 cmd_registry.cpp
字号:
return -1;
}
if(svClass) free(svClass);
if(psd) free(psd);
// Copy this key recursively
if(RegCopyKeyRecurse(key, newkey)==-1) {
RegCloseKey(newkey);
RegCloseKey(hkParent);
RegCloseKey(key);
wsprintf(svBuffer,"Could not copy key recursively.");
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
return -1;
}
// Delete original key
char svSubKeyBuf[MAX_PATH+1];
if(RegDeleteKeyRecurse(hkParent,svLastKeyName,svSubKeyBuf)==-1) {
RegCloseKey(newkey);
RegCloseKey(hkParent);
RegCloseKey(key);
wsprintf(svBuffer,"MSG: Could not delete original key.");
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
}
RegCloseKey(newkey);
RegCloseKey(key);
RegCloseKey(hkParent);
// wsprintf(svBuffer,"Key renamed.");
// pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
return 0;
}
int CmdProc_RegRenameValue(char *strRegResName, char *strRegTagName)
{
char svBuffer[1024];
char *svValueName;
CMainFrame *pMainWnd = (CMainFrame *)AfxGetApp ()->m_pMainWnd;
svValueName=BreakString(strRegResName,"\\\\");
if(svValueName==NULL)
{
pMainWnd->SendStringMsg ("MSG: Could not rename value. Syntax error.");
// IssueAuthCommandReply(cas_from,comid,0,"Could not rename value. Syntax error.");
return -1;
}
// Don't rename if values are the same name
if(lstrcmpi(svValueName,strRegTagName)==0)
{
wsprintf(svBuffer,"MSG: Could not rename value. Values have the same name.");
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
return -1;
}
// Get root key
char *svKey,*svNext;
HKEY key;
svKey=GetRootKey(strRegResName,&key);
if(svKey==NULL)
{
pMainWnd->SendStringMsg ("MSG: Could not open key. Invalid root key.");
// IssueAuthCommandReply(cas_from,comid,0,"Could not open key. Invalid root key.");
return -1;
}
// Open key hierarchy
HKEY subkey;
DWORD dwPerm=KEY_READ;
while(svKey!=NULL) {
svNext=BreakString(svKey,"\\");
if(svNext==NULL) dwPerm=KEY_READ|KEY_WRITE;
if(RegOpenKeyEx(key, svKey, 0, dwPerm, &subkey) != ERROR_SUCCESS) {
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
wsprintf(svBuffer,"MSG: Could not open key. Unable to open subkey: %.256s", svKey);
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
return -1;
}
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
key = subkey;
svKey = svNext;
}
// Query value
DWORD dwType,cbData;
BYTE *pData=NULL;
RegQueryValueEx(key,svValueName,NULL,&dwType,NULL,&cbData);
pData=(BYTE *)malloc(cbData);
if(RegQueryValueEx(key,svValueName,NULL,NULL,pData,&cbData)!=ERROR_SUCCESS) {
free(pData);
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
wsprintf(svBuffer,"MSG: Could not rename value. Unable to query.");
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
return -1;
}
if(RegSetValueEx(key,strRegTagName,0,dwType,pData,cbData)!=ERROR_SUCCESS) {
free(pData);
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
wsprintf(svBuffer,"MSG: Could not rename value. Unable to set.");
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
return -1;
}
free(pData);
if(RegDeleteValue(key,svValueName)!=ERROR_SUCCESS) {
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
wsprintf(svBuffer,"MSG: Could not rename value. Value was copied, though.");
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
return -1;
}
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
// wsprintf(svBuffer,"Value renamed.");
// pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
return 0;
}
int CmdProc_RegEnumKeys(char *strRegName)
{
char svBuffer[1024];
CMainFrame *pMainWnd = (CMainFrame *)AfxGetApp ()->m_pMainWnd;
// Get root key
char *svKey,*svNext;
HKEY key;
svKey=GetRootKey(strRegName,&key);
if(svKey==NULL)
{
pMainWnd->SendStringMsg ("MSG: Unable to open key. Invalid root key.");
// IssueAuthCommandReply(cas_from,comid,0,"Unable to open key. Invalid root key.");
return -1;
}
// Open key hierarchy
HKEY subkey;
DWORD dwPerm=KEY_READ;
while(svKey!=NULL)
{
svNext=BreakString(svKey,"\\");
if(svNext==NULL) dwPerm=KEY_READ|KEY_WRITE;
if(RegOpenKeyEx(key, svKey, 0, dwPerm, &subkey) != ERROR_SUCCESS) {
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
wsprintf(svBuffer,"MSG: Unable to open subkey: %.256s", svKey);
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
return 1;
}
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
key = subkey;
svKey = svNext;
}
// Enumerate Keys
int nCount;
char svKeyBuf[MAX_PATH+1];
nCount=0;
pMainWnd->SendStringMsg ("REG: Subkeys:");
// IssueAuthCommandReply(cas_from,comid,1,"Subkeys:");
while(RegEnumKey(key,nCount,svKeyBuf,MAX_PATH)==ERROR_SUCCESS)
{
RegOpenKey(key,svKeyBuf,&subkey);
DWORD keycount;
RegQueryInfoKey(subkey,NULL,NULL,NULL,&keycount,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
if(keycount>0)
{
wsprintf(svBuffer,"REG: %s\\",svKeyBuf);
}
else
{
wsprintf(svBuffer,"REG: %s",svKeyBuf);
}
RegCloseKey(subkey);
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,1,svBuffer);
nCount++;
}
wsprintf(svBuffer,"MSG: %d keys",nCount);
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
// Clean up
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
return 0;
}
int CmdProc_RegEnumValues(char *strRegName)
{
char svBuffer[1024];
CMainFrame *pMainWnd = (CMainFrame *)AfxGetApp ()->m_pMainWnd;
// Get root key
char *svKey,*svNext;
HKEY key;
svKey=GetRootKey(strRegName,&key);
if(svKey==NULL)
{
pMainWnd->SendStringMsg ("MSG: Unable to list values. Invalid root key.");
// IssueAuthCommandReply(cas_from,comid,0,"Unable to list values. Invalid root key.");
return -1;
}
// Open key hierarchy
HKEY subkey;
DWORD dwPerm=KEY_READ;
while(svKey!=NULL)
{
svNext=BreakString(svKey,"\\");
if(svNext==NULL) dwPerm=KEY_READ|KEY_WRITE;
if(RegOpenKeyEx(key, svKey, 0, dwPerm, &subkey) != ERROR_SUCCESS) {
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
wsprintf(svBuffer,"MSG: Unable to open subkey: %.256s", svKey);
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
return 1;
}
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
key = subkey;
svKey = svNext;
}
// Enumerate values
int nCount;
char svValueBuf[MAX_PATH+1];
nCount=0;
DWORD dwType, dwValueLen;
char *svType;
BYTE *pData;
DWORD dwDataLen;
pData=(BYTE *)malloc(8192);
pMainWnd->SendStringMsg ("REG: Value type/names:");
// IssueAuthCommandReply(cas_from,comid,1,"Value type/names:");
dwValueLen=MAX_PATH;
while(RegEnumValue(key,nCount,svValueBuf,&dwValueLen,NULL,&dwType,pData,&dwDataLen)==ERROR_SUCCESS)
{
switch(dwType)
{
case REG_BINARY: svType="BINARY"; break;
case REG_DWORD: svType="DWORD"; break;
case REG_EXPAND_SZ: svType="EXPAND_SZ"; break;
case REG_LINK: svType="LINK"; break;
case REG_MULTI_SZ: svType="MULTI_SZ"; break;
case REG_RESOURCE_LIST: svType="RESOURCE_LIST"; break;
case REG_SZ: svType="SZ"; break;
case REG_NONE: svType="NONE"; break;
default: svType="UNKNOWN"; break;
}
char svStr[260],*svPtr,*svMem,*sv;
DWORD dw,dwCount;
switch(dwType)
{
case REG_BINARY:
dw=0;
while(dw<dwDataLen)
{
svStr[0]='\0';
dwCount=min(dwDataLen-dw,16);
while(dwCount>0)
{
char svByte[3];
if(dwCount==1)
{
wsprintf(svByte,"%2.2X",*(pData+dw));
lstrcat(svStr,svByte);
}
else
{
wsprintf(svByte,"%2.2X ",*(pData+dw));
lstrcat(svStr,svByte);
}
dw++;
dwCount--;
}
}
break;
case REG_DWORD:
wsprintf(svStr,"%lu",*(DWORD *)pData);
break;
case REG_EXPAND_SZ:
case REG_SZ:
svPtr=EscapeString((char *)pData);
svMem=(char *)malloc(lstrlen(svPtr)+2);
lstrcpy (svMem,svPtr);
lstrcpy (svStr,svMem);
free(svPtr);
free(svMem);
break;
case REG_MULTI_SZ:
sv=(char *)pData;
while(sv[0]!='\0') {
svPtr=EscapeString(sv);
svMem=(char *)malloc(lstrlen(svPtr)+2);
lstrcpy (svMem,svPtr);
lstrcpy (svStr,svMem);
free(svPtr);
free(svMem);
while(sv[0]!='\0') sv++;
sv++;
}
break;
default:
break;
}
wsprintf(svBuffer,"REG: %s|%s|%s",svValueBuf,svType,svStr);
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,1,svBuffer);
nCount++;
dwValueLen=MAX_PATH;
}
/* // Spit out default value as well
RegQueryValueEx(key,"",NULL,&dwType,NULL,NULL);
switch(dwType) {
case REG_BINARY: svType="BINARY"; break;
case REG_DWORD: svType="DWORD"; break;
case REG_EXPAND_SZ: svType="EXPAND_SZ"; break;
case REG_LINK: svType="LINK"; break;
case REG_MULTI_SZ: svType="MULTI_SZ"; break;
case REG_RESOURCE_LIST: svType="RESOURCE_LIST"; break;
case REG_SZ: svType="SZ"; break;
case REG_NONE: svType="NONE"; break;
default: svType="UNKNOWN"; break;
}
wsprintf(svBuffer,"REG_%s: ",svType);
IssueAuthCommandReply(cas_from,comid,1,svBuffer);
*/
wsprintf(svBuffer,"MSG: %d values",nCount+1);
pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
// IssueAuthCommandReply(cas_from,comid,0,svBuffer);
// Clean up
if(key!=HKEY_LOCAL_MACHINE && key!=HKEY_USERS && key!=HKEY_CLASSES_ROOT && key!=HKEY_CURRENT_USER && key!=HKEY_CURRENT_CONFIG && key!=HKEY_DYN_DATA)
RegCloseKey(key);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -