中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 网络与通信
监听以太网(二) Packet32包说明续
作者:未知 时间:2005-07-20 14:17 出处:VC知识库 责编:chinaitpower
              摘要:监听以太网(二) Packet32包说明续
监听以太网(二) Packet32包说明续
作者:zhengyun_ustc

提交者:eastvc 发布日期:2003-6-28 19:29:43
原文出处:http://www.csdn.net/


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安装当前路径下的drivernpf.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_READOPEN_EXISTING)

之后,调用PacketSetReadEvt函数打开一个open事件等。

 

(To be continued)

 

Writen by zhengyun@tomosoft.com

 

本文档所包含的信息代表了在发布之日,ZhengYun 对所讨论问题的当前看法,Zhengyun 不保证所给信息在发布之日以后的准确性。

本文档仅供参考。对本文档中的信息,Zhengyun 不做任何明示或默示的保证。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有