/*
 *  LCRpc.idl
 *
 *  Author: BreenH
 *
 *  The RPC interface to the licensing core.
 */

/*
 *  LCRPC Interface Context Handle
 */

typedef [context_handle] void *LCRPC_HANDLE;

/*
 *  Create some constants in the generated header. Note that the strings are
 *  processed twice, therefore any "\" character, which should show up in the
 *  header as "\\", needs to be written here as "\\\\".
 */

cpp_quote("//")
cpp_quote("//  Constants")
cpp_quote("//")
cpp_quote("")
cpp_quote("#define LC_RPC_UUID L\"2f59a331-bf7d-48cb-9e5c-7c090d76e8b8\"")
cpp_quote("#define LC_RPC_LRPC_EP L\"LcRpc\"")
cpp_quote("#define LC_RPC_NP_EP L\"\\\\pipe\\\\TermSrv_Licensing_Core\"")
cpp_quote("#define LC_RPC_MAX_THREADS 4")

/*
 *  LCRPC Interface
 */

[
    uuid(2f59a331-bf7d-48cb-9e5c-7c090d76e8b8),
    version(1.0),
    pointer_default(unique),
	endpoint("ncalrpc:[LcRpc]", "ncacn_np:[\\pipe\\TermSrv_Licensing_Core]")
]

interface LCRPC
{
    //
    //  To include headers into the interface, it is necessary to include
    //  through a separate IDL file.
    //

    import "lcimport.idl";

    //
    //  RPC Open and Close Server Functions
    //

    BOOLEAN
    RpcLicensingOpenServer(
        [in] handle_t hBinding,
        [out] LCRPC_HANDLE *phServer,
        [out, ref] PLONG pStatus
        );

    void
    RpcLicensingCloseServer(
        [in, out] LCRPC_HANDLE *phServer
        );

    //
    //  Policy Loading and Activation Functions
    //

    BOOLEAN
    RpcLicensingLoadPolicy(
        [in] LCRPC_HANDLE hServer,
        [in] ULONG ulPolicyId,
        [out, ref] PLONG pStatus
        );

    BOOLEAN
    RpcLicensingUnloadPolicy(
        [in] LCRPC_HANDLE hServer,
        [in] ULONG ulPolicyId,
        [out, ref] PLONG pStatus
        );

    LONG
    RpcLicensingSetPolicy(
        [in] LCRPC_HANDLE hServer,
        [in] ULONG ulPolicyId,
        [out, ref] PLONG pNewPolicyStatus
        );

    //
    //  Administrative Functions
    //

    BOOLEAN
    RpcLicensingGetAvailablePolicyIds(
        [in] LCRPC_HANDLE hServer,
        [out, size_is(,*pcPolicies)] PULONG *ppulPolicyIds,
        [out, ref] PULONG pcPolicies,
        [out, ref] PLONG pStatus
        );

    BOOLEAN
    RpcLicensingGetPolicy(
        [in] LCRPC_HANDLE hServer,
        [out, ref] PULONG pulPolicyId,
        [out, ref] PLONG pStatus
        );

    BOOLEAN
    RpcLicensingGetPolicyInformation(
        [in] LCRPC_HANDLE hServer,
        [in] ULONG ulPolicyId,
        [in, out, ref] PULONG pulVersion,
        [out, size_is(,*pcbPolicyInfo)] PCHAR *ppPolicyInfo,
        [in, out, ref] PULONG pcbPolicyInfo,
        [out, ref] PLONG pStatus
        );

    BOOLEAN
    RpcLicensingDeactivateCurrentPolicy(
        [in] LCRPC_HANDLE hServer,
        [out, ref] PLONG pStatus
        );
}

