千家信息网

VC++ win7下怎么实现WIFI共享工具

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要讲解了" VC++ win7下怎么实现WIFI共享工具",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习" VC++ win7下怎么实现WIFI
千家信息网最后更新 2025年01月31日VC++ win7下怎么实现WIFI共享工具

这篇文章主要讲解了" VC++ win7下怎么实现WIFI共享工具",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习" VC++ win7下怎么实现WIFI共享工具"吧!

关于无线承载网络

无线承载网络(Wireless Hosted Network)是指安装有无线局域网服务的Windows 7和Windows Server 2008 R2所提供的一种WLAN功能,具备两项主要功能:

第一、把一个物理无线网卡虚拟化成一个或多个虚拟无线网卡,称为虚拟的WiFi。

第二、借助无线网卡把当前接网络虚拟成为一个基于软件的无线接入点,称为虚拟AP或软AP。

=========================万恶的分割线===========================

项目需要包含wlanapi.h 头文件和wlanapi.lib 库

备注:测试环境win7_64,建议关闭一些安全软件,(比如我测试的时候忘了关comodo导致防火墙总是拒绝其他设备的连接)。

=============================================================

功能不复杂,用到的主要函数有下面几个

1.调用WlanOpenHandled得到一个连接hClientHandle,下面的操作都要用到这个连接。当然程序退出的时候记得调用WlanCloseHandle关闭这个连接。

DWORD WINAPI WlanOpenHandle(  _In_        DWORD dwClientVersion,  _Reserved_  PVOID pReserved,  _Out_       PDWORD pdwNegotiatedVersion,  _Out_       PHANDLE phClientHandle);DWORD WINAPI WlanCloseHandle(  _In_        HANDLE hClientHandle,  _Reserved_  PVOID pReserved);



2.下面的函数用来设置承载网络的一些属性。

