#include #include #include #include #include #include #include #include #include #include #include #include /***************************************************************************** * * 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 - Set licensing mode\n" L"\t-g - Get licensing mode\n" L"\t-l - List available licensing modes\n" L"\t-i - 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 User\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; }