////////////////////////////////////////////////////////////
//
// Copyright (c) Microsoft Corporation.
//
// SYNOPSIS
//
//    IDL source for common interfaces.
//
////////////////////////////////////////////////////////////

#ifndef NAPCOMMON_IDL
#define NAPCOMMON_IDL

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


// NAP plug-in components (such as SHAs and SHVs) must 
// implement this interface so that the NAP system can 
// retrieve static administrative-type information 
// (eg. friendly name, localized strings, etc.)
// 
[object, 
uuid(B475F925-E3F7-414c-8C72-1CEE64B9D8F6), 
pointer_default(unique)]
interface INapComponentInfo : IUnknown
{
   // Used to get the friendly name, company name,
   // version info and icon of health clients.
   //
   HRESULT
   GetFriendlyName([out] MessageId* friendlyName) const;
   HRESULT
   GetDescription([out] MessageId* description) const;
   HRESULT
   GetVendorName([out] MessageId* vendorName) const;
   HRESULT
   GetVersion([out] MessageId* version) const;

   // The icon should be localized according to the thread
   // lang-id.
   HRESULT
   GetIcon(
      [out] CountedString** dllFilePath,
      [out] UINT32* iconResourceId
      ) const;

   // Used to convert HRESULT to message id, which can then
   // be used to retrieve a localized string.
   // 
   HRESULT
   ConvertErrorCodeToMessageId(
      [in] HRESULT errorCode,
      [out] MessageId* msgId
      ) const;

   // Used to get localized strings. Strings should be
   // localized to the thread's language-id.
   // 
   HRESULT
   GetLocalizedString(
      [in] MessageId msgId,
      [out] CountedString** string
      ) const;
};


// Currently, implemented by the SHVs only.
//                      
[object,
uuid(a9e0af1a-3713-478e-ae03-8edd272d21fa),
pointer_default(unique)]
interface INapComponentConfig : IUnknown
{
   // Used to determine if the component supports
   // custom UI.
   //
   HRESULT
   IsUISupported([out] BOOL* isSupported) const;

   // Used to launch the component specific UI
   // Note:- The call should block until the UI exits
   //        and any updated config is persisted.
   // 
   HRESULT
   InvokeUI([in, unique] HWND hwndParent) const;
 
   // Used to extract the configuration for
   // migration purposes
   // Any versioning information should be part of the 
   // byte blob
   //
   HRESULT
   GetConfig(
      [out] UINT16* bCount, 
      [out, size_is(, *bCount)] BYTE** data
      ) const;

   // Used to set the configuration
   // 
   HRESULT
   SetConfig(
      [in] UINT16 bCount, 
      [in, size_is(bCount)] BYTE* data
      );
};

#endif // NAPCOMMON_IDL

