专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Windows » amp连接器:在windows95& windows98下如何关闭网络连接 »正文

amp连接器:在windows95& windows98下如何关闭网络连接

来源: 发布时间:星期二, 2008年12月30日 浏览:2次 评论:0
.问题提出:

每当你通过windows95或windows98访问"网上邻居"时,系统自动建立了两
台机器的间网络连接关系,但是在访问结束后,并不自动断开网络连接,
所以有时我们关闭windows系统时,会弹出个对话框,询问是否关闭网络连
接,在回答"yes"后,才真正开始关闭计算机.
员编制系统关闭时,就需要考虑这种情况,虽然sdk提供了关机api:
exitwindowsex和exitwindows,但实际应用中我发现,在指定force关机时
在特定情况下会出问题.所以,必须想办法首先断开网络连接.

2.编程接口:

windows95及windows98提供这方面网络编程接口在svrapi.dll中,利用它
我们可以列举出当前网络连接状态,控制或删除网络连接.windows附件中
netwatch.exe工具就是这样实现.
也许您会问,netapi详细介绍说明在开发工具sdk文档中很详细了,没有必要在
此演示.但是,在查寻了很多资料后,我不得不说:msdn中有关netapi部分说
明是,至少是不完整而且含混不清,可以说,依靠这些文档,你不能实
现全部功能!下面代码是本人自己分析得来,使用后,您会发现正确应用
和文档介绍说明有多么大差距.

3.api声明:

关闭网络连接实现思路方法分两步: 枚举出当前所有网络连接状况; 依次
断开枚举出网络连接.

1.枚举出当前所有网络连接状况:
        依照开发帮助文档,这个api是这样:
        net_api_status netsessionenum(
          lpwstr servername,    
          lpwstr uncclientname,  
          lpwstr username,      
          dword level,          
          lp *bufptr,        
          dword prefmaxlen,      
          lpdword entriesread,  
          lpdword totalentries,  
          lpdword resume_handle  
        );

        但是,实际情况是,在windows95和windows98平台下,
        这样根本就无法连接上库文件.真正api声明应该是:
        dword netsessionenum( lpstr,
                              dword,
                              lp,
                              dword,
                              lpdword,
                              lpdword )
        参数1: null表示枚举本机网络连接
        参数2: 不详.在枚举中是常量0x32.
        参数3: 存放信息缓冲区指针
        参数4: 缓冲区长度
        参数5: 指向返回连接个数
        参数6: 指向总共连接个数
        可见,参数个数完全区别,另外参数意义也发生了变化.

2.依次断开枚举出网络连接:
        还算幸运是,断开网络连接api声明是正确:
        net_api_status netsessiondel(
                  lpwstr servername,    
                  lpwstr uncclientname,  
                  lpwstr username    );
        不过要注意是,第2个和第3个参数内容需要
        从枚举得到缓冲区中去取.具体思路方法参见.

4.源代码:

以下是实现断开网络连接,你可以方便把它们加入到自己项目中
去,而不用和我样浪费时间去研究到底怎样实现网络枚举了.

注:由于本只实际用到了个svrapi.dll中声明,简便期间,我没有
用原有头文件,自己定义下就可以了.

///////////////////////////////////////////////////////////////////
// file:        netclose.h
// version:    1.01

# netbuff_size    0x208

# netsessionenum_profile  ( dword (__stdcall *)        ( lpstr, dword, lp, dword, lpdword, lpdword ) )
# netsessiondel_profile  ( dword (__stdcall *)                                ( lpstr, lpstr, dword ) )
///////////////////////////////////////////////////////////////////
// file:        netclose.cpp
// version:    1.01
///////////////////////////////////////////////////////////////////
// :              bool netcloseall( void )
// parameters:          none
// :              true or false
//
// author:              mr.huang fei
// time:                5/7/1998
// note:                can _disibledevent= false;

                freelibrary( hmod );
        } // loadlibrary(...)
         bret;
}

5.整理总结:

以上是开发过程中点经验,希望对大家有所帮助,有不对地方请谅解并
指出.另外,众所周知microsoft开发文档有相当部分是未公开,这些未
公开信息有时会给我们造成很大困难,在此希望有类似体验开发者
把自己经验写出来,让后来者少走些弯路.

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: