首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 监听以太网(二) Packet32包说明续
【标  题】:监听以太网(二) Packet32包说明续
【关键字】:Packet32
【来  源】:http://blog.csdn.net/zy122/archive/2006/12/01/1424519.aspx

监听以太网(二) 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事件等。 
监听以太网(四) Packet32函数SDK:【上一篇】
监听以太网(一) Packet32包说明:【下一篇】
【相关文章】
  • 监听以太网(四) Packet32函数SDK
  • 监听以太网(三) Packet32数据结构说明
  • 【随机文章】
  • root密码忘记后几种解决办法[转]
  • MyEclipse5.1的注册号
  • 移动开发系列(一):Windows Mobile用户界面可访问原则
  • 细节决定软件成败[转]
  • linux问答99
  • FreeBSD服务器的安装与优化(2)
  • 破解Screen logger manager v1.01(2)
  • 硬盘安装SUSE Linux 10.1心得(附FC5硬盘安装)
  • ASP与ActiveX控件交互实战(三)
  • FCKeditor 2.3 设置.修改.使用(1)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.