108 lines
3.1 KiB
C++
108 lines
3.1 KiB
C++
//+--------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996-1998
|
|
//
|
|
// File: lsclient.cpp
|
|
//
|
|
// Contents: Client's RPC binding routine and Hydra License Server Lookup
|
|
// routine.
|
|
//
|
|
// History: 01-09-98 HueiWang Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <tchar.h>
|
|
#include <rpc.h>
|
|
#include "lsclient.h"
|
|
#include "lscommon.h"
|
|
|
|
//+------------------------------------------------------------------------
|
|
// Function: ConnectToLsServer()
|
|
//
|
|
// Description:
|
|
//
|
|
// Binding to sepecific hydra license server
|
|
//
|
|
// Arguments:
|
|
//
|
|
// szLsServer - Hydra License Server name
|
|
//
|
|
// Return Value:
|
|
//
|
|
// RPC binding handle or NULL if error, use GetLastError() to retrieve
|
|
// error.
|
|
//-------------------------------------------------------------------------
|
|
PCONTEXT_HANDLE
|
|
ConnectLsServer( LPTSTR szLsServer, LPTSTR szProtocol, LPTSTR szEndPoint, DWORD dwAuthLevel )
|
|
{
|
|
LPTSTR szBindingString;
|
|
RPC_BINDING_HANDLE hBinding=NULL;
|
|
RPC_STATUS status;
|
|
PCONTEXT_HANDLE pContext=NULL;
|
|
|
|
status = RpcStringBindingCompose(0,
|
|
szProtocol,
|
|
szLsServer,
|
|
szEndPoint,
|
|
0,
|
|
&szBindingString);
|
|
|
|
if(status!=RPC_S_OK)
|
|
return NULL;
|
|
|
|
status=RpcBindingFromStringBinding( szBindingString, &hBinding);
|
|
RpcStringFree( &szBindingString );
|
|
if(status != RPC_S_OK)
|
|
return NULL;
|
|
|
|
status=RpcBindingSetAuthInfo(hBinding,
|
|
0,
|
|
dwAuthLevel,
|
|
RPC_C_AUTHN_WINNT,
|
|
0,
|
|
0);
|
|
if(status == RPC_S_OK)
|
|
{
|
|
// Obtain context handle from server
|
|
status = LSConnect( hBinding, &pContext );
|
|
}
|
|
|
|
SetLastError((status == RPC_S_OK) ? ERROR_SUCCESS : status);
|
|
return pContext;
|
|
}
|
|
//-------------------------------------------------------------------------
|
|
PCONTEXT_HANDLE
|
|
ConnectToLsServer( LPTSTR szLsServer )
|
|
{
|
|
TCHAR szMachineName[MAX_COMPUTERNAME_LENGTH + 1] ;
|
|
PCONTEXT_HANDLE pContext=NULL;
|
|
DWORD cbMachineName=MAX_COMPUTERNAME_LENGTH;
|
|
|
|
GetComputerName(szMachineName, &cbMachineName);
|
|
if(_tcsicmp(szMachineName, szLsServer) == 0)
|
|
{
|
|
pContext=ConnectLsServer(szLsServer, _TEXT(RPC_PROTOSEQLPC), NULL, RPC_C_AUTHN_LEVEL_DEFAULT);
|
|
if(GetLastError() >= LSERVER_ERROR_BASE)
|
|
{
|
|
return NULL;
|
|
}
|
|
// try to connect with TCP protocol, if local procedure failed
|
|
}
|
|
|
|
if(pContext == NULL)
|
|
{
|
|
pContext=ConnectLsServer(szLsServer, _TEXT(RPC_PROTOSEQNP), _TEXT(LSNAMEPIPE), RPC_C_AUTHN_LEVEL_NONE);
|
|
}
|
|
|
|
return pContext;
|
|
}
|
|
//-------------------------------------------------------------------------
|
|
void
|
|
DisconnectFromServer( PCONTEXT_HANDLE pContext )
|
|
{
|
|
LSDisconnect( &pContext );
|
|
}
|