网络-MiniportInitialize笔记.txt
来源:互联网 发布:单片机开发 编辑:程序博客网 时间:2024/04/29 02:20
知道它是基于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
- 网络-MiniportInitialize笔记.txt
- linux网络命令.txt
- 读取网络TXT文件
- Struts_Validator学习笔记.txt
- git培训笔记.txt
- velocity笔记.txt
- maven笔记.txt
- delphi笔记:txt读写
- cmake笔记(CMakeList.txt)
- TXT文件学习笔记
- java基础知识笔记txt
- hive笔记.txt
- sqoop笔记-new.txt
- CMakeLists.txt笔记
- CMakeLists.txt学习笔记
- linux网络服务器上.txt
- 网络文本函数(二).txt
- 学习笔记:按行分拆txt文档
- 层次聚类分析 代码
- 各种鲜榨果汁配方及制作方法
- ExtJS 3.4.0 开发过程中遇到问题整理
- phonegap_java_js_交互
- 第十二周任务三
- 网络-MiniportInitialize笔记.txt
- 第十二周C++【任务4】类的组合与继承。
- Android支持横行滚动的ListView控件
- 第十二周实验报告(3)
- 略知能源
- 第十二周实验报告3
- 第十二周实验报告3
- 查看python当前导入的符号
- ORA-01180 ORA-01110