1. 目的:获得当前网卡的MAC地址
2.方法:使用OID: OID_DOT11_CURRENT_ADDRESS
3.信息准备:
DOT11_MAC_ADDRESS MacAddress;
pFilter = CONTAINING_RECORD(Link, MS_FILTER, FilterModuleLink);
Status = filterDoInternalRequest(pFilter,
NdisRequestQueryInformation,
Oid,
&MacAddress,
sizeof(DOT11_MAC_ADDRESS),
sizeof(DOT11_MAC_ADDRESS),
MethodId,
&BytesProcessed);
if(Status == NDIS_STATUS_SUCCESS)
{
DEBUGP(DL_TEST,("Get Curremt address Successfully!\n"));
DEBUGP(DL_TEST,("Mac Address is %x-%x-%x-%x-%x-%x\n",MacAddress[0],MacAddress[1],MacAddress[2],MacAddress[3],MacAddress[4],MacAddress[5]));
filterSendOriginatedBufferList(pFilter,NDIS_DEFAULT_PORT_NUMBER,&MacAddress);//You can modify this method to do what you want!
}else{
DEBUGP(DL_TEST,("Delete a mac fail\n"));
break;
}
4.是执行filterDoInterNalRequest函数(来自LWF驱动源码)
NDIS_STATUS
filterDoInternalRequest(
IN PMS_FILTER FilterModuleContext,
IN NDIS_REQUEST_TYPE RequestType,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
IN ULONG OutputBufferLength, OPTIONAL
IN ULONG MethodId, OPTIONAL
OUT PULONG pBytesProcessed
)
/*++
Routine Description:
Utility routine that forms and sends an NDIS_OID_REQUEST to the
miniport, waits for it to complete, and returns status
to the caller.
NOTE: this assumes that the calling routine ensures validity
of the filter handle until this returns.
Arguments:
FilterModuleContext - pointer to our filter module context
RequestType - NdisRequest[Set|Query|method]Information
Oid - the object being set/queried
InformationBuffer - data for the request
InformationBufferLength - length of the above
OutputBufferLength - valid only for method request
MethodId - valid only for method request
pBytesProcessed - place to return bytes read/written
Return Value:
Status of the set/query request
--*/
{
FILTER_REQUEST FilterRequest;
PNDIS_OID_REQUEST NdisRequest = &FilterRequest.Request;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
DEBUGP(DL_TEST,("==>filterDoInternalRequest\n"));
NdisZeroMemory(NdisRequest, sizeof(NDIS_OID_REQUEST));
NdisInitializeEvent(&FilterRequest.ReqEvent);
NdisRequest->Header.Type = NDIS_OBJECT_TYPE_OID_REQUEST;
NdisRequest->Header.Revision = NDIS_OID_REQUEST_REVISION_1;
NdisRequest->Header.Size = sizeof(NDIS_OID_REQUEST);
NdisRequest->RequestType = RequestType;
switch (RequestType)
{
case NdisRequestQueryInformation:
NdisRequest->DATA.QUERY_INFORMATION.Oid = Oid;
NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer =
InformationBuffer;
NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength =
InformationBufferLength;
break;
case NdisRequestSetInformation:
NdisRequest->DATA.SET_INFORMATION.Oid = Oid;
NdisRequest->DATA.SET_INFORMATION.InformationBuffer =
InformationBuffer;
NdisRequest->DATA.SET_INFORMATION.InformationBufferLength =
InformationBufferLength;
break;
case NdisRequestMethod:
NdisRequest->DATA.METHOD_INFORMATION.Oid = Oid;
NdisRequest->DATA.METHOD_INFORMATION.MethodId = MethodId;
NdisRequest->DATA.METHOD_INFORMATION.InformationBuffer =
InformationBuffer;
NdisRequest->DATA.METHOD_INFORMATION.InputBufferLength =
InformationBufferLength;
NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength = OutputBufferLength;
break;
default:
FILTER_ASSERT(FALSE);
break;
}
NdisRequest->RequestId = (PVOID)FILTER_REQUEST_ID;
Status = NdisFOidRequest(FilterModuleContext->FilterHandle,
NdisRequest);
if (Status == NDIS_STATUS_PENDING)
{
NdisWaitEvent(&FilterRequest.ReqEvent, 0);
Status = FilterRequest.Status;
}
if (Status == NDIS_STATUS_SUCCESS)
{
if (RequestType == NdisRequestSetInformation)
{
*pBytesProcessed = NdisRequest->DATA.SET_INFORMATION.BytesRead;
}
if (RequestType == NdisRequestQueryInformation)
{
*pBytesProcessed = NdisRequest->DATA.QUERY_INFORMATION.BytesWritten;
InformationBuffer = NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer;
}
if (RequestType == NdisRequestMethod)
{
*pBytesProcessed = NdisRequest->DATA.METHOD_INFORMATION.BytesWritten;
InformationBuffer = NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer;
}
// The driver below should set the correct value to BytesWritten
// or BytesRead. But now, we just truncate the value to InformationBufferLength
if (RequestType == NdisRequestMethod)
{
if (*pBytesProcessed > OutputBufferLength)
{
*pBytesProcessed = OutputBufferLength;
}
}
else
{
if (*pBytesProcessed > InformationBufferLength)
{
*pBytesProcessed = InformationBufferLength;
}
}
}
//add by leyond
if(Status == NDIS_STATUS_INVALID_LENGTH || Status == NDIS_STATUS_BUFFER_TOO_SHORT)
{
DEBUGP(DL_TEST,("Still need more bytes = %u",NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded));
}
if(Status == NDIS_STATUS_INVALID_OID)
{
DEBUGP(DL_TEST,(" NDIS_STATUS_INVALID_OID--||--"));
}
return (Status);
}
这样就完成了~
Mac Address is 0-14-78-7a-88-b6
分享到:
相关推荐
vc++获取取网卡MAC地址的三种方法.zip visual c++取得网卡物理地址的三种方法.zip
基于java的Oid获取软件,基于snmp协议的一个很好用的OID获取软件,有源码。
松翰二代笔头驱动程序。该代码是从已量产产品的笔头驱动原码,很实用的。
快速获取SNMP设备oid的软件工具
通过snmp和oid获取电脑的内存硬盘的使用情况和总量
通过使用SNMP协议获取某个交换机或服务器相关设备信息,如获取交换机设备,则可以通过设备OID获取相关信息,以及能获取交换机下所有连接的PC机的MAC地址与IP地址以及端口号信息。
1 windows下安装和配置snmp服务 2 用snmp4j获取本地所有oid 代码
Java来实现snmp的get、walk代码示例
通过snmp的OID获取对方主机的内存利用率及CPU的使用率
SNMP协议,MIB数据库里,OID所能获取的数据,例如: 对象名:ifMtu(2) OID:ifEntry.4 对象类型:Integer 访问模式:只读 描述:接口的最大传输单元。用来表示接口上可以发送或接受的最大帧 整理一下,方便新手熟悉...
做网管系统时候获取被监控设备的oid,例如内存,cpu利用率等等
F5 SNMP OID说明rv1 供大家学习! 本资料共包含以下附件: BIG-IPLTMSNMPV9[1].2.x.说明rv1.doc
是一款专业的MIB浏览器,可以显示mib、oid、syntax、access、status等信息,通过查看mib相应对象的值实现对网络设备状态的监视,支持多种标准。软件免安装,需要的朋友可以下载!
8.4.3.4 在广域网微端口驱动程序上发送数据 123 8.4.4 广域网微端口驱动程序做出的指示 125 8.4.4.1 指示从标准广域网微端口驱动程序接收数据 125 8.5 广域网包的组帧 128 8.5.1 异步帧结构 128 8.5.2 X.25帧结构 ...
基于C#编写的通过OID获取SNMP 已正常使用 在大型项目中
OID编解码工具,支持OID编码至der,从der解码至OID字符串
对象标识符, 即 Object Identifier(OID) , 是 ISO/IEC(国际标 准化组织/国际电工委员会) 和 ITU(国际电信联盟) 三大国际权威 标准组织共同推动的标识体系, 用于标识“通信和信息处理世界中的 任何事物” 。...
Juniper常用SNMP(OID)使用手册_Ver2
网络驱动程序设计指南的向导 3 第二章 内核模式驱动程序的网络结构 6 2.1 Windows 2000 网络结构和OSI模型 6 2.2 NDIS驱动程序 7 2.2.1 NDIS微端口驱动程序 7 2.2.2 NDIS中间层驱动程序 8 2.2.3 ...
OID(Object Identifier)的十进制数字表达方式与16进制表达方式的相互转换规则 常用OID表达的含义