监听以太网
(二
) Packet32
包说明续
Article last modified on 2002-9-17
|
The information in this article applies to:
--Microsoft Windwos NTx
---
Microsoft Windwos 9x
--WinPcap: the Free Packet Capture Architecture for Windows
|
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
事件等。
(To be continued)
Writen by
zhengyun@tomosoft.com
本文档所包含的信息代表了在发布之日,
ZhengYun
对所讨论问题的当前看法,
Zhengyun
不保证所给信息在发布之日以后的准确性。
本文档仅供参考。对本文档中的信息,
Zhengyun
不做任何明示或默示的保证。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12691