Partager via


Définition Process-Wide sécurité avec CoInitializeSecurity

La fonction CoInitializeSecurity vous permet de contrôler des scénarios de sécurité complexes en définissant la sécurité d’une application par programmation. Cette rubrique décrit les scénarios dans lesquels vous pouvez utiliser CoInitializeSecurity et fournit des détails sur la façon dont vous l’utilisez.

Il existe plusieurs raisons pour lesquelles vous pouvez utiliser CoInitializeSecurity pour définir la sécurité à l’échelle du processus au sein de votre programme. Par exemple, bien que vous puissiez définir le niveau d’authentification et les autorisations d’accès pour l’application à l’aide de dcomcnfg.exe, le niveau d’emprunt d’identité par défaut pour l’ordinateur peut ne pas être celui que vous souhaitez pour votre processus. La seule façon de modifier ce paramètre pour votre processus consiste à appeler CoInitializeSecurity.

Si vous souhaitez utiliser le fournisseur de sécurité Schannel, vous devez le spécifier en tant que service d’authentification dans un appel à CoInitializeSecurity.

Un autre scénario courant dans lequel vous pouvez définir la sécurité à l’échelle du processus par programme est lorsque vous souhaitez définir la sécurité par défaut pour l’ensemble du processus, mais que vous avez un ou plusieurs objets dans ce processus qui exposent des interfaces avec des exigences de sécurité particulières. Dans ce cas, vous pouvez appeler CoInitializeSecurity pour définir la sécurité du processus, ce qui permet à COM de gérer la plupart des vérifications de sécurité, et vous pouvez appeler d’autres méthodes pour définir la sécurité des objets ayant des besoins de sécurité spéciaux. L’appel de ces méthodes et fonctions est décrit dans Définition de la sécurité au niveau du proxy d’interface.

Si votre application a des exigences de sécurité très spécialisées, telles que l’autorisation à certains groupes d’accéder à différents objets en fonction de l’heure de la journée, vous pouvez gérer l’ensemble de votre sécurité par programmation, en vous assurant que COM n’effectue aucune vérification automatique pour vous. Pour ce faire, vous devez appeler CoInitializeSecurity, en définissant le paramètre dwAuthnLevel sur none et le paramètre pVoid sur NULL. Si vous avez votre propre package de sécurité, vous devez également l’inscrire dans le paramètre pAuthnSvc . Vous pouvez ensuite gérer votre propre sécurité par programmation via des appels à l’interface et aux fonctions de niveau proxy décrites dans Définition de la sécurité au niveau du proxy d’interface.

CoInitializeSecurity offre un ensemble complet de fonctionnalités. Si vous appelez CoInitializeSecurity, les valeurs de Registre sont ignorées et les valeurs d’initialisation de sécurité que vous transmettez à l’appel sont utilisées à la place. Selon le résultat souhaité, le premier paramètre, pVoid, peut pointer vers trois types de valeurs différents : un SECURITY_DESCRIPTOR , un objet IAccessControl ou un pointeur vers un AppID. Dans la plupart des cas, vous utiliserez les fonctions Windows pour créer un SECURITY_DESCRIPTOR vers lequel pVoid pointera.

Toutefois, pVoid peut également pointer vers un objet IAccessControl .

Pour indiquer à CoInitializeSecurity que vous transmettez un objet IAccessControl à pVoid, vous devez passer la valeur EOAC_ACCESS_CONTROL au paramètre dwCapabilities . Étant donné que CoInitializeSecurity met en cache les résultats des vérifications d’accès, la liste de contrôle d’accès ne doit pas être modifiée après l’appel de CoInitializeSecurity.

Un autre type de valeur que vous pouvez passer au paramètre pVoid est un pointeur vers un GUID, qui est l’AppID de votre application. Si pVoid est un pointeur vers un AppID, vous devez spécifier EOAC_APPID dans le paramètre pCapabilities afin que la fonction sache à quelle valeur s’attendre dans pVoid. Si pVoid pointe vers un AppID, CoInitializeSecurity utilise uniquement le Registre pour les valeurs d’authentification et ignore tous les autres paramètres pour CoInitializeSecurity.

Définition de la sécurité Process-Wide