Jeu d'outils de configuration de sécurité (4)

Sur cette page

Jeu d'outils de configuration de sécurité (4ème partie) Jeu d'outils de configuration de sécurité (4ème partie)
Installation et enregistrement Installation et enregistrement
Format du Presse-papiers Format du Presse-papiers
Interfaces de composant logiciel enfichable d'extension Interfaces de composant logiciel enfichable d'extension
Installation et enregistrement Installation et enregistrement
Initialisation – Ajout du nœud d'attachement Initialisation – Ajout du nœud d'attachement
Mise en œuvre de ISceSvcAttachmentPersistInfo Mise en œuvre de ISceSvcAttachmentPersistInfo

Jeu d'outils de configuration de sécurité (4ème partie)

Installation et enregistrement

La DLL de l'attachement doit être installée sur le système Windows NT ou Windows 2000 sur lequel elle est destinée à être utilisée. Le Jeu d'outils de configuration de sécurité doit en outre être informé de la présence de l'attachement.

Pour installer et enregistrer une DLL

  1. Copier la DLL d'attachement dans un répertoire particulier. Le répertoire préférentiel est %windir%\Security\Attachments. Vous pouvez créer ce répertoire s'il n'existe pas encore. Seuls les administrateurs du système sont supposés installer des attachements sur le système.

  2. Créer une clé de registre sous :

    HKEY_LOCAL_MACHINE
    Software\
    Microsoft\
    Windows NT\
    CurrentVersion\
    SecEdit\Services\
    [Nom du service]

    Le nom de service utilisé ici est le nom enregistré pour l'attachement. Il doit être unique afin de ne pas créer de conflits avec d'autres attachements. Le nom du service doit être le même nom utilisé dans le Gestionnaire de contrôle de service si l'attachement configure des paramètres spécifiques au service. Le nom utilisé dans le Gestionnaire de contrôle de service est le nom permettant de lier chaque service avec le Jeu d'outils de configuration de sécurité.

    Créer les valeurs suivantes dans cette clé :

    • Nom de valeur = ServiceAttachmentPath

    • Type de valeur = REG_SZ

    • Valeur = le chemin d'accès complet à la DLL d'attachement (par exemple, %windir%\Security\Attachments\Something.dll).

Les composants logiciels enfichables du Jeu d'outils de configuration de sécurité sont conçus pour être extensibles afin de prendre en charge les composants logiciels enfichables d'extension d'attachement. La communication entre les composants logiciels enfichables du Jeu d'outils de configuration de sécurité et les composants logiciels enfichables d'extension est assurée par les mécanismes MMC standard et deux interfaces COM (Component Object Model) bien définies. Le moteur d'attachement est responsable de la configuration et de l'analyse de la sécurité des services et de la mise à jour de la configuration des services dans la base de données ; l'extension d'attachement permet à l'utilisateur d'afficher, de créer et de modifier des informations de configuration et d'analyse. Pour fonctionner correctement, il est impératif que le composant logiciel enfichable d'attachement suive les directives relatives aux composants logiciels enfichables d'extension de MMC et les directives relatives aux attachements présentées dans ce document.

Chaque composant logiciel enfichable d'attachement doit être un composant logiciel enfichable d'extension, et ces composants logiciels enfichables d'extension mettent en œuvre des fonctionnalités uniquement lorsqu'ils sont invoqués par le composant logiciel enfichable du Jeu d'outils de configuration de sécurité (ou du Gestionnaire). Chaque composant logiciel enfichable d'attachement ne peut étendre que des nœuds de service. Il se déclare lui-même comme étant subordonné aux nœuds des services, et ensuite pour chaque occurrence du type de nœud de service, MMC ajoute automatiquement les extensions de composant logiciel enfichable associées. Chaque attachement possède un nœud de panneau d'étendue et le panneau de résultat associé dans MMC. Les extensions d'attachement doivent permettre à l'utilisateur de créer et de modifier les paramètres de sécurité de service dans une configuration gérée par le composant logiciel enfichable Éditeur (ou Gestionnaire) de configuration de sécurité. Il doit également être en mesure d'afficher des paramètres de sécurité de configuration et/ou d'analyse avec un état d'analyse. Il doit prendre en charge l'édition de paramètres de configuration de services pour un système, et les résultats d'analyse doivent être mis à jour en fonction des paramètres de configuration.

Il incombe à l'extension d'attachement de déterminer le format et la logique de mise en œuvre de son propre panneau de résultats. Les interfaces COM fournissent une méthode pour étendre la fonctionnalité de l'Éditeur (ou du Gestionnaire) de configuration de sécurité pour les services sans préciser comment chaque extension de service effectue ses tâches propres. Voir la disposition de l'interface COM illustrée à la figure A2.

