de900aep笔记-mac打印来由.txt
来源:互联网 发布:单片机开发 编辑:程序博客网 时间:2024/05/17 04:38
知道它是基于NDIS构架的,我们只需要实现一个MINIPORT驱动,实现其中的一些接口函数就可以了。
问题1:mac地址是怎么打印出来的:如:
[DM9ISA]: MAC address is = 00 : 60 : 4d : 51 : 00 : 01
[DM9ISA]: load NIC MAC address form register file
答:在NIC_DEVICE_OBJECT::DeviceMacAddress中的打印
过程:
PU8 NIC_DEVICE_OBJECT::DeviceMacAddress(PU8 ptrBuffer)
这个读取mac地址,并且打印mac地址,实际上该函数是读取全局变量(U8)m_szConfigures[CID_MAC_ADDR_0];
///////////////////////////////////////////////////////////////////////////////////////////////////
问题2:mac地址是怎么初始化的:
m_szConfigures[CID_MAC_ADDR_0];保留mac地址,这个数组初始化,在这个函数:
void NIC_DEVICE_OBJECT::DeviceRetriveConfigurations,这个函数从注册表中读取全部的信息,保存到该变量中.
CID_MAC_ADDR_0是枚举常数,被另外一个结构体数组引用:
CONFIG_PARAMETER g_szDm9ConfigParams[] =
{
{ CID_IO_BASE_ADDRESS, 0x00000300, NDIS_STRING_CONST("IoAddress")},
{ CID_IRQ_NUMBER, 3, NDIS_STRING_CONST("IrqNumber")},
{ CID_INT_ACTIVE, INT_ACTIVE_HIGH, NDIS_STRING_CONST("Int_Active_High")},
{ CID_FC_ENABLE, FLOW_CONTROL_ENABLE, NDIS_STRING_CONST("Flow_Control_Enable")},
{ CID_MAC_LOAD_MODE, 0, NDIS_STRING_CONST("MAC_Load_Mode")},
{ CID_MAC_ADDR_0, 0x00, NDIS_STRING_CONST("SoftwareMacAddress0")},
g_szDm9ConfigParams只在这个函数引用,:
PCONFIG_PARAMETER C_DM9000::DeviceConfigureParameters(void)
{
return (PCONFIG_PARAMETER)&g_szDm9ConfigParams[0];
}
上面那个函数只在这个函数引用:void NIC_DEVICE_OBJECT::DeviceRetriveConfigurations
在这个函数中,遍历g_szDm9ConfigParams[]数组的每一个成员,然后初始化m_szConfigures[]数组
C_DM9000是NIC_DEVICE_OBJECT的子类, DeviceConfigureParameters函数并没有在父类实现,是个抽象函数,但是
这个函数在父类中得到了调用, 所以所有的函数都是在子类C_DM9000中得到调用的.
在NIC_DEVICE_OBJECT::DeviceRetriveConfigurations函数中会打印如下信息:
DM9000 NIC_DEVICE_OBJECT *DeviceEntry!!***
[DM9ISA]: read register IoAddress 18000000 !
[DM9ISA]: read register IrqNumber 24 !
[DM9ISA]: read register Int_Active_High 1 !
[DM9ISA]: read register Flow_Control_Enable 1 !
[DM9ISA]: read register MAC_Load_Mode 0 !
[DM9ISA]: read register MAC_ADDR_0 0 !
[DM9ISA]: read register MAC_ADDR_1 60 !
[DM9ISA]: read register MAC_ADDR_1 4d !
[DM9ISA]: read register MAC_ADDR_2 51 !
[DM9ISA]: read register MAC_ADDR_3 0 !
[DM9ISA]: read register MAC_ADDR_5 1 !
///////////////////////////////////////////////////////////////////////////////////////////////////
问题3:NIC_DEVICE_OBJECT::DeviceRetriveConfigurations怎么调用的?
该函数只在void NIC_DRIVER_OBJECT::EDriverInitialize()函数中得到调用,
在该函数中初始化一个DM9000的实例,然后通过这个实例调用DeviceRetriveConfigurations()
EDriverInitialize()函数在一个c语言函数被调用:
NDIS_STATUS MiniportInitialize()
这个函数会创建一个NIC_DRIVER_OBJECT实例,通过这个实例调用EDriverInitialize();
MiniportInitialize函数在DriverEntry中被初始化到数组中:
ndischar.Ndis30Chars.InitializeHandler = MiniportInitialize;
附录:类关系:
class C_DM9000 : public NIC_DEVICE_OBJECT
- de900aep笔记-mac打印来由.txt
- 打印txt文件信息
- MFC 打印.txt文件
- Mac 创建.txt文件
- Mac与iPhone版OneNote更新 可直接打印笔记
- prototype 来由
- Zookeeper来由
- jQuery打印图片,pdf,txt
- MAC OS TXT中文乱码
- linux/Mac/coreboot/readme.txt
- mac下查看 windows txt
- Mac:打印暂停问题
- 打印mac地址
- Struts_Validator学习笔记.txt
- git培训笔记.txt
- velocity笔记.txt
- maven笔记.txt
- 网络-MiniportInitialize笔记.txt
- python的回调函数
- ASP.NET学习笔记
- Unity3D,同时使用第三方静态库指定armv6编译crash的问题
- 计算机视觉方面的代码
- 客户端和服务器端交互,如何将获取的结果及时进行刷新显示
- de900aep笔记-mac打印来由.txt
- 层次聚类分析 代码
- 各种鲜榨果汁配方及制作方法
- ExtJS 3.4.0 开发过程中遇到问题整理
- phonegap_java_js_交互
- 第十二周任务三
- 网络-MiniportInitialize笔记.txt
- 第十二周C++【任务4】类的组合与继承。
- Android支持横行滚动的ListView控件