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

#ifndef NAPSERVERMANAGEMENT_IDL
#define NAPSERVERMANAGEMENT_IDL

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


// Management clients (eg. WMI providers, command-line tools,
// etc.) use this interface to query the status of the 
// NAP server system.  The APIs provide only static
// information about the Nap Server and its components
// on the system.
//
[object, 
uuid(599F9021-5643-4965-9949-E88975EFFF0E), 
pointer_default(unique)]
interface INapServerInfo : IUnknown
{
   // Used for reporting information about the NAP server
   // Strings will be retrieved in the caller's locale-id.
   // 
   HRESULT
   GetNapServerInfo(
      [out] CountedString** serverName,
      [out] CountedString** serverDescription,
      [out] CountedString** protocolVersion
      ) const;

   // Used to query the list of SHVs
   // The isBound flag is always TRUE - and can be
   // ignored.
   //
   HRESULT
   GetRegisteredSystemHealthValidators(
      [out] SystemHealthEntityCount* count,
      [out, size_is(, *count)] 
         NapComponentRegistrationInfo** validators,
      [out, size_is(, *count)]
         CLSID** validatorClsids
      ) const;

   // Used to query the failure category mappings for a
   // particular SHV.
   // 
   HRESULT
   GetFailureCategoryMappings(
      [in] SystemHealthEntityId id,
      [out] FailureCategoryMapping* mapping
      ) const;
};


[object,
uuid(9DE543E7-0F23-47e0-A8BC-971A894F86D4),
pointer_default(unique)]
interface INapServerManagement : IUnknown
{
   // Register an SHV.
   // 
   // Parameters:-
   // validatorClsid : CLSID of the COM object that 
   //    implements the INapSystemHealthValidator interface.
   // 
   // Error codes:-
   // NAP_E_CONFLICTING_ID: SHV id is already registered.
   // 
   HRESULT
   RegisterSystemHealthValidator(
      [in] const NapComponentRegistrationInfo* validator,
      [in] const CLSID* validatorClsid
      );


   // Used to Unregister an SHV with the NAP server. If
   // there are any asynchronous calls pending on the SHV,
   // they complete at a later time and are discarded.
   // 
   HRESULT
   UnregisterSystemHealthValidator(
      [in] SystemHealthEntityId id
      );


   // Set SHV's failure category mapping.
   // 
   HRESULT
   SetFailureCategoryMappings(
      [in] SystemHealthEntityId id,
      [in] const FailureCategoryMapping mapping
      );
};


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_NapServerInfo;")
cpp_quote("EXTERN_C const CLSID ")
cpp_quote("   CLSID_NapServerManagement;")


#endif // NAPSERVERMANAGEMENT_IDL