Disposition de l'interface COM pour un attachement

Figure A2 Disposition de l'interface COM pour un attachement

Dans cette illustration, le composant logiciel enfichable Éditeur (ou Gestionnaire) de configuration de sécurité met en œuvre l'interface ISceSvcAttachmentData. L'interface fournit le composant logiciel enfichable d'attachement pour demander des informations de configuration et d'analyse des configurations ou de la base de données. Le composant logiciel enfichable d'attachement met en œuvre l'interface COM ISceSvcAttachmentPersistInfo, qui est utilisée par le composant logiciel enfichable Éditeur (ou Gestionnaire) de configuration de sécurité pour obtenir des informations modifiées à écrire dans la configuration ou la base de données. Le composant logiciel enfichable enregistre ensuite ces informations de façon appropriée.

Il existe trois opérations que le composant logiciel enfichable d'attachement doit prendre en charge :

-

**Afficher des informations de configuration et/ou d'inspection** — Pour afficher des informations, le nœud de composant logiciel enfichable d'attachement étend le composant logiciel enfichable Éditeur (ou Gestionnaire) de configuration de sécurité par l'intermédiaire du nœud des services. Les types de nœud de l'Éditeur (ou du Gestionnaire) de configuration de sécurité pouvant être étendus sont les suivants :

  - **NodeType Services Configuration** ={24a7f717-1f0c-11d1-affb-00c04fb984f9}

  - **NodeType Services Analyse** ={678050c7-1ff8-11d1-affb-00c04fb984f9}

Lors de la création ou de l'édition d'une configuration, si le nœud des services est étendu, tous les composants logiciels enfichables d'extension enregistrés sont avertis par MMC directement. Chaque attachement doit s'insérer lui-même sous le nœud des services, puis exécuter les opérations suivantes :
  • Utiliser la méthode QueryInterface pour interroger l'interface ISceSvcAttachmentData.

  • Appeler la méthode Initialize pour informer le Jeu d'outils de configuration de sécurité qu'il est chargé et pour établir un contexte pour communiquer les informations appropriées.

  • Utiliser la méthode GetData pour extraire des informations immédiatement ou attendre que son nœud soit sélectionné par l'utilisateur.

  • Modifier les informations de configuration dans les configurations — Le composant logiciel enfichable d'attachement doit permettre à l'utilisateur de modifier les informations de configuration sur le service. Les informations modifiées doivent être retenues par le composant logiciel enfichable d'attachement jusqu'à ce que l'Éditeur (ou le Gestionnaire) de configuration de sécurité utilise l'interface ISceSvcAttachmentPersistInfo pour extraire les informations. Pour éviter les fuites de mémoire, la mémoire allouée est libérée par le propriétaire. Pour cette raison, les deux interfaces ont une méthode FreeBuffer.

  • Modifier les informations de configuration dans la base de données — Le composant logiciel enfichable d'attachement également doit prendre en charge les modifications aux informations de configuration par l'intermédiaire du nœud d'inspection. Cela permet à l'utilisateur d'apporter des modifications et de réappliquer la configuration. La logique pour cela doit être identique à la modification des informations dans les fichiers de configuration. Les modifications apportées prennent effet sur la configuration enregistrée dans la base de données d'inspection.

Format du Presse-papiers

#define CCF_SCESVC_ATTACHMENT ( L"CCF_SCESVC_ATTACHMENT" )

Le Presse-papiers est employé par chaque composant logiciel enfichable d'attachement pour extraire le nom de fichier de configuration de l'Éditeur (ou du Gestionnaire) de configuration de sécurité. Le nom de fichier de configuration est PWSTR. Ce nom de configuration est employé dans les communications établies entre l'attachement de service et l'Éditeur (ou Gestionnaire) de configuration de sécurité ** dans la méthode Initialize.

Interfaces de composant logiciel enfichable d'extension

Le composant logiciel enfichable d'extension interroge les interfaces suivantes du composant logiciel enfichable de l'Éditeur (ou du Gestionnaire) de configuration de sécurité.

ISceSvcAttachmentData

Cette interface est mise en œuvre par le composant logiciel enfichable Éditeur (ou Gestionnaire) de configuration de sécurité pour prendre en charge des composants logiciels enfichables d'extension. Le composant logiciel enfichable d'extension d'attachement doit l'utiliser pour récupérer des informations spécifiques des services afin d'afficher les modifications utilisateur.