DWORD WINAPI WlanHostedNetworkSetProperty(  _In_        HANDLE hClientHandle,  _In_        WLAN_HOSTED_NETWORK_OPCODE OpCode,  _In_        DWORD dwDataSize,  _In_        PVOID pvData,  _Out_opt_   PWLAN_HOSTED_NETWORK_REASON pFailReason,  _Reserved_  PVOID pvReserved);typedef enum _WLAN_HOSTED_NETWORK_OPCODE {   wlan_hosted_network_opcode_connection_settings,          //设置一些连接属性  wlan_hosted_network_opcode_security_settings,            //设置安全属性  wlan_hosted_network_opcode_station_profile,              //query the wireless Hosted Network station profile  wlan_hosted_network_opcode_enable                        //query or set the wireless Hosted Network enabled flag} WLAN_HOSTED_NETWORK_OPCODE, *PWLAN_HOSTED_NETWORK_OPCODE;

3.启用和禁用无线承载网络。

打开网络和共享中心 单击更改适配器设置,如果启用了无线承载网络 面板里面就会有描述为Microsoft Virtual WiFi Miniport Adapter的一个虚拟网卡。禁用之后这个虚拟网卡就会消失了。

当然只有启用了无线承载网络才能分享wifi啦

DWORD WINAPI WlanHostedNetworkForceStart(  _In_        HANDLE hClientHandle,  _Out_opt_   PWLAN_HOSTED_NETWORK_REASON pFailReason,  _Reserved_  PVOID pvReserved);
DWORD WINAPI WlanHostedNetworkForceStop(  _In_        HANDLE hClientHandle,  _Out_opt_   PWLAN_HOSTED_NETWORK_REASON pFailReason,  _Reserved_  PVOID pvReserved);


4.连接和断开网络

DWORD WINAPI WlanHostedNetworkStartUsing(  _In_        HANDLE hClientHandle,  _Out_opt_   PWLAN_HOSTED_NETWORK_REASON pFailReason,  _Reserved_  PVOID pvReserved);
DWORD WINAPI WlanHostedNetworkStopUsing(  _In_        HANDLE hClientHandle,  _Out_opt_   PWLAN_HOSTED_NETWORK_REASON pFailReason,  _Reserved_  PVOID pvReserved);

5.用来查询承载网络的网络状况。

DWORD WINAPI WlanHostedNetworkQueryStatus(  _In_        HANDLE hClientHandle,  _Out_       PWLAN_HOSTED_NETWORK_STATUS *ppWlanHostedNetworkStatus,  _Reserved_  PVOID pvReserved);
typedef struct _WLAN_HOSTED_NETWORK_STATUS {  WLAN_HOSTED_NETWORK_STATE      HostedNetworkState;  GUID                           IPDeviceID;  DOT11_MAC_ADDRESS              wlanHostedNetworkBSSID;  DOT11_PHY_TYPE                 dot11PhyType;  ULONG                          ulChannelFrequency;  DWORD                          dwNumberOfPeers;            //已连接的节点数目  WLAN_HOSTED_NETWORK_PEER_STATE PeerList[1];                //存放节点信息的数组} WLAN_HOSTED_NETWORK_STATUS, *PWLAN_HOSTED_NETWORK_STATUS;typedef struct _WLAN_HOSTED_NETWORK_PEER_STATE {  DOT11_MAC_ADDRESS                   PeerMacAddress;        //节点设备的MAC地址  WLAN_HOSTED_NETWORK_PEER_AUTH_STATE PeerAuthState;            //节点的认证状态} WLAN_HOSTED_NETWORK_PEER_STATE, *PWLAN_HOSTED_NETWORK_PEER_STATE;

调用WlanHostedNetworkQueryStatus将得到一个WLAN_HOSTED_NETWORK_STATUS结构体,就可以查询一些网络基本信息了,比如dwNumberOfPeers连接到这个网络的节点数,PeerList数组存放着对应节点的详细信息,包括MAC地址和认证状态。

6.用来设置密码

注意密码长度必须 大于8 小于63 否则会调用失败

DWORD WINAPI WlanHostedNetworkSetSecondaryKey(  _In_        HANDLE hClientHandle,  _In_        DWORD dwKeyLength,  _In_        PUCHAR pucKeyData,  _In_        BOOL bIsPassPhrase,  _In_        BOOL bPersistent,  _Out_opt_   PWLAN_HOSTED_NETWORK_REASON pFailReason,  _Reserved_  PVOID pvReserved);

======================贴代码==========================


//WIFIMAIN.h  实现文件#pragma once#include #pragma comment(lib,"wlanapi.lib")// WIFIMAINclass WIFIMAIN : public CWnd{        DECLARE_DYNAMIC(WIFIMAIN)public:        WIFIMAIN();        virtual ~WIFIMAIN();protected:        DECLARE_MESSAGE_MAP()private:        bool allow;        bool start;        HANDLE hClient;public:        int Init(void);        int AllowHostedNetWork(void);        int DisallowHostedNetWork(void);        int StartHostedNetWork(void);        int StopHostedNetWork(void);        bool isStart(void);        bool isAllow(void);        int Resume(void);        int getpeernumber(void);        int SetKEY(CString key);        int SetSSID(CString ssidname);};



// WIFIMAIN.cpp : 实现文件//#include "stdafx.h"#include "wifi共享1028.h"#include "WIFIMAIN.h"// WIFIMAINIMPLEMENT_DYNAMIC(WIFIMAIN, CWnd)WIFIMAIN::WIFIMAIN(): allow(false), start(false){        Init();}WIFIMAIN::~WIFIMAIN(){        StopHostedNetWork();        WlanCloseHandle(hClient, NULL);}BEGIN_MESSAGE_MAP(WIFIMAIN, CWnd)END_MESSAGE_MAP()// WIFIMAIN 消息处理程序int WIFIMAIN::Init(void){        DWORD dwCurVersion = 0;    DWORD dwResult = 0;        dwResult = WlanOpenHandle(WLAN_API_VERSION, NULL, &dwCurVersion, &hClient);        if( ERROR_SUCCESS != dwResult )        {                return -1;        }        BOOL bIsAllow = true;    WLAN_HOSTED_NETWORK_REASON dwFailedReason;        dwResult = WlanHostedNetworkSetProperty(hClient,                                                                                        wlan_hosted_network_opcode_enable,                                                                                         sizeof(BOOL),                                                                                        &bIsAllow,                                                                                        &dwFailedReason,                                                                                        NULL);        if( ERROR_SUCCESS != dwResult )        {                return -2;        }                return 0;}int WIFIMAIN::AllowHostedNetWork(void){        PWLAN_HOSTED_NETWORK_REASON pFailReason = NULL;                DWORD dwResult= 0;        dwResult=WlanHostedNetworkForceStart(hClient,pFailReason,NULL);        if( dwResult != ERROR_SUCCESS )        {                return -1;        }        allow=true;        return 0;}int WIFIMAIN::DisallowHostedNetWork(void){        PWLAN_HOSTED_NETWORK_REASON pFailReason = NULL;        DWORD dwResult= 0;        dwResult=WlanHostedNetworkForceStop(hClient,pFailReason,NULL);        if( dwResult != ERROR_SUCCESS )        {                return -1;        }        allow=false;        return 0;}int WIFIMAIN::StartHostedNetWork(void){        PWLAN_HOSTED_NETWORK_REASON pFailReason = NULL;        DWORD dwResult= 0;        dwResult=WlanHostedNetworkStartUsing(hClient,pFailReason,NULL);        if( dwResult != ERROR_SUCCESS )        {                return -1;        }        start=true;        return 0;}int WIFIMAIN::StopHostedNetWork(void){        PWLAN_HOSTED_NETWORK_REASON pFailReason = NULL;        DWORD dwResult= 0;        dwResult=WlanHostedNetworkStopUsing(hClient,pFailReason,NULL);        if( dwResult != ERROR_SUCCESS )        {                return -1;        }        start=false;        return 0;}bool WIFIMAIN::isStart(void){        return start;}bool WIFIMAIN::isAllow(void){        return allow;}int WIFIMAIN::Resume(void){        DWORD dwResult = 0;            BOOL bIsAllow = false;    WLAN_HOSTED_NETWORK_REASON dwFailedReason;        dwResult = WlanHostedNetworkSetProperty(hClient,                                                                                        wlan_hosted_network_opcode_enable,                                                                                         sizeof(BOOL),                                                                                        &bIsAllow,                                                                                        &dwFailedReason,                                                                                        NULL);        if( ERROR_SUCCESS != dwResult )        {                return -2;        }                return 0;}int WIFIMAIN::getpeernumber(void){        PWLAN_HOSTED_NETWORK_STATUS ppWlanHostedNetworkStatus=NULL;        int retval = WlanHostedNetworkQueryStatus(hClient,&ppWlanHostedNetworkStatus,NULL);        if(  retval != ERROR_SUCCESS ){                return -1;        }        return ppWlanHostedNetworkStatus->dwNumberOfPeers;}int WIFIMAIN::SetKEY(CString key){        char chkey[64];        int index;        for(index=0; index

感谢各位的阅读,以上就是" VC++ win7下怎么实现WIFI共享工具"的内容了,经过本文的学习后,相信大家对 VC++ win7下怎么实现WIFI共享工具这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

网络 无线 网卡 节点 工具 信息 功能 属性 文件 无线网卡 学习 安全 内容 函数 地址 密码 数组 时候 状态 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手机内存与数据库不兼容 用数据库实现用户登录 维护升级和软件开发一样 维护网络安全靠什么 山东泰安泰山公司申通快递数据库 学习维护网络安全心得 贷款管理服务器推荐 无线网络技术应用的例子 c52单片机用什么软件开发 ice服务器被炸的迷你玩家 网络安全七百字作文 2016服务器安全设置 nginx 不缓存数据库 黄埔区电力应急网络技术开发展示 数据库中什么叫做自选键 网络安全需警惕绘画 网络安全知识读本pdf 公司服务器连接不上 网络安全法任何个人或团体 网络安全教育公益讲座简报 瑞天图书管理服务器 宜兴进口软件开发品质保障 机关办公室网络安全管理办法 餐饮店数据库丢了 汽车行业软件开发简历 公安机关负责网络安全的部门 重生搞互联网科技金融的小说 我的世界世界手机版服务器 数据库用户无法删除用户 计算机网络安全论文框架
0