README.TXT
Description: 
 
This sample demonstrates how a special DLL may be created to allow an  
administrator to exercise additional customized control over connection 
acceptance and IP address assignment for dialin users connecting to an 
NT Dial-Up Server/Router.  The server is configured via the registry  
to use the special DLL (or DLL's), and if the DLL(s) are not present 
the Dial-Up Server/Router will fail to start, and an error will be logged 
in the server's eventlog. 
 
This sample DLL exports the following API's 
 
MprAdminAcceptNewConnection 
MprAdminConnectionHangupNotification 
 
MprAdminAcceptNewLink 
MprAdminLinkHangupNotification 
 
MprAdminGetIpAddressForUser 
MprAdminReleaseIpAddress 
 
 
Platform:  NT 5.0**  
  ** or NT 4.0 + "Routing and Remote Access" add-on, which is available as a  
     free download from www.microsoft.com 
 
 
Source code: 
admindll.c 
 
 
Build instructions: 
TBD 
 
 
Requirments:  
 
NT Server running Dial-Up Server/Router, configured with TCP/IP and dialin 
ports.  The dialin ports can be any valid media (e.g. modem, ISDN, PPTP,  
etc), as long as a user can make a RAS connection to the server with TCP/IP. 
 
 
Usage Instructions: 
 
To configure the Dial-Up Server/Router to use a custom admin DLL, the  
registry must be edited as follows for each custom DLL: 
 
HKEY_LOCAL_MACHINE 
SOFTWARE 
MICROSOFT 
RAS 
 
1. Add Key --> "<DllName>"  (e.g. "AdminDll") 
 
2. Under "<DllName>" key, add a String Value called "DllPath" 
 
3. Set the value of DllPath = "<full path to the dll>"  
   e.g. "C:\TEST\ADMINDLL.DLL" 
 
4. Restart the server to begin using the custom DLL(s). 
 
When dialin users connect, RAS will call the appropriate API's exported by 
the custom DLL, allowing customized control over connection and link  
acceptance, and IP address assignment. 
 
 
 
Behavior of the Sample Custom DLL 
 
This sample DLL keeps a small database of 256 IP addresses, and will dole 
out an IP address when the request comes in. It will mark the assigned IP 
address as used.  In addition this database will store the user name and 
port name.  When MprAdminReleaseIpAddress is called, it will check the port 
name and username. If it matches then it will free up the IP address. 
 
MprAdminAcceptNewConnection keeps a small database of the connected users 
and their statistics and parameter information.  During 
MprAdminConnectionHangupNotification, it will match the passed structures 
with the stored information.  If the information doesn't match then the DLL 
will generate an error. MprAdminAcceptNewConnection will only accept a 
connection if the username is not "Administrator" and the account has no 
callback privileges.  Also, this DLL will only allow a user to connect  
with two or fewer links when making a Multilink connection.  This was an 
arbitararily chosen scheme for demonstration purposes. The DLL developer  
can keep their own database and let users connect based on time,  
privliges, etc.   
 
When the sample DLL's exported API are called, results and information are 
written to debug output.  If a kernel debugger is not attached, you can  
attach your debugger to the MPROUTER.EXE process to observe the debug output.