Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

426 lines
9.5 KiB

//+--------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
//
// File: defpol.cpp
//
// Contents: Default policy module
//
// History:
//
//---------------------------------------------------------------------------
#include "pch.cpp"
#include "tlspol.h"
#include "policy.h"
//---------------------------------------------------------------
//
// Default Policy Module Function.
//
//---------------------------------------------------------------
POLICYSTATUS WINAPI
PMInitialize(
DWORD dwLicenseServerVersion, // HIWORD is major, LOWORD is minor
LPCTSTR pszCompanyName,
LPCTSTR pszProductCode,
PDWORD pdwNumProduct,
PPMSUPPORTEDPRODUCT* ppszProduct,
PDWORD pdwErrCode
)
/*++
--*/
{
*pdwNumProduct = 0;
*ppszProduct = NULL;
*pdwErrCode = ERROR_SUCCESS;
return POLICY_SUCCESS;
}
//-------------------------------------------------------
POLICYSTATUS WINAPI
PMReturnLicense(
PMHANDLE hClient,
ULARGE_INTEGER* pLicenseSerialNumber,
PPMLICENSETOBERETURN pLicenseTobeReturn,
PDWORD pdwLicenseStatus,
PDWORD pdwErrCode
)
/*++
++*/
{
//
// default return license is always delete old license
// and return license to license pack
//
*pdwLicenseStatus = LICENSE_RETURN_DELETE;
*pdwErrCode = ERROR_SUCCESS;
return POLICY_SUCCESS;
}
//--------------------------------------------------------------
POLICYSTATUS WINAPI
PMInitializeProduct(
LPCTSTR pszCompanyName,
LPCTSTR pszCHCode,
LPCTSTR pszTLSCode,
PDWORD pdwErrCode
)
/*++
++*/
{
//
// Initialize internal data here
//
*pdwErrCode = ERROR_SUCCESS;
return POLICY_SUCCESS;
}
//--------------------------------------------------------------
POLICYSTATUS WINAPI
PMUnloadProduct(
LPCTSTR pszCompanyName,
LPCTSTR pszCHCode,
LPCTSTR pszTLSCode,
PDWORD pdwErrCode
)
/*++
++*/
{
//
// Free all internal data here
//
*pdwErrCode = ERROR_SUCCESS;
return POLICY_SUCCESS;
}
//--------------------------------------------------------------
void WINAPI
PMTerminate()
/*++
++*/
{
//
// Free internal data here
//
return;
}
//--------------------------------------------------------------
POLICYSTATUS
ProcessLicenseRequest(
PMHANDLE client,
PPMLICENSEREQUEST pbRequest,
PPMLICENSEREQUEST* pbAdjustedRequest,
PDWORD pdwErrCode
)
/*++
++*/
{
POLICYSTATUS dwStatus = POLICY_SUCCESS;
*pbAdjustedRequest = pbRequest;
if(pbRequest->dwLicenseType != LICENSETYPE_LICENSE)
{
dwStatus = POLICY_NOT_SUPPORTED;
*pdwErrCode = TLS_E_NOCONCURRENT;
}
return dwStatus;
}
//--------------------------------------------------------------
POLICYSTATUS
ProcessAllocateRequest(
PMHANDLE client,
DWORD dwSuggestType,
PDWORD pdwKeyPackType,
PDWORD pdwErrCode
)
/*++
Default sequence is always FREE/RETAIL/OPEN/SELECT/TEMPORARY
++*/
{
POLICYSTATUS dwStatus = POLICY_SUCCESS;
switch(dwSuggestType)
{
case LSKEYPACKTYPE_UNKNOWN:
*pdwKeyPackType = LSKEYPACKTYPE_FREE;
break;
case LSKEYPACKTYPE_FREE:
*pdwKeyPackType = LSKEYPACKTYPE_RETAIL;
break;
case LSKEYPACKTYPE_RETAIL:
*pdwKeyPackType = LSKEYPACKTYPE_OPEN;
break;
case LSKEYPACKTYPE_OPEN:
*pdwKeyPackType = LSKEYPACKTYPE_SELECT;
break;
case LSKEYPACKTYPE_SELECT:
//
// No more keypack to look for, instruct license
// server to terminate.
//
*pdwKeyPackType = LSKEYPACKTYPE_UNKNOWN;
break;
default:
//
// Instruct License Server to terminate request
//
*pdwKeyPackType = LSKEYPACKTYPE_UNKNOWN;
}
*pdwErrCode = ERROR_SUCCESS;
return dwStatus;
}
//-------------------------------------------------------------
POLICYSTATUS
ProcessGenLicenses(
PMHANDLE client,
PPMGENERATELICENSE pGenLicense,
PPMCERTEXTENSION *pCertExtension,
PDWORD pdwErrCode
)
/*++
++*/
{
// No policy extension to return.
*pCertExtension = NULL;
*pdwErrCode = ERROR_SUCCESS;
return POLICY_SUCCESS;
}
//--------------------------------------------------------------
POLICYSTATUS
ProcessComplete(
PMHANDLE client,
DWORD dwErrCode,
PDWORD pdwRetCode
)
/*++
++*/
{
*pdwRetCode = ERROR_SUCCESS;
return POLICY_SUCCESS;
}
//--------------------------------------------------------------
POLICYSTATUS WINAPI
PMLicenseRequest(
PMHANDLE client,
DWORD dwProgressCode,
PVOID pbProgressData,
PVOID* pbNewProgressData,
PDWORD pdwErrCode
)
/*++
++*/
{
POLICYSTATUS dwStatus = POLICY_SUCCESS;
switch( dwProgressCode )
{
case REQUEST_NEW:
//
// License Server ask to fine tune the request.
//
dwStatus = ProcessLicenseRequest(
client,
(PPMLICENSEREQUEST) pbProgressData,
(PPMLICENSEREQUEST *) pbNewProgressData,
pdwErrCode
);
break;
case REQUEST_KEYPACKTYPE:
//
// License Server ask for the license pack type
//
dwStatus = ProcessAllocateRequest(
client,
#ifdef _WIN64
PtrToUlong(pbProgressData),
#else
(DWORD) pbProgressData,
#endif
(PDWORD) pbNewProgressData,
pdwErrCode
);
break;
case REQUEST_TEMPORARY:
//
// License Server ask if temporary license should be issued
//
*(BOOL *)pbNewProgressData = TRUE;
*pdwErrCode = ERROR_SUCCESS;
break;
case REQUEST_GENLICENSE:
//
// License Server ask for certificate extension
//
dwStatus = ProcessGenLicenses(
client,
(PPMGENERATELICENSE) pbProgressData,
(PPMCERTEXTENSION *) pbNewProgressData,
pdwErrCode
);
break;
case REQUEST_COMPLETE:
//
// Request complete
//
dwStatus = ProcessComplete(
client,
#ifdef _WIN64
PtrToUlong(pbNewProgressData),
#else
(DWORD) pbNewProgressData,
#endif
pdwErrCode
);
break;
case REQUEST_KEYPACKDESC:
if(pbNewProgressData != NULL)
{
*pbNewProgressData = NULL;
}
// FALL THRU
default:
*pdwErrCode = ERROR_SUCCESS;
dwStatus = POLICY_SUCCESS;
}
return dwStatus;
}
//------------------------------------------------------------------------
POLICYSTATUS
ProcessUpgradeRequest(
PMHANDLE hClient,
PPMUPGRADEREQUEST pUpgrade,
PPMLICENSEREQUEST* pbAdjustedRequest,
PDWORD pdwRetCode
)
/*++
++*/
{
*pdwRetCode = ERROR_SUCCESS;
*pbAdjustedRequest = pUpgrade->pUpgradeRequest;
return POLICY_SUCCESS;
}
//------------------------------------------------------------------------
POLICYSTATUS WINAPI
PMLicenseUpgrade(
PMHANDLE hClient,
DWORD dwProgressCode,
PVOID pbProgressData,
PVOID *ppbReturnData,
PDWORD pdwRetCode
)
/*++
++*/
{
POLICYSTATUS dwStatus = POLICY_SUCCESS;
switch(dwProgressCode)
{
case REQUEST_UPGRADE:
dwStatus = ProcessUpgradeRequest(
hClient,
(PPMUPGRADEREQUEST) pbProgressData,
(PPMLICENSEREQUEST *) ppbReturnData,
pdwRetCode
);
break;
case REQUEST_COMPLETE:
dwStatus = ProcessComplete(
hClient,
#ifdef _WIN64
PtrToUlong(pbProgressData),
#else
(DWORD) (pbProgressData),
#endif
pdwRetCode
);
break;
default:
//assert(FALSE);
*pdwRetCode = ERROR_SUCCESS;
dwStatus = POLICY_SUCCESS;
}
return dwStatus;
}
//------------------------------------------------------------------------
POLICYSTATUS WINAPI
PMRegisterLicensePack(
PMHANDLE hClient,
DWORD dwProgressCode,
PVOID pbProgressData,
PVOID pbProgressReturnData,
PDWORD pdwRetCode
)
/*++
Not supported.
--*/
{
*pdwRetCode = ERROR_INVALID_FUNCTION;
return POLICY_NOT_SUPPORTED;
}