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

📄 config_winreg.c

📁 WLAN无线网络管理的最新程序
💻 C
📖 第 1 页 / 共 2 页
字号:
		os_free(_name);		return 0;	}	_val = wpa_strdup_tchar(val);	if (_val == NULL) {		os_free(_name);		return -1;	}	ret = RegSetValueEx(hk, _name, 0, REG_SZ, (BYTE *) _val,			    (os_strlen(val) + 1) * sizeof(TCHAR));	if (ret != ERROR_SUCCESS) {		wpa_printf(MSG_ERROR, "WINREG: Failed to set %s='%s': "			   "error %d", name, val, (int) GetLastError());		os_free(_name);		os_free(_val);		return -1;	}	os_free(_name);	os_free(_val);	return 0;}static int wpa_config_write_global(struct wpa_config *config, HKEY hk){#ifdef CONFIG_CTRL_IFACE	wpa_config_write_reg_string(hk, "ctrl_interface",				    config->ctrl_interface);#endif /* CONFIG_CTRL_IFACE */	wpa_config_write_reg_dword(hk, TEXT("eapol_version"),				   config->eapol_version,				   DEFAULT_EAPOL_VERSION);	wpa_config_write_reg_dword(hk, TEXT("ap_scan"), config->ap_scan,				   DEFAULT_AP_SCAN);	wpa_config_write_reg_dword(hk, TEXT("fast_reauth"),				   config->fast_reauth, DEFAULT_FAST_REAUTH);	wpa_config_write_reg_dword(hk, TEXT("dot11RSNAConfigPMKLifetime"),				   config->dot11RSNAConfigPMKLifetime, 0);	wpa_config_write_reg_dword(hk,				   TEXT("dot11RSNAConfigPMKReauthThreshold"),				   config->dot11RSNAConfigPMKReauthThreshold,				   0);	wpa_config_write_reg_dword(hk, TEXT("dot11RSNAConfigSATimeout"),				   config->dot11RSNAConfigSATimeout, 0);	wpa_config_write_reg_dword(hk, TEXT("update_config"),				   config->update_config,				   0);	return 0;}static int wpa_config_delete_subkeys(HKEY hk, const TCHAR *key){	HKEY nhk;	int i, errors = 0;	LONG ret;	ret = RegOpenKeyEx(hk, key, 0, KEY_ENUMERATE_SUB_KEYS | DELETE, &nhk);	if (ret != ERROR_SUCCESS) {		wpa_printf(MSG_DEBUG, "WINREG: Could not open key '" TSTR			   "' for subkey deletion: error 0x%x (%d)", key,			   (unsigned int) ret, (int) GetLastError());		return 0;	}	for (i = 0; ; i++) {		TCHAR name[255];		DWORD namelen;		namelen = 255;		ret = RegEnumKeyEx(nhk, i, name, &namelen, NULL, NULL, NULL,				   NULL);		if (ret == ERROR_NO_MORE_ITEMS)			break;		if (ret != ERROR_SUCCESS) {			wpa_printf(MSG_DEBUG, "RegEnumKeyEx failed: 0x%x (%d)",				   (unsigned int) ret, (int) GetLastError());			break;		}		if (namelen >= 255)			namelen = 255 - 1;		name[namelen] = TEXT('\0');		ret = RegDeleteKey(nhk, name);		if (ret != ERROR_SUCCESS) {			wpa_printf(MSG_DEBUG, "RegDeleteKey failed: 0x%x (%d)",				   (unsigned int) ret, (int) GetLastError());			errors++;		}	}	RegCloseKey(nhk);	return errors ? -1 : 0;}static void write_str(HKEY hk, const char *field, struct wpa_ssid *ssid){	char *value = wpa_config_get(ssid, field);	if (value == NULL)		return;	wpa_config_write_reg_string(hk, field, value);	os_free(value);}static void write_int(HKEY hk, const char *field, int value, int def){	char val[20];	if (value == def)		return;	os_snprintf(val, sizeof(val), "%d", value);	wpa_config_write_reg_string(hk, field, val);}static void write_bssid(HKEY hk, struct wpa_ssid *ssid){	char *value = wpa_config_get(ssid, "bssid");	if (value == NULL)		return;	wpa_config_write_reg_string(hk, "bssid", value);	os_free(value);}static void write_psk(HKEY hk, struct wpa_ssid *ssid){	char *value = wpa_config_get(ssid, "psk");	if (value == NULL)		return;	wpa_config_write_reg_string(hk, "psk", value);	os_free(value);}static void write_proto(HKEY hk, struct wpa_ssid *ssid){	char *value;	if (ssid->proto == DEFAULT_PROTO)		return;	value = wpa_config_get(ssid, "proto");	if (value == NULL)		return;	if (value[0])		wpa_config_write_reg_string(hk, "proto", value);	os_free(value);}static void write_key_mgmt(HKEY hk, struct wpa_ssid *ssid){	char *value;	if (ssid->key_mgmt == DEFAULT_KEY_MGMT)		return;	value = wpa_config_get(ssid, "key_mgmt");	if (value == NULL)		return;	if (value[0])		wpa_config_write_reg_string(hk, "key_mgmt", value);	os_free(value);}static void write_pairwise(HKEY hk, struct wpa_ssid *ssid){	char *value;	if (ssid->pairwise_cipher == DEFAULT_PAIRWISE)		return;	value = wpa_config_get(ssid, "pairwise");	if (value == NULL)		return;	if (value[0])		wpa_config_write_reg_string(hk, "pairwise", value);	os_free(value);}static void write_group(HKEY hk, struct wpa_ssid *ssid){	char *value;	if (ssid->group_cipher == DEFAULT_GROUP)		return;	value = wpa_config_get(ssid, "group");	if (value == NULL)		return;	if (value[0])		wpa_config_write_reg_string(hk, "group", value);	os_free(value);}static void write_auth_alg(HKEY hk, struct wpa_ssid *ssid){	char *value;	if (ssid->auth_alg == 0)		return;	value = wpa_config_get(ssid, "auth_alg");	if (value == NULL)		return;	if (value[0])		wpa_config_write_reg_string(hk, "auth_alg", value);	os_free(value);}#ifdef IEEE8021X_EAPOLstatic void write_eap(HKEY hk, struct wpa_ssid *ssid){	char *value;	value = wpa_config_get(ssid, "eap");	if (value == NULL)		return;	if (value[0])		wpa_config_write_reg_string(hk, "eap", value);	os_free(value);}#endif /* IEEE8021X_EAPOL */static void write_wep_key(HKEY hk, int idx, struct wpa_ssid *ssid){	char field[20], *value;	os_snprintf(field, sizeof(field), "wep_key%d", idx);	value = wpa_config_get(ssid, field);	if (value) {		wpa_config_write_reg_string(hk, field, value);		os_free(value);	}}static int wpa_config_write_network(HKEY hk, struct wpa_ssid *ssid, int id){	int i, errors = 0;	HKEY nhk, netw;	LONG ret;	TCHAR name[5];	ret = RegOpenKeyEx(hk, TEXT("networks"), 0, KEY_CREATE_SUB_KEY, &nhk);	if (ret != ERROR_SUCCESS) {		wpa_printf(MSG_DEBUG, "WINREG: Could not open networks key "			   "for subkey addition: error 0x%x (%d)",			   (unsigned int) ret, (int) GetLastError());		return 0;	}#ifdef UNICODE	wsprintf(name, L"%04d", id);#else /* UNICODE */	os_snprintf(name, sizeof(name), "%04d", id);#endif /* UNICODE */	ret = RegCreateKeyEx(nhk, name, 0, NULL, 0, KEY_WRITE, NULL, &netw,			     NULL);	RegCloseKey(nhk);	if (ret != ERROR_SUCCESS) {		wpa_printf(MSG_DEBUG, "WINREG: Could not add network key '%s':"			   " error 0x%x (%d)",			   name, (unsigned int) ret, (int) GetLastError());		return -1;	}#define STR(t) write_str(netw, #t, ssid)#define INT(t) write_int(netw, #t, ssid->t, 0)#define INT_DEF(t, def) write_int(netw, #t, ssid->t, def)	STR(ssid);	INT(scan_ssid);	write_bssid(netw, ssid);	write_psk(netw, ssid);	write_proto(netw, ssid);	write_key_mgmt(netw, ssid);	write_pairwise(netw, ssid);	write_group(netw, ssid);	write_auth_alg(netw, ssid);#ifdef IEEE8021X_EAPOL	write_eap(netw, ssid);	STR(identity);	STR(anonymous_identity);	STR(eappsk);	STR(nai);	STR(password);	STR(ca_cert);	STR(ca_path);	STR(client_cert);	STR(private_key);	STR(private_key_passwd);	STR(dh_file);	STR(subject_match);	STR(altsubject_match);	STR(ca_cert2);	STR(ca_path2);	STR(client_cert2);	STR(private_key2);	STR(private_key2_passwd);	STR(dh_file2);	STR(subject_match2);	STR(altsubject_match2);	STR(phase1);	STR(phase2);	STR(pcsc);	STR(pin);	STR(engine_id);	STR(key_id);	INT(engine);	INT_DEF(eapol_flags, DEFAULT_EAPOL_FLAGS);#endif /* IEEE8021X_EAPOL */	for (i = 0; i < 4; i++)		write_wep_key(netw, i, ssid);	INT(wep_tx_keyidx);	INT(priority);#ifdef IEEE8021X_EAPOL	INT_DEF(eap_workaround, DEFAULT_EAP_WORKAROUND);	STR(pac_file);	INT_DEF(fragment_size, DEFAULT_FRAGMENT_SIZE);#endif /* IEEE8021X_EAPOL */	INT(mode);	INT(proactive_key_caching);	INT(disabled);	INT(peerkey);#ifdef CONFIG_IEEE80211W	INT(ieee80211w);#endif /* CONFIG_IEEE80211W */	STR(id_str);#undef STR#undef INT#undef INT_DEF	RegCloseKey(netw);	return errors ? -1 : 0;}static int wpa_config_write_blob(HKEY hk, struct wpa_config_blob *blob){	HKEY bhk;	LONG ret;	TCHAR *name;	ret = RegCreateKeyEx(hk, TEXT("blobs"), 0, NULL, 0, KEY_WRITE, NULL,			     &bhk, NULL);	if (ret != ERROR_SUCCESS) {		wpa_printf(MSG_DEBUG, "WINREG: Could not add blobs key: "			   "error 0x%x (%d)",			   (unsigned int) ret, (int) GetLastError());		return -1;	}	name = wpa_strdup_tchar(blob->name);	ret = RegSetValueEx(bhk, name, 0, REG_BINARY, blob->data,			    blob->len);	if (ret != ERROR_SUCCESS) {		wpa_printf(MSG_ERROR, "WINREG: Failed to set blob %s': "			   "error 0x%x (%d)", blob->name, (unsigned int) ret,			   (int) GetLastError());		RegCloseKey(bhk);		os_free(name);		return -1;	}	os_free(name);	RegCloseKey(bhk);	return 0;}int wpa_config_write(const char *name, struct wpa_config *config){	TCHAR buf[256];	HKEY hk;	LONG ret;	int errors = 0;	struct wpa_ssid *ssid;	struct wpa_config_blob *blob;	int id;	wpa_printf(MSG_DEBUG, "Writing configuration file '%s'", name);#ifdef UNICODE	_snwprintf(buf, 256, WPA_KEY_PREFIX TEXT("\\configs\\%S"), name);#else /* UNICODE */	os_snprintf(buf, 256, WPA_KEY_PREFIX TEXT("\\configs\\%s"), name);#endif /* UNICODE */	ret = RegOpenKeyEx(WPA_KEY_ROOT, buf, 0, KEY_SET_VALUE | DELETE, &hk);	if (ret != ERROR_SUCCESS) {		wpa_printf(MSG_ERROR, "Could not open wpa_supplicant "			   "configuration registry %s: error %d", buf,			   (int) GetLastError());		return -1;	}	if (wpa_config_write_global(config, hk)) {		wpa_printf(MSG_ERROR, "Failed to write global configuration "			   "data");		errors++;	}	wpa_config_delete_subkeys(hk, TEXT("networks"));	for (ssid = config->ssid, id = 0; ssid; ssid = ssid->next, id++) {		if (wpa_config_write_network(hk, ssid, id))			errors++;	}	RegDeleteKey(hk, TEXT("blobs"));	for (blob = config->blobs; blob; blob = blob->next) {		if (wpa_config_write_blob(hk, blob))			errors++;	}	RegCloseKey(hk);	wpa_printf(MSG_DEBUG, "Configuration '%s' written %ssuccessfully",		   name, errors ? "un" : "");	return errors ? -1 : 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -