OID是一类和驱动相关的命令,不同的驱动所支持的OID是不同的,可以使用如ndistools_6.0.2002.msi的软件查看所在机器支持的OID,本文使用OID来查询wifi的状态,使用到了OID_GEN_MEDIA_CONNECT_STATUS,它在NtDDNdis.h中声明,在msdn中可以查到它的说明,使用这个命令的缺憾是只可以查询到两种状态,即NdisMediaStateConnected和NdisMediaStateDisconnected, 其他的如正在连接等状态无法得到判断,而机器无法支持更好的OID,所以就使用这个命令简单地进行判断,使用到了DeviceIoControl函数,废话少说,代码如下:
DWORD dwObj, dwStatus, dwBytesRet;
dwOIDCode = OID_GEN_MEDIA_CONNECT_STATUS;
DeviceIoControl(hAdapter, IOCTL_NDIS_QUERY_GLOBAL_STATS, &dwOIDCode, sizeof(dwOIDCode), &dwStatus,sizeof(dwStatus), &dwBytesRet, NULL);
查询得到的状态:
dwStatus=0:连接成功
dwStatus=1:未连接