⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmd_registry.cpp

📁 简单的远程控制工具,分为服务器与客户斋,让你了解socket编程的知识.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		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 + -