class ISceSvcAttachmentData : public IUnknown
{
public:
virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetData(
/* [in] */ SCE_HANDLE sceHandle,
/* [in] */ SCESVC_INFO_TYPE sceType,
/* [out] */ PVOID *ppvData,
/* [in out] */ PSCE_ENUMERATION_CONTEXT psceEnumHandle ) = 0;

virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Initialize(
/* [in] */ LPCTSTR ServiceName,
/* [in] */ LPCTSTR TemplateName,
/* [in] */ LPUNKNOWN lpUnknown,
/* [out] */ SCE_HANDLE *sceHandle) = 0;

virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE FreeBuffer(
/* [in] */ PVOID pvData) = 0;

virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CloseHandle(
/* [in] */ SCE_HANDLE sceHandle) = 0;

};

ISceSvcAttachmentPersistInfo

Cette interface est une classe abstraite qui doit être mise en œuvre par chaque composant logiciel enfichable d'extension d'attachement. Le composant logiciel enfichable Éditeur (ou Gestionnaire) de configuration de sécurité appelle cette interface pour vérifier la présence éventuelle d'informations modifiées à réécrire dans le fichier de configuration ou dans la base de données (à l'aide de IsDirty). Si c'est le cas, il appelle la méthode Save pour permettre au composant logiciel enfichable d'extension de communiquer les informations à enregistrer.

class ISceSvcAttachmentPersistInfo : public IUnknown
{
public:
virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Save(
/* [out] */ SCE_HANDLE *sceHandle,
/* [out] */ PVOID *ppvData,
/* [out] */ PBOOL pbOverwriteAll ) = 0;

virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE IsDirty() = 0;

virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE FreeBuffer(
/* [in] */ PVOID pvData) = 0;

};

Installation et enregistrement

Le composant logiciel enfichable Éditeur (ou Gestionnaire) de configuration de sécurité fournit des extensions uniquement par l'intermédiaire de l'espace de noms de l'Éditeur (ou Gestionnaire) de configuration de sécurité. Les menus contextuels, les barres d'outils, les boutons de barre d'outils et les pages de propriétés ne sont pas extensibles à ce stade. Le composant logiciel enfichable d'extension doit étendre l'espace de noms de l'Éditeur (ou du Gestionnaire) de configuration de sécurité en remplissant son propre nœud à des endroits bien définis dans l'espace de noms.

Des composants logiciels enfichables d'attachement doivent être enregistrés sous la clé de registre suivante :

HKEY_LOCAL_MACHINE
Software\
Microsoft\
MMC\
Snapins

La clé StandAlone ne doit pas être créée sous le composant logiciel enfichable parce que chaque composant logiciel enfichable d'attachement doit être une extension seulement.

Les composants logiciels enfichables d'attachement doivent également s'enregistrer eux-mêmes sous les sous-clés des services NodeType des services Éditeur de configuration de sécurité de la façon suivante :

  • Pour étendre l'espace de noms de l'Éditeur de configuration de sécurité, utilisez la clé de registre suivante :

    HKLM\
    Software\
    Microsoft\
    MMC\
    NodeTypes\
    24a7f717-1f0c-11d1-affb-00c04fb984f9\
    Extensions\
    NameSpace

  • Pour étendre l'espace de noms d'inspection (analyse) du Gestionnaire de configuration de sécurité, utilisez la clé de registre suivante :

    HKLM\

    Software\
    Microsoft\
    MMC\
    NodeTypes\
    678050c7-1ff8-11d1-affb-00c04fb984f9\
    Extensions\
    NameSpace

Pour plus d'informations, reportez-vous au fichier d'en-tête Scesvc.h des plates-formes SDK.

Pour enregistrer les composants logiciels enfichables sous forme d'extensions au composant logiciel enfichable Éditeur (ou Gestionnaire) de configuration de sécurité, créez ces clés dans vos mises en œuvre des fonctions DllRegisterServer et DllUnregisterServer.

Initialisation – Ajout du nœud d'attachement

Lorsqu'un nœud de services sous l'Éditeur de configuration de sécurité ou sous le Gestionnaire de configuration de sécurité est étendu, MMC utilise IComponentData::Notify et l'événement MMCN_EXPAND pour avertir l'Éditeur (ou le Gestionnaire) de configuration de sécurité et toutes ses extensions. L'Éditeur (ou le Gestionnaire) de configuration de sécurité extrait ensuite son format interne de l'objet lpDataObject et arrête tout autre traitement lorsqu'il voit le type de nœud Services. Les composants logiciels enfichables d'attachement (enregistrés comme extensions) extraient également le type de nœud de l'objet lpDataObject. Si le type de nœud correspond à l'un des types de nœud Services définis plus tôt, les composants logiciels enfichables d'attachement insèrent leurs propres nœuds racines sous le nœud parent spécifié.

