www.pudn.com > 完整的FTP客户端ftpwanderersrc.zip > Registry.cpp


// Registry.cpp 
 
#include "stdafx.h" 
#include "Registry.h" 
 
CRegistry::CRegistry() 
{ 
	m_hKey = NULL; 
	Open(_hKey, m_strUseKey); 
} 
 
CRegistry::CRegistry(HKEY hKey, LPCTSTR lpszSubKey) 
{ 
	m_hKey = NULL; 
	Open(hKey, lpszSubKey); 
} 
 
CRegistry::~CRegistry() 
{ 
	Close(); 
} 
 
 
BOOL CRegistry::Open(HKEY hKey, LPCTSTR lpszSubKey) 
{ 
	Close(); 
 
	if(::RegOpenKeyEx(hKey, lpszSubKey, 0, KEY_ALL_ACCESS, &m_hKey) != ERROR_SUCCESS) 
	{ 
		m_hKey = NULL; 
		m_dwLastError = GetLastError(); 
		return FALSE; 
	} 
	return TRUE; 
} 
 
 
BOOL CRegistry::Close() 
{ 
	BOOL bRet = TRUE; 
 
	if(m_hKey == NULL) 
		return(FALSE); 
 
	bRet = (::RegCloseKey(m_hKey) == ERROR_SUCCESS); 
	m_hKey = NULL; 
	return bRet; 
} 
 
BOOL CRegistry::IsOpen() 
{ 
	return (m_hKey != NULL); 
} 
 
 
BOOL CRegistry::Read(LPCTSTR lpszValueName, LPVOID lpReturnBuffer, int nSize) 
{ 
	if(m_hKey == NULL) 
		return FALSE; 
 
	DWORD dwSize = (DWORD)nSize; 
	BOOL bRet = (::RegQueryValueEx(m_hKey, lpszValueName, NULL, NULL, (unsigned char *)lpReturnBuffer, &dwSize) == ERROR_SUCCESS); 
 
	m_dwLastError = GetLastError(); 
 
	return bRet; 
} 
 
 
BOOL CRegistry::ReadDWORD(LPCTSTR lpszValueName, DWORD *pdwData, DWORD *pdwLastError) 
{ 
	if(m_hKey == NULL) 
		return FALSE; 
 
	BOOL bRet = Read(lpszValueName, pdwData, sizeof(DWORD)); 
 
	if(pdwLastError != NULL) 
		*pdwLastError = m_dwLastError; 
 
	return bRet; 
} 
 
 
BOOL CRegistry::ReadString(LPCTSTR lpszValueName, LPVOID lpReturnBuffer, int nSize, DWORD *pdwLastError) 
{ 
	if(m_hKey == NULL) 
		return FALSE; 
 
	char *lpWork = (char *)lpReturnBuffer; 
	lpWork[0] = 0; 
	BOOL bRet = Read(lpszValueName, lpReturnBuffer, nSize); 
 
	if(pdwLastError != NULL) 
		*pdwLastError = m_dwLastError; 
 
	return bRet; 
} 
 
 
char **CRegistry::ReadMultipleStrings(LPCTSTR lpszValueName, DWORD *pdwLastError) 
{ 
	char szEntireString[2500]; 
 
	if(!ReadString(lpszValueName, szEntireString, 2500, pdwLastError)) 
		return NULL; 
 
	if(szEntireString[0] == 0) 
		return NULL; 
 
	int nCount = 0; 
	if(szEntireString[strlen(szEntireString)-1] != ';') 
		nCount = 1; 
	char *pPointer = szEntireString; 
	do 
	{ 
		pPointer = strstr(pPointer, ";"); 
		if(pPointer != NULL) 
		{ 
			nCount++; 
			pPointer++; 
		} 
	} while(pPointer != NULL); 
 
	int i = 0; 
	char *pEnd; 
	char **pList = (char **) new char [(nCount+3)*sizeof(char *)]; 
	if(pList == NULL) 
		return(NULL); 
	memset(pList, 0, (nCount + 3) * sizeof(char *)); 
 
	pPointer = szEntireString; 
	do 
	{ 
		pEnd = strstr(pPointer, ";"); 
		int nSize = strlen(pPointer); 
		if(pEnd != NULL) 
			nSize = pEnd - pPointer; 
 
		pList[i] = new char [nSize+3]; 
		if(pList[i] != NULL) 
		{ 
			memset(pList[i], 0, nSize + 3); 
			memcpy(pList[i], pPointer, nSize); 
		} 
		else pEnd = NULL; 
 
		pPointer = pEnd; 
		if(pPointer != NULL) 
			pPointer++; 
 
		i++; 
 
	} while(pPointer != NULL && pPointer[0] != 0); 
 
	return(pList); 
} 
 
void CRegistry::DeleteList(char **pList) 
{ 
	if(pList == NULL) 
		return; 
 
	int i = 0; 
	while(pList[i] != NULL) 
	{ 
		delete [] pList[i]; 
		i++; 
	} 
	delete pList; 
} 
 
BOOL CRegistry::WriteDWORD(LPCTSTR lpszValueName, DWORD dwData, DWORD *pdwLastError) 
{ 
	if(m_hKey == NULL) 
		return(FALSE); 
 
	m_nSize = sizeof(DWORD); 
	BOOL bRet = Write(lpszValueName, &dwData, REG_DWORD, sizeof(DWORD)); 
 
	if(pdwLastError != NULL) 
		*pdwLastError = m_dwLastError; 
 
	return(bRet); 
} 
 
BOOL CRegistry::WriteString(LPCTSTR lpszValueName, LPVOID lpData, DWORD *pdwLastError) 
{ 
	if(m_hKey == NULL) 
		return(FALSE); 
 
	m_nSize = 2000; 
	BOOL bRet = Write(lpszValueName, lpData, REG_SZ, (DWORD) strlen((const char *) lpData) + 1); 
 
	if(pdwLastError != NULL) 
		*pdwLastError = m_dwLastError; 
 
	return(bRet); 
} 
 
BOOL CRegistry::Write(LPCTSTR lpszValueName, LPVOID lpData, DWORD dwType, int nSize) 
{ 
	if(m_hKey == NULL) 
		return(FALSE); 
 
	DWORD dwSize = (DWORD) m_nSize; 
	BOOL bRet = (::RegSetValueEx(m_hKey, lpszValueName, 0, dwType, (unsigned char *) lpData, nSize) == ERROR_SUCCESS); 
 
	m_dwLastError = GetLastError(); 
 
	return(bRet); 
} 
 
 
BOOL CRegistry::CreateKey(HKEY hKey, LPCTSTR lpszSubKey, LPCTSTR lpszClass) 
{ 
	HKEY hOpenedKey; 
	DWORD dwDisposition; 
	DWORD dwLastError; 
 
	BOOL bRet = (::RegCreateKeyEx(hKey, lpszSubKey, 0, (char *)lpszClass, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hOpenedKey, &dwDisposition) == ERROR_SUCCESS); 
	if(bRet)  
		::RegCloseKey(hOpenedKey); 
	 
	dwLastError = GetLastError(); 
	return(bRet); 
} 
 
BOOL CRegistry::DeleteKey(HKEY hKey, LPCTSTR lpszSubKey) 
{ 
	BOOL bRet; 
	DWORD dwLastError; 
 
	bRet = (::RegDeleteKey(hKey, lpszSubKey) == ERROR_SUCCESS); 
	dwLastError = GetLastError(); 
	return bRet; 
}