Pourquoi ne COM CoInitializeSecurity échouer dans ma DLL?

Je suis actuellement étudiant VSHADOW.EXE 3.0 à partir de la MS Windows SDK 6.1. J'ai fait une version qui peut être compilé dans une DLL que seules les exportations nouvellement écrite fonction qui s'attend à la ligne de commande, comme une chaîne de caractères, tokenizes et appelle ensuite la vieille wmain. La DLL n'est pas un serveur COM.

Il fonctionne exactement comme l'ancienne lors de la compilation comme un EXE, mais ne fonctionne pas lors de la compilation comme un DLL parce que cet appel échoue:

 CoInitializeSecurity(NULL, -1, NULL, NULL, 
                      RPC_C_AUTHN_LEVEL_PKT_PRIVACY, 
                      RPC_C_IMP_LEVEL_IDENTIFY, 
                      NULL, EOAC_NONE, NULL);

qui échoue avec HRESULT erreur 0x80010119 (RPC_E_TOO_LATE, de Sécurité doit être initialisé avant de toutes les interfaces sont insérés ou unmarshalled. Il ne peut pas être changé une fois initialisée.)

- Je exécuter la fonction exportée à partir d'un programme VB6 où la fonction est importé avec Declare Function vss Lib vshadow.dll ....

Le message d'erreur signifie que le programme VB6 déjà appelé CoInitializeSecurity? Que puis-je faire contre l'erreur?

Aussi, j'ai une autre question: pourquoi sont exactement les valeurs de sécurité RPC_C_AUTHN_LEVEL_PKT_PRIVACY et RPC_C_IMP_LEVEL_IDENTIFY choisi? Quel serait l'impact d'autres paramètres?

OriginalL'auteur Felix Dombek | 2011-04-14