#define MAX_VALUE_NAME 256
#define TS_ROOT_KEY TEXT("Software\\Microsoft\\Terminal Server Client")
#define TS_DEFAULT_KEY TEXT("Software\\Microsoft\\Terminal Server Client\\Default")
#define TS_USERNAME_KEY TEXT("Software\\Microsoft\\Terminal Server Client\\UsernameHint")
#define TS_REG_VALUE_NAME_PCB TEXT("PinConnectionBar")
#define TS_REG_VALUE_NAME_MRU TEXT("MRU0")
int RegIsKeyOK(LPCTSTR IP,LPCTSTR UserName)
{
LONG lResult;
HKEY hKey;
TCHAR szValueName[MAX_VALUE_NAME];
TCHAR szValueDate[MAX_VALUE_NAME];
DWORD NameSize = MAX_VALUE_NAME;
DWORD DateSize = MAX_VALUE_NAME;
lResult = RegOpenKeyEx (HKEY_CURRENT_USER,TS_USERNAME_KEY,0,KEY_READ,&hKey);
if (lResult != ERROR_SUCCESS)
{
//MessageBox(NULL,TEXT("打开注册表错误。"),TEXT("提示"),MB_OK);
return FALSE;
}
lResult = RegEnumValue(hKey,0,szValueName,&NameSize,NULL,NULL,(BYTE*)szValueDate,&DateSize);
RegCloseKey(hKey);
if (lResult != ERROR_SUCCESS)
{
//MessageBox(NULL,TEXT("枚举键值错误。"),TEXT("提示"),MB_OK);
return FALSE;
}
if(_tcscmp(szValueName,IP))
{
//MessageBox(NULL,TEXT("IP不相同。"),TEXT("提示"),MB_OK);
return FALSE;
}
if(_tcscmp(szValueDate,UserName))
{
//MessageBox(NULL,TEXT("用户名不同。"),TEXT("提示"),MB_OK);
return FALSE;
}
return TRUE;
}
int RegDelKey(void)
{
RegDeleteKey(HKEY_CURRENT_USER,TS_ROOT_KEY);
return 0;
}
int RegWriteNewKey(LPCTSTR IP,LPCTSTR UserName)
{
HKEY hKey;
DWORD ret;
DWORD Data=0x00000000;
// Root Key
ret = RegCreateKeyEx(HKEY_CURRENT_USER,TS_ROOT_KEY,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
if(ret != ERROR_SUCCESS)
{
return -1;
}
ret = RegSetValueEx(hKey,TS_REG_VALUE_NAME_PCB,0,REG_DWORD,(BYTE*)&Data,4);
RegCloseKey(hKey);
//Default Key
ret = RegCreateKeyEx(HKEY_CURRENT_USER,TS_DEFAULT_KEY,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
if(ret != ERROR_SUCCESS)
{
return -1;
}
ret = RegSetValueEx(hKey,TS_REG_VALUE_NAME_MRU,0,REG_SZ,(BYTE*)IP,wcslen(IP)*2);
RegCloseKey(hKey);
//Usernamehint Key
ret = RegCreateKeyEx(HKEY_CURRENT_USER,TS_USERNAME_KEY,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
if(ret != ERROR_SUCCESS)
{
return -1;
}
ret = RegSetValueEx(hKey,IP,0,REG_SZ,(BYTE*)UserName,wcslen(UserName)*2);
RegCloseKey(hKey);
return 0;
}
int RegOperate(LPCTSTR IP,LPCTSTR UserName)
{
DWORD ret;
ret = RegIsKeyOK(IP,UserName);
if(ret)
{
return 0;
}
RegDelKey();
RegWriteNewKey(IP,UserName);
return 0;
}
注册表操作样例
最新推荐文章于 2024-07-21 22:40:10 发布