//
// déterminer quel nœud d'extension étendre
//

GUID* nodeType = ExtractNodeType(lpDataObject);

if ( nodeType == NULL ) {
return S_OK;
}

if ( ::IsEqualGUID(*nodeType, cNodetypeSceTemplateServices) == TRUE )
folderType =ATTACHEMNT_STATIC; // défini par le créateur de l'attachement.
else if (::IsEqualGUID(*nodeType, cNodetypeSceAnalysisServices)
== TRUE)
folderType =ATTACHMENT_STATIC_ANALYSIS;
// défini par le créateur de l'attachement

// Libérer les ressources
::GlobalFree(reinterpret_cast<HANDLE>(nodeType));

//
// Comme un composant logiciel enfichable d'extension, le nœud racine
// de l'attachement de service doit être ajouté
// Insérer ce nœud et rappeler qu'il correspond
// à la racine de l'espace de noms d'extension SMB.
//
CheckAndInsertRootNodeToMMCScopePane

La prochaine étape importante dans la procédure d'initialisation consiste à établir une communication avec le composant logiciel enfichable de l'Éditeur (ou du Gestionnaire) de configuration de sécurité. Cette opération est nécessaire puisque l'attachement obtient ses données, ainsi que toute modification apportée par l'utilisateur, à partir de l'Éditeur (ou du Gestionnaire) de configuration de sécurité. Pour cela, procédez comme suit :

  1. Obtenez le nom de la configuration. Si le type de nœud Services sous lequel l'attachement est inséré était celui d'une configuration, l'attachement doit savoir à quel configuration il correspond. Il communique ces informations à l'Éditeur (ou au Gestionnaire) de configuration de sécurité pendant l'initialisation de l'interface. Le nom de la configuration peut être obtenu par l'intermédiaire du format Presse-papiers de la façon suivante :

    PWSTR * TemplateName = ExtractTemplateNameFromDataObject(lpDataObject);

  2. Définissez le contexte avec l'Éditeur (ou le Gestionnaire) de configuration de sécurité. Une fois le nom de configuration connu (ou si le nœud Service est de type Inspection), le composant logiciel enfichable d'attachement doit interroger l'interface ISceSvcAttachmentData et appeler la méthode Initialize pour configurer le contexte.

    //

    // QueryInterface pour les composants logiciels enfichables principaux IUnkown.

    //

    LPUNKNOWN pUnk;

    hr = lpDataObject->QueryInterface(IID_IUnknown,

    reinterpret_cast<void**>(&pUnk));

    //

    // QueryInterface ISceSvcAttachmentData

    //

    if ( SUCCEEDED(hr) ) {

    hr = pUnk->QueryInterface(IID_ISceSvcAttachmentData,

    reinterpret_cast<void**>(&pSceData));

    }

    U

    //

    // QueryInterface sur l'attachement IUnknown car

    // cela est requis par le composant logiciel enfichable principal.

    //

    ((LPUNKNOWN)m_pSnapin)->QueryInterface(IID_IUnknown, reinterpret_cast<void**>(&pUnk));

    //

    // Appeler la méthode Initialize pour définir le contexte avec le composant logiciel enfichable principal.

    //

    m_pSceData->Initialize(ServiceName, TemplateName, pUnk, &sceHandle);

    U

    Remarque : Vous devez appeler CloseHandle pour fermer sceHandle une fois que vous avez terminé.

  3. Obtenez les données appropriées. Le composant logiciel enfichable d'attachement peut utiliser le contexte établi pour interroger les données appropriées de l'Éditeur de configuration de sécurité le cas échéant en utilisant l'interface GetData. L'attachement peut décider de le faire de façon proactive dès qu'il initialise l'éditeur de configuration de sécurité, ou il peut attendre que l'utilisateur tente d'étendre le nœud d'attachement en cliquant dessus. L'attachement peut afficher les informations reçues à l'aide de n'importe quel contrôle d'interface utilisateur disponible.

    //

    // GetData – nous obtenons les informations de configuration ici.

    //

    m_pSceData->GetData (sceHandle, SceSvcConfigurationInfo, &pData,

    &enumHandle );

    Remarque : Vous devez utiliser la méthode FreeBuffer pour libérer la mémoire tampon allouée par l'Éditeur (ou par le Gestionnaire) de configuration de sécurité.

Mise en œuvre de ISceSvcAttachmentPersistInfo

