////////////////////////////////////////////////////////////
//
// Copyright (c) Microsoft Corporation.
//
// SYNOPSIS
//
//    IDL source for interaction with certificate relying
//    parties.
//
////////////////////////////////////////////////////////////

#ifndef NAPCERTRELYINGPARTY_IDL
#define NAPCERTRELYINGPARTY_IDL

import "NapTypes.idl";
import "unknwn.idl";

cpp_quote("#include <wincrypt.h>")
cpp_quote("static const UINT32 NapAfwZonePropId = CERT_FIRST_USER_PROP_ID;")
cpp_quote("static const UINT32 NapAfwProtectionLevelPropId = CERT_FIRST_USER_PROP_ID + 1;")

// Certificate relying parties must use this interface to 
// communicate with the NapAgent.
//
[object, 
uuid(62c02ffc-4c77-4158-8754-782d5b4ee66e), 
pointer_default(unique)]
interface INapCertRelyingParty : IUnknown
{
   // Subscribe to an already registered HCS server
   //
   // Parameters:-
   // id : id of the subscriber
   // reserved : should be NULL.
   // subscriberName : name of the subscriber, currently
   //    used only for logging purposes
   // certExists : a health certificate from this HCS is 
   //    already being maintained by the NapAgent, and is
   //    present in the MachineStore
   //
   HRESULT
   SubscribeCertByGroup(
      [in] EnforcementEntityId id,
      [in] const BSTR subscriberName,
      [in, unique] const VARIANT* reserved,      
      [out] BOOL* certExists
      );

   // UnSubscribe an HCS server.
   // If there are no other subscribers to the HCS, the
   // NapAgent will delete the corresponding health
   // certificates from the MachineStore
   //
   // Parameters:-
   // id : id of the subscriber
   // reserved : should be NULL.
   //
   HRESULT
   UnSubscribeCertByGroup(
      [in] EnforcementEntityId id,
      [in, unique] const VARIANT* reserved
      );

   // Get a list of relying parties that have subscribed
   // 
   // Parameters:-
   // count : number of subscribed relying parties
   // relyingParties : subscribed relying parties
   HRESULT
   GetSubscribedRelyingParties(
      [out] EnforcementEntityCount* count,
      [out, size_is(, *count)] 
        EnforcementEntityId** relyingParties
      );
};

cpp_quote("// Declarations of CLSIDs of objects provided  ")
cpp_quote("// by the system. Link to uuid.lib to get them ")
cpp_quote("// defined.                                    ")
cpp_quote("EXTERN_C const CLSID ")
cpp_quote("   CLSID_NapCertRelyingParty;")

#endif // NAPCERTRELYINGPARTY_IDL

