Platform SDK: Active Directory, ADSI, and Directory Services

Example Code for Removing the RnR Connection Point

The following function is used by the example Winsock service above to unregister the RnR connection point for the service.

/*
** Simple Winsock Service
*/
#include <winsock2.h>
#include <stdio.h>
 
//{A9033BC1-ECA4-11cf-A054-00AA006C33ED}
static GUID SVCID_EXAMPLE_SERVICE = 
{ 0xa9033bc1, 0xeca4, 0x11cf, { 0xa0, 0x54, 0x0, 0xaa, 0x0, 0x6c, 0x33, 0xed } };
 
static WCHAR    ServiceInstanceName[] = L"Example Service Instance";
static WCHAR    ServiceInstanceComment[] = L"ExampleService instance registered in the directory service through RnR";
 
INT 
serverUnregister(SOCKADDR * sa)
{
    DWORD               ret;
    WSAVERSION          Version;
    WSAQUERYSET         QuerySet;
    CSADDR_INFO         CSAddrInfo[1];
    SOCKADDR            sa_local;
    
    memset(&QuerySet,0,sizeof(QuerySet));
    memset(&CSAddrInfo,0,sizeof(CSAddrInfo));
    memset(&sa_local,0,sizeof(SOCKADDR));
    sa_local.sa_family = AF_INET;
 
    //Build the CSAddrInfo structure to contain address
    //information. This is what clients will use to make a connection
    //
    //Note that the LocalAddr is zeroed out because
    //dynamically assigned port numbers are used.
    //
    CSAddrInfo[0].LocalAddr.iSockaddrLength = sizeof( SOCKADDR );
    CSAddrInfo[0].LocalAddr.lpSockaddr = &sa_local;
    CSAddrInfo[0].RemoteAddr.iSockaddrLength = sizeof( SOCKADDR );
    CSAddrInfo[0].RemoteAddr.lpSockaddr = sa;
    CSAddrInfo[0].iSocketType = SOCK_STREAM;
    CSAddrInfo[0].iProtocol = PF_INET;
 
    QuerySet.dwSize = sizeof( WSAQUERYSET );
    QuerySet.lpServiceClassId = &SVCID_EXAMPLE_SERVICE;
    QuerySet.lpszServiceInstanceName = ServiceInstanceName;
    QuerySet.lpszComment = ServiceInstanceComment;
    QuerySet.lpVersion = &Version;
    QuerySet.lpVersion->dwVersion = 2;
    QuerySet.lpVersion->ecHow = COMP_NOTLESS;
    QuerySet.dwNameSpace = NS_NTDS;
    QuerySet.dwNumberOfCsAddrs = 1;
    QuerySet.lpcsaBuffer = CSAddrInfo;
 
    ret = WSASetService( &QuerySet,
                         RNRSERVICE_DEREGISTER,
                         SERVICE_MULTIPLE );
 
    return( ret );
 
}