/*++ Copyright (c) 1997-2000 Microsoft Corporation Module Name: rndilslk.cpp Abstract: This module contains code to look up ILS in NTDS. --*/ #include "stdafx.h" #include /////////////////////////////////////////////////////////////////////////////// // // // Global constants // // // /////////////////////////////////////////////////////////////////////////////// // {C9F17940-79A7-11d1-B008-00C04FC31FEE} DEFINE_GUID(CLSID_ILSServicClass, 0xc9f17940, 0x79a7, 0x11d1, 0xb0, 0x8, 0x0, 0xc0, 0x4f, 0xc3, 0x1f, 0xee); #define BUFFSIZE 3000 int LookupILSServiceBegin( HANDLE * pHandle ) /*++ Routine Description: Begin ILS service enumeration. Arguments: pHandle - the handle of the enumerator. Return Value: Wisock error codes. --*/ { WSAVERSION Version; AFPROTOCOLS lpAfpProtocols[1]; WSAQUERYSET Query; if (IsBadWritePtr(pHandle, sizeof(HANDLE *))) { return ERROR_INVALID_PARAMETER; } ZeroMemory(&Query, sizeof(WSAQUERYSET)); Query.dwNumberOfProtocols = 1; lpAfpProtocols[0].iAddressFamily = AF_INET; lpAfpProtocols[0].iProtocol = PF_INET; Query.lpafpProtocols = lpAfpProtocols; Query.lpszServiceInstanceName = L"*"; Query.dwNameSpace = NS_NTDS; Query.dwSize = sizeof(Query); Query.lpServiceClassId = (GUID *)&CLSID_ILSServicClass; if (WSALookupServiceBegin( &Query, LUP_RETURN_ALL, pHandle ) == SOCKET_ERROR ) { return WSAGetLastError(); } return NOERROR; } int LookupILSServiceNext( HANDLE Handle, TCHAR * pBuf, DWORD * pdwBufSize, WORD * pwPort ) /*++ Routine Description: look up the next ILS server. Arguments: Handle - The handle of the enumeration. pBuf - A pointer to a buffer of TCHARs that will store the DNS name of the ILS server. pdwBufSize - The size of the buffer. pwPort - The port that the ILS server is using. Return Value: Wisock error codes. --*/ { TCHAR buffer[BUFFSIZE]; DWORD dwSize = BUFFSIZE; LPWSAQUERYSET lpResult = (LPWSAQUERYSET)buffer; LPCSADDR_INFO lpCSAddrInfo; LPSOCKADDR lpSocketAddress; if (WSALookupServiceNext(Handle, 0, &dwSize, lpResult) == SOCKET_ERROR) { return WSAGetLastError(); } lpCSAddrInfo = lpResult->lpcsaBuffer; if (IsBadReadPtr(lpCSAddrInfo, sizeof(CSADDR_INFO))) { return ERROR_BAD_FORMAT; } lpSocketAddress = lpCSAddrInfo->RemoteAddr.lpSockaddr; if (IsBadReadPtr(lpSocketAddress, sizeof(SOCKADDR))) { return ERROR_BAD_FORMAT; } *pwPort = ((struct sockaddr_in*) lpSocketAddress->sa_data)->sin_port; lstrcpyn(pBuf, lpResult->lpszServiceInstanceName, *pdwBufSize); *pdwBufSize = lstrlen(pBuf); return NOERROR; } int LookupILSServiceEnd( HANDLE Handle ) /*++ Routine Description: Finish the ils service enumerator. Arguments: Handle - the handle of the enumerator. Return Value: Wisock error codes. --*/ { if (WSALookupServiceEnd(Handle) == SOCKET_ERROR) { return WSAGetLastError(); } return NOERROR; }