Après l'initialisation, il est important que l'attachement mette en œuvre l'interface ISceSvcAttachmentPersistInfo. L'Éditeur (ou le Gestionnaire) de configuration de sécurité interroge cette interface à divers moments, notamment lors de l'enregistrement de la configuration et lors de la fermeture du composant logiciel enfichable, pour permettre à l'attachement d'enregistrer les modifications que l'utilisateur peut avoir apportées à la base de données d'inspection ou à la configuration associée.

class CSceSvcAttachmentPersistInfo:
public ISceSvcAttachmentPersistInfo,
public CComObjectRoot
{
BEGIN_COM_MAP(CSceSvcAttachmentPersistInfo)
COM_INTERFACE_ENTRY(ISceSvcAttachmentPersistInfo)
END_COM_MAP()

friend class CDataObject;
friend class CComponentDataImpl;

CSceSvcAttachmentPersistInfo();
~CSceSvcAttachmentPersistInfo();

public:

// membre de l'interface ISceSvcAttachmentPersistInfo
STDMETHOD(IsDirty)();
STDMETHOD(Save)(SCE_HANDLE *sceHandle, PVOID *ppvData,
PBOOL pbOverwriteAll );
STDMETHOD(FreeBuffer)(PVOID pvData);

...

private:
CString m_TemplateName;
LPSCESVCATTACHMENTDATA m_pSceData;
SCE_HANDLE m_sceHandle;

...

};

//
// Mise en œuvre de IsDirty()
//
STDMETHODIMP CSceSvcAttachmentPersistInfo::IsDirty()
{
if ( m_pSnapin == NULL ) {
return S_FALSE;
}
//
// simple appel du composant logiciel enfichable principal IsDirty.
//
return m_pSnapin->IsDirty();
}

//
// Mise en œuvre de Save()
//
STDMETHODIMP CSceSvcAttachmentPersistInfo::Save(
SCE_HANDLE *psceHandle,
PVOID *ppvData,
PBOOL pbOverwriteAll )
{
if ( psceHandle == NULL || ppvData == NULL ||
pbOverwriteAll == NULL ) {
return E_INVALIDARG;
}

if ( m_pSnapin != NULL ) {

m_pSnapin->SaveDataInBuffer(ppvData, pbOverwriteAll);

*psceHandle = m_sceHandle;

}

return S_OK;
}

//
// Mise en œuvre de FreeBuffer
//
STDMETHODIMP CSceSvcAttachmentPersistInfo::FreeBuffer(PVOID pvData)
{
if ( pvData == NULL ) {
return S_OK;
}

PSCESVC_ANALYSIS_INFO pTempInfo=(PSCESVC_ANALYSIS_INFO)pvData;

if ( pTempInfo->Lines != NULL ) {

for ( DWORD i=0; i < pTempInfo->Count; i++ ) {

if ( pTempInfo->Lines[i].Key != NULL )
LocalFree(pTempInfo->Lines[i].Key);

if ( pTempInfo->Lines[i].Value != NULL )
LocalFree(pTempInfo->Lines[i].Value);
}

LocalFree( pTempInfo->Lines);
}

LocalFree(pTempInfo);

return S_OK;
}

Les informations contenues dans ce document représentent l'opinion actuelle de Microsoft sur les points cités à la date de publication. Microsoft s'adapte aux conditions fluctuantes du marché et cette opinion ne doit pas être interprétée comme un engagement de la part de Microsoft ; de plus, Microsoft ne peut pas garantir la véracité de toute information présentée après la date de publication. Ce livre blanc est fourni à des fins d'informations seulement. MICROSOFT N'OFFRE AUCUNE GARANTIE, EXPRESSE OU IMPLICITE, DANS CE DOCUMENT. Microsoft, Active Desktop, BackOffice, le logo BackOffice, MSN, Windows et Windows NT sont soit des marques de Microsoft Corporation, soit des marques déposées de Microsoft Corporation aux États-Unis d'Amérique et/ou dans d'autres pays. Les autres noms de produits ou de sociétés mentionnés dans ce document sont des marques de leurs propriétaires respectifs. Microsoft Corporation • One Microsoft Way • Redmond, WA 98052-6399 • États-Unis

1 Si vous utilisez la console MMC enregistrée ayant pour nom gpedit.msc, l'extension Paramètres de sécurité y est déjà chargée ; si vous chargez l'éditeur de stratégie de groupe dans une nouvelle console, vous devrez ajouter l'extension Paramètres de sécurité et toutes ses extensions secondaires à partir de l'onglet Extensions.

<< 1 2 3 4 >>

Dernière mise à jour le lundi 20 mars 2000

Pour en savoir plus