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.
182 lines
4.1 KiB
182 lines
4.1 KiB
/*
|
|
* Util.h
|
|
*
|
|
* Author: BreenH
|
|
*
|
|
* Utility functions for the licensing core and its policies.
|
|
*/
|
|
|
|
/*
|
|
* Includes
|
|
*/
|
|
|
|
#include "precomp.h"
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
#include <lmaccess.h>
|
|
#include <lmerr.h>
|
|
#include <lmapibuf.h>
|
|
#define SECURITY_WIN32
|
|
#include <security.h>
|
|
#include <rpc.h>
|
|
#include <tserrs.h>
|
|
#include "util.h"
|
|
#include "lctrace.h"
|
|
|
|
/*
|
|
* Function Definitions
|
|
*/
|
|
|
|
NTSTATUS
|
|
LsStatusToNtStatus(
|
|
LICENSE_STATUS LsStatus
|
|
)
|
|
{
|
|
NTSTATUS Status;
|
|
|
|
switch (LsStatus)
|
|
{
|
|
case LICENSE_STATUS_OK:
|
|
Status = STATUS_SUCCESS;
|
|
break;
|
|
|
|
case LICENSE_STATUS_OUT_OF_MEMORY:
|
|
Status = STATUS_NO_MEMORY;
|
|
break;
|
|
|
|
case LICENSE_STATUS_INSUFFICIENT_BUFFER:
|
|
Status = STATUS_BUFFER_TOO_SMALL;
|
|
break;
|
|
|
|
case LICENSE_STATUS_INVALID_INPUT:
|
|
Status = STATUS_INVALID_PARAMETER;
|
|
break;
|
|
|
|
case LICENSE_STATUS_NO_LICENSE_SERVER:
|
|
Status = RPC_NT_SERVER_UNAVAILABLE;
|
|
break;
|
|
|
|
case LICENSE_STATUS_CANNOT_UPGRADE_LICENSE:
|
|
case LICENSE_STATUS_NO_LICENSE_ERROR:
|
|
Status = STATUS_LICENSE_VIOLATION;
|
|
break;
|
|
|
|
default:
|
|
Status = STATUS_INTERNAL_ERROR;
|
|
break;
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
|
|
UINT32
|
|
LsStatusToClientError(
|
|
LICENSE_STATUS LsStatus
|
|
)
|
|
{
|
|
UINT32 dwClientError;
|
|
|
|
switch (LsStatus)
|
|
{
|
|
case LICENSE_STATUS_OK:
|
|
dwClientError = TS_ERRINFO_NOERROR;
|
|
break;
|
|
|
|
case LICENSE_STATUS_OUT_OF_MEMORY:
|
|
dwClientError = TS_ERRINFO_OUT_OF_MEMORY;
|
|
break;
|
|
|
|
case LICENSE_STATUS_NO_LICENSE_SERVER:
|
|
dwClientError = TS_ERRINFO_LICENSE_NO_LICENSE_SERVER;
|
|
break;
|
|
|
|
case LICENSE_STATUS_NO_LICENSE_ERROR:
|
|
case LICENSE_STATUS_AUTHENTICATION_ERROR:
|
|
dwClientError = TS_ERRINFO_LICENSE_NO_LICENSE;
|
|
break;
|
|
|
|
case LICENSE_STATUS_INVALID_RESPONSE:
|
|
dwClientError = TS_ERRINFO_LICENSE_BAD_CLIENT_MSG;
|
|
break;
|
|
|
|
case LICENSE_STATUS_INVALID_MAC_DATA:
|
|
dwClientError = TS_ERRINFO_LICENSE_BAD_CLIENT_MSG;
|
|
break;
|
|
|
|
case LICENSE_STATUS_CANNOT_DECODE_LICENSE:
|
|
dwClientError = TS_ERRINFO_LICENSE_BAD_CLIENT_LICENSE;
|
|
break;
|
|
|
|
case LICENSE_STATUS_CANNOT_VERIFY_HWID:
|
|
dwClientError = TS_ERRINFO_LICENSE_HWID_DOESNT_MATCH_LICENSE;
|
|
break;
|
|
|
|
case LICENSE_STATUS_SERVER_ABORT:
|
|
dwClientError = TS_ERRINFO_LICENSE_CANT_FINISH_PROTOCOL;
|
|
break;
|
|
|
|
case LICENSE_STATUS_CLIENT_ABORT:
|
|
dwClientError = TS_ERRINFO_LICENSE_CLIENT_ENDED_PROTOCOL;
|
|
break;
|
|
|
|
case LICENSE_STATUS_CANNOT_UPGRADE_LICENSE:
|
|
dwClientError = TS_ERRINFO_LICENSE_CANT_UPGRADE_LICENSE;
|
|
break;
|
|
|
|
case LICENSE_STATUS_INSUFFICIENT_BUFFER:
|
|
case LICENSE_STATUS_INVALID_INPUT:
|
|
case LICENSE_STATUS_INVALID_SERVER_CONTEXT:
|
|
case LICENSE_STATUS_NO_CERTIFICATE:
|
|
case LICENSE_STATUS_NO_PRIVATE_KEY:
|
|
case LICENSE_STATUS_INVALID_CRYPT_STATE:
|
|
default:
|
|
dwClientError = TS_ERRINFO_LICENSE_INTERNAL;
|
|
break;
|
|
}
|
|
|
|
return dwClientError;
|
|
}
|
|
|
|
UINT32
|
|
NtStatusToClientError(
|
|
NTSTATUS Status
|
|
)
|
|
{
|
|
UINT32 dwClientError;
|
|
|
|
switch (Status)
|
|
{
|
|
case STATUS_SUCCESS:
|
|
dwClientError = TS_ERRINFO_NOERROR;
|
|
break;
|
|
|
|
case STATUS_NO_MEMORY:
|
|
dwClientError = TS_ERRINFO_OUT_OF_MEMORY;
|
|
break;
|
|
|
|
case RPC_NT_SERVER_UNAVAILABLE:
|
|
dwClientError = TS_ERRINFO_LICENSE_NO_LICENSE_SERVER;
|
|
break;
|
|
|
|
case STATUS_LICENSE_VIOLATION:
|
|
dwClientError = TS_ERRINFO_LICENSE_NO_LICENSE;
|
|
break;
|
|
|
|
case STATUS_NET_WRITE_FAULT:
|
|
case STATUS_IO_TIMEOUT:
|
|
dwClientError = TS_ERRINFO_LICENSE_CANT_FINISH_PROTOCOL;
|
|
break;
|
|
|
|
|
|
case STATUS_CTX_CLOSE_PENDING:
|
|
case STATUS_INVALID_PARAMETER:
|
|
case STATUS_BUFFER_TOO_SMALL:
|
|
case STATUS_NO_DATA_DETECTED:
|
|
default:
|
|
dwClientError = TS_ERRINFO_LICENSE_INTERNAL;
|
|
break;
|
|
}
|
|
|
|
return dwClientError;
|
|
}
|