从WLAN Scan
with NDIS Miniport and Much More
这篇
文章知道
可以使用IOCTL_NDIS_QUERY_GLOBAL_STATS,然后通过DeviceIoControl()函数把需要的OID传递给底层的Filter驱动或者Miniport驱动。犹如:
oidcode = OID_802_11_BSSID_LIST ;//action to perform
if( DeviceIoControl( m_handle,// device to be queried
IOCTL_NDIS_QUERY_GLOBAL_STATS,// operation to
// perform
&oidcode,
sizeof( oidcode),// input buffer
( ULONG *) m_pBSSIDList,// output buffer
sizeof( NDIS_802_11_BSSID_LIST) *
NUMBEROF_BSSIDS,
&bytesreturned,// # bytes returned
NULL) == 0)// synchronous I/O
{
看起来很好使用,但是注意的是IOCTL_NDIS_QUERY_GLOBAL_STATS只是适合查询(Query),估计是出于安全的考虑,微软没有允许Set OID,因为这样会更改到底层驱动的某些属性。当然Vista开始,你可以使用与某个OID对应的WMI,比如对于OID_802_11_BSSID_LIST_SCAN你可以使用WlanScan函数,当然也有对应的Ndis6.0版本的OID_DOT11_SCAN_REQUEST。但是是不是可以在User Mode层使用这个OID,未可知。但是WlanScan是可以的。
更加详细资料: http://www.ndis.com/ndis-general/queryglobalstats/default.htm
分享到:
相关推荐
例如,要禁用网卡,我们可以发送`IOCTL_NDIS_QUERY_GLOBAL_STATS`控制代码,附带`OID_GEN_MEDIA_DISCONNECT`参数;而启用则可以使用`OID_GEN_MEDIA_CONNECTED`参数。 以下是关键代码片段的示例: ```delphi uses ...
Const IOCTL_NDIS_QUERY_GLOBAL_STATS = &H40000000 Const OID_GEN_MEDIA_CONNECT_STATUS = &H10105 Type NDIS_STATISTICS Status As Long End Type Dim hDevice As Long Dim stats As NDIS_STATISTICS Dim ...
例如,可以使用`IOCTL_NDIS_QUERY_GLOBAL_STATS`来查询网卡状态,`IOCTL_NDIS_SET_GLOBAL_STATS`来设置网卡状态。需要注意的是,这些操作需要管理员权限。 3. **`CreateFile`和`DeviceIoControl`**:这两个函数是...
对于网络适配器,我们可以使用IOCTL_NDIS_QUERY_GLOBAL_STATS控制代码来获取设备状态,然后通过IOCTL_NDIS_SET_GLOBAL_STATS来更改它。这些操作需要对NDIS(网络驱动接口规范)有一定的理解,因为NDIS是Windows操作...
If DeviceIoControl(nicHandle, IOCTL_NDIS_QUERY_GLOBAL_STATS, buffer, Len(buffer), buffer, Len(buffer), bytesReturned, ByVal 0&) = 0 Then ' 错误处理... End If ``` 8. **权限和安全性**: 修改MAC...
读取网卡物理地址需要使用`IOCTL_NDIS_QUERY_GLOBAL_STATS`这个IOCTL代码。 3. 定义结构体:我们需要定义一个结构体来存储网络适配器的信息,包括其物理地址。可以使用`NDISadapt`结构体,它是`NDIS_802_3_MAC_...
对于获取RSSI,我们需要使用特定的控制代码,如`OID_GEN_RSSI`或`IOCTL_NDIS_QUERY_GLOBAL_STATS`等。 3. `InBuffer` 和 `InBufferLength`:输入缓冲区和长度,根据控制代码的不同,可能需要提供某些参数。 4. `...
`IOCTL_NDIS_QUERY_GLOBAL_STATS`是用于查询或设置网络设备状态的控制代码,这里我们将其用于设置MAC地址。注意,实际使用时,你需要替换`{网卡设备名}`为实际的设备名称,可以通过枚举网络设备来获取。 缓冲区`....
例如,可以通过发送`IOCTL_NDIS_QUERY_GLOBAL_STATS`和`IOCTL_NDIS_SET_GLOBAL_STATS`来查询或设置网卡状态。 3. **网络设备枚举**: 应用程序首先需要识别并选择要操作的网卡。这可能需要使用`SetupDiGetClassDevs`...
4. **发送I/O控制命令**:利用`DeviceIoControl`函数发送特定的控制代码,例如`IOCTL_NDIS_QUERY_GLOBAL_STATS`或`IOCTL_NDIS_SET_GLOBAL_STATS`,来改变网卡的工作状态。比如,可以设置`NDIS_STATUS_MEDIA_...
- **`ntddndis.h`**: 包含了NDIS(Network Driver Interface Specification)相关的定义,包括`IOCTL_NDIS_QUERY_GLOBAL_STATS` 和 `OID_802_3_PERMANENT_ADDRESS`。 - **`iphlpapi.h`**: 提供了高级别的网络API,如...
对于读取无线网卡MAC地址,我们可以使用`IOCTL_NDIS_QUERY_GLOBAL_STATS`控制代码,它允许我们查询网络适配器的各种统计信息,包括物理地址(MAC地址)。 在调用`DeviceIoControl`时,还需要提供一个输入缓冲区和...
3. **修改MAC地址**:选定网卡后,使用API函数`DeviceIoControl`,配合`IOCTL_NDIS_QUERY_GLOBAL_STATS`控制码和`NDIS_OBJECT_HEADER`结构体,可以查询和修改网卡的MAC地址。在易语言中,这部分可能需要封装成自定义...
至于"set mac",在Windows系统中,设置MAC地址通常涉及到调用`DeviceIoControl`函数,传入特定的控制代码(如IOCTL_NDIS_QUERY_GLOBAL_STATS)和缓冲区来修改硬件地址。这是一个比较复杂的操作,需要对WinAPI有深入...
IoControlCode ioCtrlCode = IOCTL_NDIS_QUERY_GLOBAL_STATS; NDIS_OBJECT_HEADER header; header.Type = NDIS_OBJECT_TYPE_DEFAULT; header.Revision = NDIS_OBJECT_REVISION_1; header.Size = sizeof(NDIS_...
在禁用网卡时,我们会向网络适配器的设备句柄发送特定的IOCTL代码,如`IOCTL_NDIS_QUERY_GLOBAL_STATS`。 3. **IPHLPAPI**:这是一个包含多个网络辅助函数的库,其中的函数可以用来设置IP配置、获取网络统计信息等...
IOCTL_NDIS_QUERY_GLOBAL_STATS的使用 - **IOCTL**(Input/Output Control):用于向内核发送控制命令。 - **查询全局统计信息**:通过IOCTL_NDIS_QUERY_GLOBAL_STATS可以查询整个系统的网络统计信息。 #### 17. ...