LOGON描述

作者:陆麟
转载请征得作者同意.如有BUG,请汇报.
2000.3.4



NT和9X都有登录到网络,获取网络资源的能力.但是他们的实现却是完全不同的.今天就讲点登录吧.
    首先,很多朋友并不知道在9X如何通过编程方法使用户登录到网络上.的确,9X的LOGON文档十分难找.在95DDK里,而且深深隐藏.难以发现.
    WIN9X的网络功能其实比NT强.这一点在9X的网络架构上能够很清晰地看到.WIN9X的网络分层很明确.应用程序调用WNetLogon/WNetAddConnection/WNetAddConnection2/WNetAddConnection3来使用户登录到网络.当该函数返回时,用户已经登录到网络上,或者报错.当该函数被调用时,就进入了MPR.
    MPR是MULTIPLE PROVIDER ROUTER.也是应用程序API的分界线.而MPR将负责调用各种NP(NETWORK PROVIDER,网络联接DLL).NP将自主选择通过IFS MANAGER或者饶过IFS MANAGER进行网络验证.这就是说,网络文件的运作可以脱离IFS MANAGER的监控.这也就是IFS HOOK的局限所在.IFS HOOK并不能保证监控网络上的文件操作,除非被监控的网络资源是通过IFS MANAGER层调用网络文件系统驱动程序实现的.:) 当NP被CALL时,NP根据自己定义的网络协议和网络的另外一端对话,并决定操作是否成功.本文只讲述登录,其他就略过了.NP的登录CALL为
DWORD NPLogon(
HWND hwndOwner,
LPLOGONINFO lpAuthentInfo,
LPLOGONINFO lpPreviousAuthentInfo,
LPTSTR lpLogonScript,
DWORD dwBufferSize,
DWORD dwFlags);
该函数的引出序号必须为43.因为MPR根据序号调用NP.该函数在NP为基本网络提供者时调用.作为登录基本网络的接口.等NP返回登录成功,就可以根据服务方的授权访问网络资源了.当NP不是基本网络提供者时,NP同样可以要求额外的验证.MPR对于验证用户身份提供统一的界面.当然,NP本身也可以提供自己的界面.这是根据程序员的意图决定的.:)在MPR,显示登录界面的服务函数为:
DWORD NPSAuthenticationDialog (LPAUTHDLGSTRUCT lpAuthDlgStruct);
typedef struct _AUTHDLGSTRUCT{
    DWORD cbStructure;
    HWND hwndOwner;
    LPCSTR lpResource;
    LPTSTR lpUsername;
    DWORD cbUsername;
    LPTSTR lpPassword;
    DWORD cbPassword;
    LPTSTR lpOrgUnit;
    DWORD cbOrgUnit;
    LPCSTR lpOUTitle;
    LPCSTR lpExplainText;
    LPCSTR lpDefaultUserName;
    DWORD dwFlags;
} AUTHDLGSTRUCT. *LPAUTHDLGSTRUCT;
这里我们可以看到,通过调用该函数,NP获得了用户名和口令用于验证.:)然后,NP根据自己的网络协议进行验证活动.当NP进行网络数据传输时,代码就进入了协议层.:)我们将不讨论下去了.:)
我们可以看到,9X的本地网登录还是简洁的.
9X对于远程网络访问在用户层为RASXXX(),而SERVICE层为RNA(REMOTE NETWORK ACCESS)对话管理模块.该层我暂时没有研究透,还是少说为妙.
好了,今天先讲到这里,过几天再将WIN NT的LOGON.请大家瞪大眼睛看啊. :D