C++ 启用或关闭TLS

打开HP SMART一直转圈


前言

之所以发布这篇文章,是因为在使用HP smart打印软件的时候老进不去,网上查了百度说是TLS没打开,所以我就按照百度的方法再IE中进行打开,但是老是过段时间就又不行了,不知道被那个东西给关闭了。索性我就写个程序在启动HP SMART软件前自动打开。

一、原理

直接上图分析
在这里插入图片描述
就是直接操作注册表,网上百度出来的都是win7的。所以只能自己去调式IE了.TLS的功能位数是用火绒程序注册表监控来测试IE浏览器而得出的。这是基于windows10系统的注册表路径。win7可自行百度。

二、代码


#include <iostream>
#include<windows.h>
#include<tchar.h>
#include<sddl.h>
#define TLS1_0	7
#define TLS1_1	9
#define TLS1_2	11
//得到登录用户的SID用于拼接注册表路径
BOOL  GetLoginSid(WCHAR ** curSID)
{
	BOOL ret = FALSE;
	HANDLE hToken;
	if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
	{
		_tprintf(L"token打开失败\n");
		return ret;
	}
	DWORD cbSize;
	SID* sid;
	TOKEN_USER* User;
	cbSize = 0;
	GetTokenInformation(hToken, TokenUser, NULL, 0, &cbSize);
	if (!cbSize)
	{
		_tprintf(L"token信息查询失败\n");

		return ret;
	}
	User = (TOKEN_USER*)malloc(cbSize);
	GetTokenInformation(hToken, TokenUser, User, cbSize, &cbSize);
	
	ret=ConvertSidToStringSid(User->User.Sid, curSID);
	free(User);
	return ret;
}
BOOL RegTLSFunChange(WCHAR * curSID,DWORD bitIndex,BOOL open) {
	BOOL ret = FALSE;
	const HKEY key = HKEY_USERS;
	WCHAR subKey[128] = { 0 };
	const wchar_t* const subKeyAfter = L"\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
	wcscat_s(subKey, curSID);
	wcscat_s(subKey, subKeyAfter);
	const wchar_t* const valueName = L"SecureProtocols";
	DWORD result;
	DWORD retSize = sizeof(DWORD);
	RegGetValue(key,subKey,valueName,RRF_RT_DWORD,NULL,&result,&retSize);
	if(open)
		result = result | (1 << bitIndex);
	else
		result = result & ~(1 << bitIndex);
	HKEY openKey;
	RegOpenKeyEx(key, subKey, NULL, KEY_READ | KEY_WRITE, &openKey);
	if (RegSetValueEx(openKey, valueName, NULL, REG_DWORD, (BYTE*)&result, retSize) == ERROR_SUCCESS)
		ret = true;
	return true;
}
int main()
{
	setlocale(LC_ALL, ".utf8");
	WCHAR* curSID;
	GetLoginSid(&curSID);
	if (RegTLSFunChange(curSID, TLS1_2, TRUE))
		{
		_tprintf(L"注册表操作成功\n");
		system("start HP-SMART:");
		}
	else
		_tprintf(L"注册表操失败\n");

	system("pause");
}

三、测试

在关闭TLS1.2的时候,程序一直进不去。
在这里插入图片描述
启用TLS1.2后重启软件即可正常进入
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Paho MQTT 是一个流行的开源 MQTT 客户端库,它提供了多种语言的实现,包括 C++。如果你想在 C++ 中使用 Paho MQTT 并启用 TLS(Transport Layer Security),你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了 Paho MQTT C++ 客户端库。你可以在 Paho MQTT 的官方网站上找到相应的下载链接和安装说明。 2. 在你的 C++ 项目中包含 Paho MQTT 的头文件,通常是 `mqtt/async_client.h`。 3. 创建一个 MQTT 客户端对象,并设置连接参数。例如: ```cpp #include <mqtt/async_client.h> const std::string SERVER_ADDRESS("ssl://mqtt.example.com:8883"); const std::string CLIENT_ID("my_client_id"); mqtt::async_client client(SERVER_ADDRESS, CLIENT_ID); ``` 4. 配置 TLS 加密选项。这通常涉及到加载证书和密钥文件。可以使用 Paho MQTT 提供的 `mqtt::ssl_options` 类来设置 TLS 选项。例如: ```cpp mqtt::ssl_options ssl_opts; ssl_opts.set_trust_store("ca.crt"); ssl_opts.set_key_store("client.crt"); ssl_opts.set_private_key("client.key"); client.set_ssl(ssl_opts); ``` 这里的 `ca.crt` 是用于验证服务器证书的根证书,`client.crt` 是客户端的证书,`client.key` 是客户端的私钥。 5. 连接到 MQTT 服务器并订阅主题。可以使用 `mqtt::connect_options` 类来设置连接选项,并使用 `mqtt::token` 类来处理连接结果和订阅操作。例如: ```cpp mqtt::connect_options conn_opts; conn_opts.set_keep_alive_interval(20); conn_opts.set_clean_session(true); mqtt::token_ptr token = client.connect(conn_opts); token->wait(); client.subscribe("my/topic", 1); ``` 这里的代码设置了保持连接的时间间隔为 20 秒,并且启用了清理会话。 6. 处理消息和事件。使用 `mqtt::callback` 类来处理接收到的消息和连接状态变化等事件。例如: ```cpp class callback : public virtual mqtt::callback { void message_arrived(mqtt::const_message_ptr msg) override { std::cout << "Received message: " << msg->get_payload_str() << std::endl; } void connection_lost(const std::string& cause) override { std::cout << "Connection lost: " << cause << std::endl; } }; callback cb; client.set_callback(cb); // 在主循环中等待事件 while (true) { client.loop(); // 其他逻辑处理 } ``` 以上是一个简单的 TLS 加密的 Paho MQTT C++ 客户端的示例代码。你可以根据自己的需求进行适当的修改和扩展。请注意,这只是一个基本的示例,实际使用中可能涉及更多的错误处理和其他配置选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值