深度剖析winpcap之(八)——打开与关闭适配器(8)

深度剖析winpcap之(八)——打开与关闭适配器(8)

ID:12069773

大小:54.50 KB

页数:7页

时间:2018-07-15

深度剖析winpcap之(八)——打开与关闭适配器(8)_第1页
深度剖析winpcap之(八)——打开与关闭适配器(8)_第2页
深度剖析winpcap之(八)——打开与关闭适配器(8)_第3页
深度剖析winpcap之(八)——打开与关闭适配器(8)_第4页
深度剖析winpcap之(八)——打开与关闭适配器(8)_第5页
资源描述:

《深度剖析winpcap之(八)——打开与关闭适配器(8)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、深度剖析WinPcap之(八)——打开与关闭适配器(8)2009-09-2621:38:25 标签:关闭打开适配器   [推送到技术圈]版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://eslxf.blog.51cto.com/918801/2064201.5.2.1.1     PacketOpenAdapterNPF函数函数PacketOpenAdapterNPF()的作用是打开一个使用NPF设备驱动的适配器。该函数被PacketOpenAdapt

2、er()与AddAdapter()作为内部函数调用。函数原型如下:LPADAPTERPacketOpenAdapterNPF(PCHARAdapterNameA);参数AdapterNameA字符串包含待打开设备的名称。函数如果成功,返回一个已经正确初始化的ADAPTER对象的指针。否则返回NULL。函数的主要代码如下:LPADAPTERPacketOpenAdapterNPF(PCHARAdapterNameA){LPADAPTERlpAdapter;…CHARSymbolicLinkA[MAX_PATH];//NPF_D

3、RIVER_NAME定义为"NPF"CHARNpfDriverName[MAX_WINPCAP_KEY_CHARS]=NPF_DRIVER_NAME;CHARNpfServiceLocation[MAX_WINPCAP_KEY_CHARS];/*连接到服务控制管理器*/scmHandle=OpenSCManager(NULL,NULL,GENERIC_READ);if(scmHandle==NULL){//连接到服务控制管理器失败error=GetLastError();}else{/**检查NPF服务是否已经存在,*如果存

4、在则接下来可以分配并初始化ADAPTER对象*///设置NPF服务的注册表位置StringCchPrintfA(NpfServiceLocation,sizeof(NpfServiceLocation),"SYSTEM\CurrentControlSet\Services\%s",NpfDriverName);//检查NPF注册表的键值是已否存在,如果已经存在,//这意味着驱动已经安装,//我们不再需要调用PacketInstallDriver()函数安装驱动程序KeyRes=RegOpenKeyExA(HKEY_LO

5、CAL_MACHINE,NpfServiceLocation,0,KEY_READ,&PathKey);if(KeyRes!=ERROR_SUCCESS){//NPF注册表的键值不存在,调用PacketInstallDriver()函数Result=PacketInstallDriver();}else{//NPF注册表的键值已经存在,驱动已经安装Result=TRUE;RegCloseKey(PathKey);}if(Result){//驱动已经存在,检查NPF服务是否正在运行//打开NPF服务svcHandle=Open

6、ServiceA(scmHandle,NpfDriverName,SERVICE_START

7、SERVICE_QUERY_STATUS);if(svcHandle!=NULL){//获得服务状态QuerySStat=QueryServiceStatus(svcHandle,&SStat);if(!QuerySStat

8、

9、SStat.dwCurrentState!=SERVICE_RUNNING){//获得服务状态失败或驱动NPF没有运行,启动NPF服务if(StartService(svcHandle,0,NULL)==0)

10、{//如果不是服务正在运行或服务已经存在的状态,//就处理错误,函数返回NULLerror=GetLastError();if(error!=ERROR_SERVICE_ALREADY_RUNNING&&error!=ERROR_ALREADY_EXISTS){//处理错误,函数返回NULL…returnNULL;}}}//驱动NPF已正常运行,关闭服务控制管理器的句柄CloseServiceHandle(svcHandle);svcHandle=NULL;}else{//打开NPF服务失败error=GetLastErro

11、r();SetLastError(error);}}else{if(KeyRes!=ERROR_SUCCESS){//第一次安装驱动程序失败,并且NPF注册表的键值不存在//再次安装驱动Result=PacketInstallDriver();}elseResult=TRUE;if(Res

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。