////////////////////////////////////////////////////////////
//
// Copyright (c) Microsoft Corporation.
//
// SYNOPSIS
//
//    IDL source for management of the NapClient
//
////////////////////////////////////////////////////////////

#ifndef NAPMANAGEMENT_IDL
#define NAPMANAGEMENT_IDL

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

[object, 
uuid(432a1da5-3888-4b9a-a734-cff1e448c5b9), 
pointer_default(unique)]
interface INapClientManagement : IUnknown
{
   // Used for reporting information about the NAP client.
   // Strings will be retrieved in the caller's locale-id.
   //
   HRESULT
   GetNapClientInfo(
      [out] BOOL* isNapEnabled,
      [out] CountedString** clientName,
      [out] CountedString** clientDescription,
      [out] CountedString** protocolVersion
      ) const;


   // Used to query the isolation state of the NapClient.
   // If any of the connections are in an unknown state,
   // the 'unknownConnections' flag is set to true.
   // The 'isolationInfo' does not reflect unknown states.
   //
   HRESULT
   GetSystemIsolationInfo(
      [out] IsolationInfo** isolationInfo,
      [out] BOOL* unknownConnections
      ) const;


   // Registers an SHA.
   // 
   // Return codes:
   //    NAP_E_CONFLICTING_ID: SHA with this id is already
   //       registered.
   HRESULT
   RegisterSystemHealthAgent(
      [in] const NapComponentRegistrationInfo* agent
      );
   

   // Unregisters an SHA.
   // 
   // Return codes:
   //    NAP_E_STILL_BOUND: SHA is still bound and could
   //       not be unregistered.
   // 
   HRESULT
   UnregisterSystemHealthAgent(
      [in] SystemHealthEntityId id
      );

   // Registers an enforcer.
   // 
   // Return codes:
   //    NAP_E_CONFLICTING_ID: Enforcer with this id is 
   //       already registered.
   HRESULT
   RegisterEnforcementClient(
      [in] const NapComponentRegistrationInfo* enforcer
      );
   
   // Unregisters an enforcer.
   // 
   // Return codes:
   //    NAP_E_STILL_BOUND: Enforcer is still bound and 
   //       could not be unregistered.
   // 
   HRESULT
   UnregisterEnforcementClient(
      [in] EnforcementEntityId id
      );


   // Used to query the list of registered SHAs.
   // 
   HRESULT
   GetRegisteredSystemHealthAgents(
      [out] SystemHealthEntityCount* count,
      [out, size_is(, *count)] 
        NapComponentRegistrationInfo** agents
      ) const;

   // Used to query the list of registered enforcers.
   //
   HRESULT
   GetRegisteredEnforcementClients(
      [out] EnforcementEntityCount* count,
      [out, size_is(, *count)] 
        NapComponentRegistrationInfo** enforcers
      ) const;
};


[object, 
uuid(07a1127b-18cc-422a-b988-e892600fcc74), 
pointer_default(unique)]
interface INapClientManagement2 : INapClientManagement
{
   // Used to query the isolation state and extended isolation 
   // state of the NapClient.
   // If any of the connections are in an unknown state,
   // the 'unknownConnections' flag is set to true.
   // The 'isolationInfo' does not reflect unknown states.
   //
   HRESULT
   GetSystemIsolationInfoEx(
      [out] IsolationInfoEx** isolationInfo,
      [out] BOOL* unknownConnections
      ) const;
};


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_NapClientManagement;")

#endif // NAPMANAGEMENT_IDL

