ReadMe.txt
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
Copyright (C) 1998 Microsoft Corporation. All Rights Reserved.
Author: Frank K. Li - Microsoft Developer Support
Files:
======
The RnrCs application uses the following files
File Description
------------------------------------------------------
ReadMe.txt Readme file for the RnrCs application
RnrCs.cpp source code file
Makefile Nmake file
Winsock 2 RnR API Used:
=======================
WSAInstallServiceClass
WSASetService
WSAEnumNameSpaceProviders
WSALookupServiceBegin
WSALookupServiceNext
WSALookupServiceEnd
Abstract:
=========
In a traditional Winsock 1.1 client/server program, the server
binds itself to a well known port of a particular protocol family.
Then, any client can talk to the server only if it knows the server's
addressing infomation which includes the server's address, protocol,
and socket type.
The Winsock 2 Name Resolution and Registration (RnR) provides a unified
API set for client to search for registered services without having any
prior knowledge of addressing information. Basically, a server wants to
register its existence within one or more name spaces through a friendly
service instance name and associate itself to a service class GUID.
Client application will be able to find the addressing
information of a server by the friendly name and class GUID
in a name space.
In this sample, the server program converts the user supplied Type Id
into a service class GUID by SVCID_NETWARE() macro. (You can also
generate your own service class GUID using uuidgen.exe or guidgen.exe
and distribute this GUID to your client program.) It then checks the
availability of various kind of name space providers and install this
service class by filling out the relevant service class information
with NS_NTDS (NT Directory Service name space provider available in Windows 2000)
and/or NS_SAP (Service Advertising Protocol name space provider available
both in Windows NT 4 and Windows 2000) name spaces whenever they are available.
If NS_NTDS has been installed, it binds itself to UDP protocol addresses
and a port number dynamically chosen by the system. If NS_SAP has been
installed, it also binds itself to a IPX protocol address and a socket
number chosen by the system. After filling out its bound socket addresses,
it advertises its availability through a service name supplied by a user.
For each bound non-blocking socket addresses, the server tries to
receive any datagram sent by any client and print out the client's socket
addressing information if a datagram is received.
When a user hits CTRL-C, the server program will unregister this
service instance, remove the service class and close all sockets.
The client program converts the user supplied Type Id into a service
class GUID by SVCID_NETWARE() macro, such that it can find any SAP
predefined services (e.g. file server Type Id is 4) or the corresponding
advertised server program. If the user supplies a service name, it
will just look up the service with the same service name and Type Id.
If the user supplies a wild card "*" for the service name, it will try
to look up all registered services with the same
Type Id. For each service program found, it prints out the socket addressing
information of the service program and sends a message to it.
NOTE:
(1) To exploit the NS_NTDS name space (Active Directory):
(a) client and server machines should have Windows 2000 or later installed and both
machines should be members of a Windows 2000 domain.
(b) If the server program is running in the security context of Domain Admins,
you should have no problem in publishing the service.
(c) If the server program is running in the context of a Domain Users, Domain
Admins have to modify the access control list (ACL) on the WinsockServices
container:
From the Active Directory Users and Computers MMC snap-in, access the View menu
and select Advanced Features. Under the System container is another container
listed as WinsockServices. Open the WinsockServices container,
right-click Properties->Security, add your desired user/group with Full Control
permission. Make sure this applies onto "this object and all child objects"
by clicking the "Advanced..." button and "View/Edit..." your selected permission
entry.
(2) To advertise in the SAP name space, server program machine should have
NWLink IPX/SPX Compatible Transport protocol and SAP Agent service installed.
(3) To lookup servers in the SAP name space, client program machine should have
NWLink IPX/SPX Compatible Transport protocol installed.
(4) When the server is running on a mutihomed machine, the SAP name space
provider will only make the first registered ipx address available, other
ipx addresses are ignored.
Supported Platforms:
====================
Windows 2000 Beta 2 or later, Windows NT 4.0 SP3 or later.
On NT4, only the SAP name space is available. IPX/SPX compatible transport protocol
is required. SAP Agent service is required on the server side machine.
On Windows 2000, please refer to NOTE (1) above for details in configuration of
NS_NTDS name space.
Building this sample:
=====================
Run nmake to use the supplied makefile or create a VC project for
RnrCs. When creating a project in VC, remember to link with the
Winsock 2 library ws2_32.lib. Also, use the
headers and libs from the April 98 Platform SDK or later.
Usage:
======
RnrCs
-c (running this program as a client)
-s (running this program as a server, default is running as a server)
-t server_type_id (default is: 200)
-n server_instance_name (default is: MyServer)
-p provider_name (default is: NS_ALL)
(e.g. NS_NTDS, NS_SAP, NS_ALL)
Examples:
RnrCs -s -n MyServer ....Run as server /w server_type of 48, service
instance name of MyServer
RnrCs -c -n * ..............Run as client and find all servers /w server_type_id
of 200 from all available name spaces
RnrCs -c -n * -p NS_SAP ....Run as client and find all servers /w server_type_id
of 200 from the SAP name space
RnrCs -c -t 4 -n * .........Run as client and find all SAP file servers
Hit Ctrl-C to quit the server program
Examples:
=========
-running RnrCs as a server on a Windows 2000 machine in domainA with server
instance name of "NT5HostBhelloSrv" and type id of "200"
C:\>rnrcs -s -n NT5HostBhelloSrv
Installing ServiceClassName: NT5HostBhelloSrv Type 200
NTDS name space class installation
SAP name space class installation
HostName: DEMO5DC
IP addresses bound...
187.91.239.60:3352
IPX address bound...
9D36B800.00C04FB9D78C:4170
Advertise server of instance name: NT5HostBhelloSrv ...
Wait for client talking to me, hit Ctrl-C to terminate...
received: [A message from the client: NT5HostnameC : 9D36B800.00AA00A21FF1:4636]
received: [A message from the client: NT5HostnameC : 187.91.186.182:2363]
-running RnrCs as a server on a NT4 machine with server instance name of
"NT4HostAhelloSrv" and type id of "200"
C:\>rnrcs -s -n NT4HostAhelloSrv
Installing ServiceClassName: NT4HostAhelloSrv Type 200
SAP name space class installation
IPX address bound...
9D36B800.00A0C9A55DC9:5DB0
Advertise server of instance name: NT4HostAhelloSrv ...
Wait for client talking to me, hit Ctrl-C to terminate...
received: [A message from the client: NT5HostnameC : 9D36B800.00AA00A21FF1:4638]
-running RnrCs as a client on a Windows 2000 machine in domainA to find servers of type id "200"
C:\>rnrcs -c -n *
Performing Query for service (type, name) = (200, *) . . .
Name[0]: NT5HostBhelloSrv 9D36B800.00C04FB9D78C:4170
send a message to the peer...
Name[1]: NT5HostBhelloSrv 187.91.239.60:3352
send a message to the peer...
Name[0]: NT4HOSTAHELLOSRV 9D36B800.00A0C9A55DC9:5DB0
send a message to the peer...
No more matches.
-running RnrCs as a client to query SAP file servers in the network
C:\>rnrcs -c -n * -t 4 -p NS_SAP
Performing Query for service (type, name) = (4, *) . . .
Name[0]: ITSNW 003F9578.000000000001:0451
Name[0]: LCMAX 0A65AFFF.000000000001:0451
Name[0]: NC_NW410 3401AA5C.000000000001:0451
Name[0]: TSUNAMI 310FC01C.000000000001:0451
Name[0]: HKATZ3_NW 34F1D09E.000000000001:0451
Name[0]: GRANDMASTER_FPNW 9D396800.00C04FB67306:0451
No more matches.