mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.1 KiB
107 lines
3.1 KiB
//+--------------------------------------------------------------------------
|
|
//
|
|
// 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 );
|
|
}
|