- 浏览: 971066 次
- 性别:
- 来自: 珠海
文章分类
最新评论
-
Yunjey:
Yunjey 写道这样子的话、grid中的editable如何 ...
Flex创建可编辑以及分页的DataGrid -
Yunjey:
这样子的话、grid中的editable如何设置啊?!
Flex创建可编辑以及分页的DataGrid -
di1984HIT:
写的很好~~
JCalendar组件 -
sanny81:
此文真棒!感谢一路风尘的奉献!
但我有一疑 ...
Filter发送自定义数据详解 -
umgsai:
求完整demo umgsai@126.com
Flex和Jsp创建用户登入系统
刚才测试了Win7自带的无线网卡驱动使用的NDIS版本号。虽然之前不能肯定,但是一直觉得是6.20,因为他能支持virutal wifi 中的hosted network.这个应该是6.20才可能支持的,但是不完全肯定,主要理由是因为我使用OID_DOT11_CREATE_MAC 这个OID时,虽然返回成功,但是没有返回DOT11_MAC_INFO 因为返回的的缓冲区可读数据为0.所以疑惑就在这里:
现在既然是6.20的版本,而且OID_DOT11_CREATE_MAC返回Success的状态。可是就是没有返回创建New MAC的信息,包括端口号和MAC地址。
Oid = OID_GEN_DRIVER_VERSION; Status = filterDoInternalRequest(pFilter, NdisRequestQueryInformation, Oid, &InformationBuffer, sizeof(InformationBuffer), sizeof(InformationBuffer), MethodId, &BytesProcessed); if(Status == NDIS_STATUS_SUCCESS){ DEBUGP(DL_TEST,("Delete a new mac successfully!\n")); VersionHighByte = (InformationBuffer & 0xFF00) >> 8; VersionLowByte = (InformationBuffer & 0x00FF); DEBUGP(DL_TEST,("Ndis version:High %x, and Low: %x\n",VersionHighByte,VersionLowByte)); }
返回的值高位=0x6,低位=0x14(20)
所以现在的唯一的方法就是返回OID_GEN_SUPPORTED_LIST。 看看返回链表中是否有OID_DOT11_CREATE_MAC。
一般在驱动中都会定义该驱动支持的OID链表:
UINT supportedOIDs[] = { // // General required OIDs. // OID_GEN_SUPPORTED_LIST, OID_GEN_HARDWARE_STATUS, OID_GEN_MEDIA_SUPPORTED, OID_GEN_MEDIA_IN_USE, OID_GEN_MAXIMUM_LOOKAHEAD, OID_GEN_MAXIMUM_FRAME_SIZE, OID_GEN_LINK_SPEED, };
当有需要返回整个链表的时候:
case OID_GEN_SUPPORTED_LIST: infoSizeNeeded = sizeof(supportedOIDs); NdisMoveMemory( InformationBuffer, (PVOID)supportedOIDs, sizeof(supportedOIDs) ); break;
所以返回的list的size和关于数组的指针。虽然知道每个OID的是uint类型的,可是现在怎么把他们打印出来,成了问题。如果直接*(information+4*i),参考 General Operational Characteristics ,估计是数字,而不是字符。这是MSDN的描述:
最后一句没有明白。
--------------------------------------------2009-12-13------UPDATE-----------------------------------------
之前,由于锁的问题,而我却以为是内存分配的问题。所以对于DOT11_MAC_INFO,使用ULONG informationBuffer来保存,显然空间不够,unsigned long 应该是8个Bytes,而sizeof(DOT11_MAC_INFO) =16.
所以今天测试的时候返回了如下的状态:
The value specified in the InformationBufferLength member of the NDIS_OID_REQUEST-structured buffer at OidRequest does not match the requirements for the given OID_XXX code. If the information buffer is too small, the BytesNeeded member contains the correct value for InformationBufferLength on return from NdisOidRequest.
所以需要申请额外的空间:
Oid = OID_DOT11_CREATE_MAC;//OID used to create a new MAC pFilter = CONTAINING_RECORD(Link, MS_FILTER, FilterModuleLink); pMacInfo = (PDOT11_MAC_INFO)NdisAllocateMemoryWithTagPriority(pFilter->FilterHandle, sizeof(DOT11_MAC_INFO), FILTER_ALLOC_TAG, LowPoolPriority); NdisZeroMemory(pMacInfo,sizeof(DOT11_MAC_INFO)); DEBUGP(DL_TEST,("sizeof DOT11_MAC_INFO is%u!\n",sizeof(DOT11_MAC_INFO))); Status = filterDoInternalRequest(pFilter, NdisRequestMethod, Oid, pMacInfo, sizeof(DOT11_MAC_INFO), sizeof(DOT11_MAC_INFO), MethodId, &BytesProcessed); if(Status == NDIS_STATUS_SUCCESS){ DEBUGP(DL_TEST,("Creae a new mac successfully!\n")); if(BytesProcessed > 0){ DEBUGP(DL_TEST,("Prot Number is %u\n",pMacInfo->uNdisPortNumber)); DEBUGP(DL_TEST,("Mac Address is %x-%x-%x-%x-%x-%x\n",pMacInfo->MacAddr[0],pMacInfo->MacAddr[1],pMacInfo->MacAddr[2],pMacInfo->MacAddr[3],pMacInfo->MacAddr[4],pMacInfo->MacAddr[5])); } }else if(Status == NDIS_STATUS_OPEN_LIST_FULL) { DEBUGP(DL_TEST,("Status is NDIS_STATUS_OPEN_LIST_FULL !\n")); } else { DEBUGP(DL_TEST,("Creae a new mac Fail!\n")); }
这下子,好了,可以返回:
00000026 50.94353104 NDISLWF:
00000027 50.94354630 ==>Filter IO Control dispatch
00000028 50.94360352 NDISLWF:
00000029 50.94364929 The input length is 44, and inputdata isRequest from user mode to crate a new MAC.
00000030 50.94365311
00000031 50.94380951 NDISLWF:
00000032 50.94382858 ==>filterDoInternalRequest
00000033 51.13080597 NDISLWF:
00000034 51.13083649 BytesProcessed = 16
00000035 51.13090897 NDISLWF:
00000036 51.13092422 Creae a new mac successfully!
00000037 51.13094711 NDISLWF:
00000038 51.13096237 Prot Number is 1
00000039 51.13098145 NDISLWF:
00000040 51.13098526 Filter IO Control dispatch<====
这个测试没有打印出MAC 地址。
可是奇怪的是,创建成功之后,估计是没有删除,但是没有到达可以创建MAC的上限,当我第二次测试的时候,想把MAC打印出来的时候,发现返回的BytesProcessed=0.可是仍然是创建成功的,当然这个时候没有portnumber了。跟之前的状况有点相似了
-------------------继续更新---------------------
其实不小心犯了一个错误,忘记了将返回的内容写进InformationBuffer:
00000019 23.88084602 Filter IO Control dispatch<====
00000020 24.11517906 NDISLWF:
00000021 24.11519814 ==>Filter IO Control dispatch
00000022 24.11523628 NDISLWF:
00000023 24.11548042 The input length is 44, and inputdata isRequest from user mode to crate a new MAC.
00000024 24.11548805
00000025 24.11552620 NDISLWF:
00000026 24.11553955 sizeof DOT11_MAC_INFO is16!
00000027 24.11557198 NDISLWF:
00000028 24.11559105 ==>filterDoInternalRequest
00000029 24.27196312 NDISLWF:
00000030 24.27199936 Creae a new mac successfully!
00000031 24.27202034 NDISLWF:
00000032 24.27203941 Prot Number is 1
00000033 24.27205467 NDISLWF:
00000034 24.27209473 Mac Address is 0-14-78-7a-2-a2
00000035 24.27212715 NDISLWF:
00000036 24.27213287 Filter IO Control dispatch<====
那么接下来就是删除等后续动作了,删除就有些失望了:
估计是该驱动不支持?这个不是很可能,因为它已经支持了OID_DOT11_CREATE_MAC,必定支持OID_DOT11_DELETE_MAC.另外查询没有问题:6.20.
评论
Version of Ndis Driver is 6.20
Input your command,like: help
>create
Successfylly Create A new MAC
Port Number is 1, and Mac address is 0-14-78-7a-88-b7
不是所有的都一样的!!
发表评论
-
Filter驱动:过滤(修改)接受数据包
2010-04-20 16:18 9310Filter驱动可以实现简单的防火墙功能。它可以过滤所有接收到 ... -
Ndis过滤驱动:拷贝NetBufferList数据
2010-04-19 22:40 9558今天我们来看看如何拷贝NBL中的数据。有时候需要更改数据包中的 ... -
在Filter驱动内核中获取IP地址
2010-04-18 01:48 3893项目开发中有时候需要在Filter驱动中获取有效地Unic ... -
如何在内核中获得当前系统时间
2010-04-16 15:08 2719在 Windows NT 内核中你是无法使用 tim ... -
Filter发送自定义数据详解
2010-04-16 10:30 5757... -
DebugPrint 格式说明符
2010-04-13 19:46 17651) 直接打印字符串。 DbgPrint(“Hello ... -
WDK+Visual Studio 2008配置编译驱动
2010-04-12 23:36 5563Introduction As it is known, ... -
疑问:关于内存释放
2010-04-12 21:33 1454今天碰到一个比较棘手的内存处理问题。 首先来看一个数据结构: ... -
Windows NT 驱动程序开发人员提示 -- 应注意避免的事项
2010-04-10 11:32 2323原讨论链接: http://community.cs ... -
关于DeviceIoControl实现异步的笔记【2】
2010-04-09 23:17 5102前面我们谈到了关于异步I/O的实现:关于DeviceIoCon ... -
关于DeviceIoControl实现异步的笔记【1】
2010-04-08 22:26 11743一直所做的都是同步实现的。当然很多情况这并不是很好的解决问题。 ... -
驱动和应用层的异步通信
2010-04-08 20:55 5405作 者: sislcb时 间: 2008-01-28,11:1 ... -
Windows系统编程之异步I/O和完成端口
2010-04-08 19:40 2317一、 同步I/O和异步I/O ... -
纵横捭阖C++之从异步谈起
2010-04-08 19:31 3217一般来说,简单的异步(Asynchronous)调用是这样一种 ... -
使用DeviceIoControl通信
2010-04-04 22:53 7904在很多时候,某些用户需要与底层驱动有一个交互式的操作,所 ... -
在驱动中使用链表
2010-04-03 14:06 3291文章作者:grayfox 作 ... -
疑问:数据包Length增大的原因
2010-04-01 14:35 1366现象: 自己定义一个仅含有Ethernet Header的数 ... -
疑问:为何无线网卡无法发送数据?
2010-03-30 22:42 4564所有的测试流程表明,程序已经成功的创建新的数据包,然后调用Nd ... -
InsertHeadList和CONTAINING_RECORD
2010-03-29 16:36 3754LIST_ENTRY定义一个双向链表的数据结构: typed ... -
如何区分不同的Filter Module Instance
2010-03-29 14:50 1538前文 说到如何区分不同Filter Module Inst ...
相关推荐
"Native Wifi C#示例"是关于利用C#编程语言与Windows操作系统内置的Native Wifi API(wlanapi.dll)进行交互的实践教程。这个API允许开发者直接控制和管理无线网络连接,提供了比.NET Framework提供的`System.Net....
描述中的“包含了wlanhelper类”,表明在提供的压缩包文件中,可能有一个名为`WlanHelper`的类,这个类可能是对Native WiFi API的封装,使得开发者能够更方便地调用API函数。通常,这样的类会包含一些方法,如扫描...
React Native 是一个开源框架,由Facebook开发,用于构建原生移动应用程序。它允许开发者使用JavaScript和React库来编写代码,同时享受到与原生应用相似的性能。本教程将详细介绍在Windows 7和Windows 10操作系统上...
本文将深入探讨Native WiFi API的基本概念、编程接口、使用方法,并结合实例介绍如何利用它实现一个基于室内Wi-Fi定位的程序。 一、Native WiFi API基础 1.1 Native WiFi API概述 Native WiFi API是Windows Vista...
Native Wifi API 是 Windows 操作系统提供的一种编程接口,允许开发者直接与无线网络硬件进行交互,实现对无线网络连接的控制。这种API在VC++(Visual C++)环境中特别有用,因为它可以集成到C++应用程序中,为用户...
标题中的“wifi.rar_C# WiFi_CSHARP wifi_VS 2010_WIFI--Distance_native Wi”表明这是一个关于使用C#编程语言开发的WiFi相关项目,特别提到了“native Wi”,意味着它可能涉及到Windows操作系统底层的WiFi接口。...
标题中的"C# Win7 WiFi热点定时关机"指的是使用C#编程语言开发的一个应用程序,该程序功能是在Windows 7操作系统中创建一个WiFi热点,并且具备定时自动关闭计算机的能力。这个程序可能被设计为帮助用户在特定时间...
【标题】"MyRouter win7变wifi热点"指的是利用MyRouter工具将Windows 7系统转换为无线网络热点,使得其他设备可以通过Wi-Fi连接并共享该电脑的网络连接。这一功能在没有路由器或需要临时共享网络时非常实用。 ...
这个压缩包文件"易语言源码易语言win7下架设wifi源码.rar"包含了一个使用易语言编写的程序,用于在Windows 7操作系统下设置和管理无线网络连接,即创建WiFi热点。 易语言的特点在于其直观的语法,它采用接近自然...
windows下c++操作wifi的demo,使用官方wifi native api编写的demo程序,结合Qt信号槽使用,注意点看这里https://blog.csdn.net/baidu_30570701/article/details/103207045
ReactART是React的一个扩展库,它为React Native提供了一个2D图形渲染层,使得开发者能够在移动平台上创建丰富的图形,包括自定义的动画和图表。 本篇将详细讲解如何利用React Native组件与ReactART来创建动画圆形...
这是用于创建本机WiFi Manager包装器的WIP。 入门 $ npm install react-native-wifi-manager --save 大多是自动安装 $ react-native link react-native-wifi-manager 手动安装 的iOS 在XCode的项目导航器中,...
解决在win7 x64\x32下面安装sql native client 不成功的
3. 驱动安装完成后,就可以按照正常流程继续安装 Win7:在安装驱动完成后,系统将继续安装 Win7,並需要创建 ESP 和 MSR 分区,以便正确安装 Win7。 四、ESP 和 MSR 分区 在安装 Win7 时,需要创建 ESP 和 MSR ...
react-native:一个基于 React 的创建原生APP的框架
总的来说,"windows下QT编写的连接wifi程序"项目结合了Qt的便利性和Windows Native WiFi API的底层控制能力,为开发人员提供了一种有效的方式,以图形化界面实现无线网络的管理和连接。理解这些技术可以帮助你创建更...
每个连接请求都会创建一个新的线程,这样服务器就能同时处理多个客户端的请求。 7. **Android中的异步调用** 在Android应用中,由于主线程不能进行阻塞操作,所以服务器的监听和客户端的连接通常会在后台线程或者...
在本场景中,"Navicat"被提及,这是一个流行的数据管理工具,用户可以使用它通过SQL Server 2008 Native Client来远程或本地管理SQL Server数据库。 SQL Server 2008 Native Client包含了以下关键特性: 1. **ODBC...
React Native 的 WiFi 管理器 (react-native-wifi-manager) 列出、连接并获取设备上 WiFi 连接的状态。 安装 首先需要安装 react-native-wifi-manager: npm install react-native-wifi-manager --save 在 android/...