Platform SDK: Active Directory, ADSI, and Directory Services

Example Code for Installing an RnR Service Class

The following program installs an RnR Service class.

#include <winsock2.h>
#include <stdio.h>
 
#define BUFFSIZE 200
 
//{A9033BC1-ECA4-11cf-A054-00AA006C33ED}
static GUID SVCID_EXAMPLE_SERVICE = 
{ 0xa9033bc1, 0xeca4, 0x11cf, { 0xa0, 0x54, 0x0, 0xaa, 0x0, 0x6c, 0x33, 0xed } };
 
HRESULT
main(void) 
{
 
 
//Data structures for initializing Winsock.
 
WSADATA wsData;
WORD    wVer = MAKEWORD(2,2);
 
 
//Data structures for defining and installing a
//Winsock service class.
 
 
WSASERVICECLASSINFO    servinfo;
WSANSCLASSINFO        classinfo[2];
 
 
//Values for initializing the data structures.
 
WCHAR    wszServiceName[]=L"ExampleService";
WCHAR    wszParam1[]    =L"MaxConnections";
WCHAR    wszParam2[]    =L"Timeout";
DWORD    dwConn        = 64;
DWORD    dwTmo        = 1500;
 
//Miscellaneous variables for status, and so on.
 
DWORD   iLen;
WCHAR   buf[BUFFSIZE];
INT    status;
 
//Begin: Init Winsock2
 
status = WSAStartup(wVer,&wsData);
if (status != NO_ERROR)
    return -1;
 
//Set up the service class data structure.
 
servinfo.lpServiceClassId      = &SVCID_EXAMPLE_SERVICE;
servinfo.lpszServiceClassName  = wszServiceName;
servinfo.dwCount               = 2;
servinfo.lpClassInfos          = classinfo;
 
//This service has two items of class-specific data; 
//set these up in the classinfo array.
 
classinfo[0].lpszName       = wszParam1;
classinfo[0].dwNameSpace    = NS_NTDS;
classinfo[0].dwValueType    = REG_DWORD;
classinfo[0].dwValueSize    = sizeof(DWORD);
classinfo[0].lpValue        = &dwConn;
 
classinfo[1].lpszName       = wszParam2;
classinfo[1].dwNameSpace    = NS_NTDS;
classinfo[1].dwValueType    = REG_DWORD;
classinfo[1].dwValueSize    = sizeof(DWORD);
classinfo[1].lpValue        = &dwTmo;
 
status = WSAInstallServiceClass(&servinfo);
if (status != NO_ERROR)
    printf("Install failed with status %d\n",WSAGetLastError());
 
 
//Read the class name back.
 
iLen = BUFFSIZE;
 
//Status = WSAGetServiceClassNameByClassId(&SVCID_EXAMPLE_SERVICE,
//                                         buf,&iLen);
//if (status != NO_ERROR) {
//        printf("GetServiceClassName failed with status %d\n",
//               WSAGetLastError());
//}
 
 
//Free resources and exit.
 
WSACleanup();
return 0;
 
}