]、。·ˉˇ¨〃々—~‖…’”〕〉》」』〗】∶!"'),.:;?]`
EXPORTS NPGetCaps @13
EXPORTS NPValidDevice @42
EXPORTS NPLogon @43
EXPORTS NPLogoff @44
实现这几个函数。在系统中注册NP,一切OK。需要VXD??
95DDK中有,自己看吧。
呵呵,商业秘密?无所谓,本来就不是什么高深的技术。
这样做的程序很多。比如国外有个共享软件叫sntry98什么的,就是这么做的。
当然,我自己的软件也是这么做的。无论什么情况都应该先考虑与现有系统的结合。
既然系统支持为何不使用呢?
回复人:DealerJ(2000-10-11 9:13:00) 得0分
lovelinf,你好!
没有亲自尝试的事情对谁都不会是轻易的。
我做过所以知道,因此也没什么大不了的。
我以为程序员水平的高下并不在于掌握一点别人不知道的内幕
技术而看似高人一筹。
如果是对技术感兴趣自己研究倒没什么,可是如果是出于商业目的而作些多余
动作就让人感觉不爽了。因为北大青鸟曾跟我要一段代码。一边利诱一边又说
几十行代码没什么云云,让人feel bad。
/****************************************************************************
*
* FILE: MYNPCAPS.C
*
****************************************************************************/
#include <windows.h>
#include <netspi.h>
SPIENTRY NPGetCaps ( DWORD Index )
{
OutputDebugString(" MYNP NPGetCaps--->");
switch ( Index )
{
case WNNC_SPEC_VERSION:
OutputDebugString("Spec version\n");
return 0x00040001;
case WNNC_NET_TYPE:
OutputDebugString("net type\n");
return WNNC_NET_LANMAN;
case WNNC_DRIVER_VERSION:
OutputDebugString("Driver version\n");
return 0x00010000;
case WNNC_USER:
OutputDebugString("User \n");
return WNNC_USR_GETUSER | 0;
case WNNC_CONNECTION:
OutputDebugString("connection\n");
return WNNC_CON_ADDCONNECTION |
WNNC_CON_CANCELCONNECTION |
WNNC_CON_GETCONNECTIONS |
WNNC_CON_GETPERFORMANCE | 0;
case WNNC_DIALOG:
OutputDebugString("Dialog\n");
return WNNC_DLG_FORMATNETWORKNAME |
WNNC_DLG_GETRESOURCEPARENT |
WNNC_DLG_GETRESOURCEINFORMATION | 0;
case WNNC_ENUMERATION:
OutputDebugString("Enumeration\n");
return 0;
return WNNC_ENUM_GLOBAL |
WNNC_ENUM_LOCAL |
WNNC_ENUM_CONTEXT |0;
case WNNC_START:
OutputDebugString("Start\n");
return WNNC_START_DONE;
case WNNC_RESOURCE:
OutputDebugString("Resource\n");
return 0;
case WNNC_AUTHENTICATION:
OutputDebugString("Authentication\n");
return WNNC_AUTH_LOGON |
WNNC_AUTH_LOGOFF |
WNNC_AUTH_GETHOMEDIRECTORY |
WNNC_AUTH_GETPOLICYPATH |0;
default:
{
char buf[100];
wsprintf(buf,"Default %d \n",Index);
OutputDebugString(buf);
return 0;
}
}
}
/****************************************************************************
*
* FILE: MYNPCONN.C
*
*
****************************************************************************/
#include <windows.h>
#include <netspi.h>
SPIENTRY NPAddConnection( HWND hwndOwner,
LPNETRESOURCE lpNetResource,
LPTSTR lpUserID,
LPTSTR lpPassword,
DWORD dwFlags,
LPTSTR lpAccessName,
LPDWORD lpBufferSize,
LPDWORD lpResult)
{
return WN_SUCCESS;
OutputDebugString("MYNP NPAddconnection");
}
SPIENTRY NPCancelConnection( LPTSTR lpName,
BOOL fForce,
DWORD dwFlags)
{
return WN_SUCCESS;
OutputDebugString("MYNP NPCancelConnection\n");
}
SPIENTRY NPGetConnection( LPTSTR lpLocalName,
LPTSTR lpRemoteName,
LPDWORD lpBufferSize )
{
char buf[100];
OutputDebugString("MYNP NPGetConnection\n");
wsprintf(buf,"%s %s\n", lpLocalName, lpRemoteName );
OutputDebugString(buf);
return WN_NO_NETWORK;
}
/****************************************************************************
*
* PROGRAM: CON_SAMP.C
*
* FILE: Simple console application for calling CVXDSAMP (C VxD Sample) VxD
*
****************************************************************************/
#include <windows.h>
#include <netspi.h>
SPIENTRY NPOpenEnum ( DWORD dwScope, DWORD dwType,
DWORD dwUsage,
LPNETRESOURCE lpNetResource,
LPHANDLE lphEnum )
{
OutputDebugString("MYNP: NPOpenEnum\n");
return WN_SUCCESS;
}
SPIENTRY NPCloseEnum( HANDLE lpEnum )
{
OutputDebugString("MYNP: NPCloseEnum\n");
return WN_SUCCESS;
}
SPIENTRY NPEnumResource ( HANDLE hEnum,
LPDWORD lpcCount,
LPVOID lpBuffer,
DWORD cbBuffer,
LPDWORD lpcbFree
)
{
OutputDebugString("MYNP: NPEnumResources\n");
return WN_SUCCESS;
}
/****************************************************************************
*
* FILE: MYNPLOG.C
*
****************************************************************************/
#include <windows.h>
#include <netspi.h>
#include <pwdspi.h>
#include <memory.h>
SPIENTRY NPLogon( HWND hwndOwner,
LPLOGONINFO lpAuthentInfo,
LPLOGONINFO lpPreviousAuthentInfo,
LPTSTR lpLogonScript,
DWORD dwBufferSize,
DWORD dwFlags )
{
char buf[100];
char Wrongpassword = 0;
wsprintf ( buf, "MYNP NPLOGON dwflags = %d ", dwFlags );
OutputDebugString ( buf );
switch ( dwFlags )
{
case LOGON_PRIMARY:
/* Copy the uer credentials into the LOGONINFO structure
This information will be passed back to MPR which will be passed as input to all the
subsequent network providers.
*/
strcpy( lpAuthentInfo->lpUsername, "murtuzan");
strcpy( lpAuthentInfo->lpPassword, "Jmn2837jmn");
lpAuthentInfo->cbUsername= 8 * sizeof(BYTE);
lpAuthentInfo->cbPassword = 10 * sizeof(BYTE);
Wrongpassword = 1;
OutputDebugString( " LOGON_PRIMARY \n");
break;
case LOGON_DONE:
{
OutputDebugString(" LOGON_DONE \n");
}
break;
case LOGON_MUST_VALIDATE:
OutputDebugString("LOGON_MUST_VALIDATE\n");
break;
default:
OutputDebugString ( " Default flags\n");
}
if (!Wrongpassword )
return WN_SUCCESS;
/* returning success will result in MPR sending the user info to other network
providers
*/
else
return WN_NOT_VALIDATED;
/* user credentials not validated */
}
SPIENTRY NPLogoff( HWND hwndOwner,
LPLOGONINFO lpAuthentInfo,
DWORD dwReason)
{
OutputDebugString("MYNP NPLogoff\n");
return WN_SUCCESS;
}
SPIENTRY NPGetUser( LPTSTR lpName,
LPTSTR lpUserID,
LPDWORD lpBufferSize)
{
OutputDebugString("MYNP NPGetuser\n");
return WN_SUCCESS;
}