windows-nt/Source/XPSP1/NT/termsrv/license/tlserver/debug/tslicmode/tslicmode.cpp
2020-09-26 16:20:57 +08:00

280 lines
6.4 KiB
C++

#include <windows.h>
#include <shellapi.h>
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <rpc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <crt/io.h>
#include <wincrypt.h>
#include <winsta.h>
#include <license.h>
/*****************************************************************************
*
* MIDL_user_allocate
*
* Handles RPC's allocation of argument data structures
*
* ENTRY:
* Param1 (input/output)
* Comments
*
* EXIT:
* ERROR_SUCCESS - no error
*
****************************************************************************/
extern "C" void __RPC_FAR * __RPC_USER
midl_user_allocate(
size_t Size
)
{
return( LocalAlloc(LMEM_FIXED,Size) );
}
/*****************************************************************************
*
* MIDL_user_free
*
* Handles RPC's de-allocation of argument data structures
*
* ENTRY:
* Param1 (input/output)
* Comments
*
* EXIT:
* ERROR_SUCCESS - no error
*
****************************************************************************/
void __RPC_USER
midl_user_free(
void __RPC_FAR *p
)
{
LocalFree( p );
}
void MyReportError(DWORD errCode)
{
DWORD dwRet;
LPTSTR lpszTemp = NULL;
dwRet=FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
errCode,
LANG_NEUTRAL,
(LPTSTR)&lpszTemp,
0,
NULL);
if(dwRet != 0)
{
_tprintf(_TEXT("Error : %s (%d)\n"), lpszTemp, errCode);
if(lpszTemp)
LocalFree((HLOCAL)lpszTemp);
}
return;
}
void Usage(char * szName)
{
wprintf(L"Usage: %S\n"
L"\t-s <mode> - Set licensing mode\n"
L"\t-g - Get licensing mode\n"
L"\t-l - List available licensing modes\n"
L"\t-i <mode> - Get information about licensing mode\n"
L"\n"
L"\t\t0:\tPersonal Terminal Server\n"
L"\t\t1:\tRemote Administration\n"
L"\t\t2:\tPer Seat\n"
L"\t\t3:\tInternet Connector\n"
L"\t\t4:\tPer Session\n"
,
szName
);
return;
}
int __cdecl main(int argc, char *argv[])
{
DWORD dwStatus;
DWORD dwNewStatus;
BOOL fSet = FALSE;
BOOL fGet = FALSE;
BOOL fList = FALSE;
BOOL fInfo = FALSE;
ULONG ulMode;
HANDLE hServer = NULL;
BOOL fRet;
ULONG *pulPolicyIds = NULL;
ULONG cPolicies;
ULONG ulInfoStructVersion = LCPOLICYINFOTYPE_CURRENT;
LPLCPOLICYINFO_V1W pPolicyInfo = NULL;
if (argc < 2)
{
Usage(argv[0]);
goto cleanup;
}
if ((argv[1][1] == 's') || (argv[1][1] == 'S'))
{
if (argc < 3)
{
Usage(argv[0]);
goto cleanup;
}
ulMode = atol(argv[2]);
fSet = TRUE;
}
else if ((argv[1][1] == 'i') || (argv[1][1] == 'I'))
{
if (argc < 3)
{
Usage(argv[0]);
goto cleanup;
}
ulMode = atol(argv[2]);
fInfo = TRUE;
}
else if ((argv[1][1] == 'g') || (argv[1][1] == 'G'))
{
fGet = TRUE;
}
else if ((argv[1][1] == 'l') || (argv[1][1] == 'L'))
{
fList = TRUE;
}
else
{
Usage(argv[0]);
goto cleanup;
}
hServer = ServerLicensingOpen(NULL);
if (NULL == hServer)
{
wprintf(L"Connect to server failed\n");
MyReportError(GetLastError());
goto cleanup;
}
if (fGet)
{
fRet = ServerLicensingGetPolicy(
hServer,
&ulMode
);
wprintf(L"Get Mode\n");
if (fRet)
{
wprintf(L"Mode: %d\n"
,
ulMode
);
}
else
{
wprintf(L"Failed\n");
MyReportError(GetLastError());
}
}
else if (fList)
{
fRet = ServerLicensingGetAvailablePolicyIds(
hServer,
&pulPolicyIds,
&cPolicies
);
wprintf(L"List Modes\n");
if (fRet)
{
wprintf(L"Modes: \n");
for (ULONG i = 0; i < cPolicies; i++)
{
wprintf(L"%d "
,
pulPolicyIds[i]
);
}
wprintf(L"\n");
MIDL_user_free(pulPolicyIds);
}
else
{
wprintf(L"Failed\n");
MyReportError(GetLastError());
}
}
else if (fSet)
{
dwStatus = ServerLicensingSetPolicy(hServer,
ulMode,
&dwNewStatus);
wprintf(L"Set Mode\n"
L"RPC Status: %d\n"
L"New Mode Status: %d\n"
,
dwStatus,
dwNewStatus
);
if (ERROR_SUCCESS != dwStatus)
MyReportError(dwStatus);
else if (ERROR_SUCCESS != dwNewStatus)
MyReportError(dwNewStatus);
}
else if (fInfo)
{
fRet = ServerLicensingGetPolicyInformation(
hServer,
ulMode,
&ulInfoStructVersion,
(LPLCPOLICYINFOGENERIC *) &pPolicyInfo
);
if (fRet)
{
wprintf(L"Get Mode Info\n"
L"Name: %s\n"
L"Description: %s\n"
,
pPolicyInfo->lpPolicyName,
pPolicyInfo->lpPolicyDescription
);
ServerLicensingFreePolicyInformation((LPLCPOLICYINFOGENERIC *)&pPolicyInfo);
}
else
{
wprintf(L"Failed\n");
MyReportError(GetLastError());
}
}
ServerLicensingClose(hServer);
cleanup:
return 0;
}