监听以太网(二) Packet32包说明

Packet32包中的函数说明: 

No.2. PacketOpenAdapter (打开网卡) 

根据传入的设备名,打开它。 

LPADAPTER PacketOpenAdapter( 
LPTSTR AdapterName 
); 

Parameters: 
AdapterName: [in] 要打开的设备的名字。 
Return Values: 
如果打开成功,返回一个指针,它指向一个正确初始化了的ADAPTER Object。否则,返回NULL。 

Usage: 
[C/C++] 
C/C++ Usage Sample 
LPADAPTER adapter; 
adapter = PacketOpenAdapter(pStr+rewind); 

Remarks: 
  这个函数尝试加载并启动packet driver,这样,管理driver对于应用程序来说就十分的透明了。 
  Windows9X版本的NPF driver用的是ASCII编码,而WindowsNTx用的是Unicode编码。所以提请注意这个输入参数AdapterName,在Windows9X下,必须是正确的编码格式!在WindowsNTx下,这个函数能够监测到ASCII编码,并在送给driver 之前先转换为Unicode编码。 这个函数的操作大致为: 

  首先调用OpenSCManager,以Administrators的身份连接Service Control Manager,权限是SC_MANAGER_ALL_ACCESS。这也说明,使用Packet.dll你必须是本机管理员组成员。 
  如果可以连接SCM,检查NPF注册表项是否存在。 
  如果存在,说明driver已经安装了,就不需要我们调用PacketInstallDriver了。 NPF注册表项: 

HKEY_LOCAL_MACHINE/ 
  SYSTEM/ 
   CurrentControlSet/ 
    Services/ 
     NPF 

  如果不存在此键,则调用PacketInstallDriver安装当前路径下的 driver:npf.sys。 
  如果这次PacketInstallDriver安装也失败了,就到系统路径下查找并安装这个驱动。 
  如果以上操作都成功的话,调用OpenService打开NPF服务。如果服务存在的话,就调用QueryServiceStatus查询当前服务状态。这就是我们的driver的状态。 
  如果这个服务没有启动,就调用StartService启动之。 

  确认服务启动之后,检查AdapterName是否是ASCII编码,是的话,就转换为Unicode。 

由于一般输入参数AdapterNAme类似于这样: 

/Device/NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348} 

所以,我们会重新组织一个设备名SymbolicLink: “Packet_”的前缀 + AdapterName[8] 也就是: //./Packet_NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348} 

先尝试着CreateFile函数能不能马上用这个SymbolicLink名字打开设备。 
如果可以,就调用PacketSetReadEvt函数打开一个open事件等。 
否则,调用DefineDosDevice定义一个新的MS-DOS设备: 
名字类似于” Packet_NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}”。 
通过这个DOS设备名,我们的应用层程序才能向驱动发出请求。接着,调用CreateFile函数来建立并打开一个联系设备的文件句柄(GENERIC_WRITE| GENERIC_READ,OPEN_EXISTING)。之后,调用PacketSetReadEvt函数打开一个open事件等。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值