Login & mot de passe windows : gina.dll

nicolaslepot Messages postés 23 Date d'inscription dimanche 19 décembre 2004 Statut Membre Dernière intervention 20 décembre 2006 - 11 déc. 2006 à 12:01
nicolaslepot Messages postés 23 Date d'inscription dimanche 19 décembre 2004 Statut Membre Dernière intervention 20 décembre 2006 - 12 déc. 2006 à 10:44
Bonjour,

J'ai créé une application (en c# elle est terminée) et pour lui offrir une bonne intégration, je dois faire un module SSO pour que l'utilisateur soit authentifié automatiquement sur l'application une fois qu'il s'est authentifié sur son pc. Ceci peut se faire en ajoutant une gina.dll. J'ai trouvé un bon exemple ici : http://www.codeproject.com/useritems/GINA_SPY.asp. Mais j'ai qqes soucis.

Le code a été compilé avec Visual Studio 6. Moi lorsque j'ouvre le source avec Visual Studio 8, il convertit le code au démarrage et à la compilation il me dit que le code est obsolète. Pq me dit t'il que le projet est obsolète ? Des appels a de trop vieille fonction peut-être ?

L'exemple précédent récupère login et mot de passe de winlogon.exe et les écrits dans un fichier texte sur le C:\. Cependant, il tronque à 4  caractères le login et le mot de passe. Ceci se fait dans le bout de code suivant. Je crois que c'est son "sizeof" qui retourne la taille en mémoire du pointeur et non pas la longueur de la chaine. il n'y aurait pas un bon vieux strlen() en cpp ?

        char userName[100];
        ZeroMemory(userName,100);
        char userPass[100];
        ZeroMemory(userPass,100);
        wcstombs(userName,pMprNotifyInfo->pszUserName,sizeof(pMprNotifyInfo->pszUserName));
        wcstombs(userPass,pMprNotifyInfo->pszPassword,sizeof(pMprNotifyInfo->pszPassword));        WriteLog("NAME %s  PASSWORD %s ", userName,userPass);

J'aimerai repartir à zéro et simplement re-créer une DLL, lorsque je crée un DLL MFC via nouveau projet, il me propose de choisir entre:
DLL normale utilisant une DLL MFC partagée, DLL normale liée statiquement aux MFC, DLL d'extension MFC. Il me semble que dans mon cas c'est une DLL normale liée statiquement aux MFC que je dois choisir. Est-ce juste ?

Lorsque je pratique de la sorte, le compilateur me fait une erreur "error LNK2005:_DllMain@12 déjà définie dans lpgina.dll'...
En effet, j'ai recopié une fonction "DllMain" dans mon nouveau project.
DllMain c'était l'ancienne façon définir le constructeur de la dll ?

J'ai fait du c/cpp sous unix en son temps, du C# encore assez souvent mais avec le cpp sous windows je suis un peu perdu là :-/

Merci d'avance à tout qui pourra m'éclairer un peu...

nico

3 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 déc. 2006 à 21:51
DLL normale utilisant une DLL MFC partagée
ok mais gaffe que avec VS8 et superieur il te faudra un setup, la version MFC utilisée sera superieure à celle présente par defaut dans Windows (mfc42).
DisableSpecificWarnings=4996 à mettre dans les options de compilo et il ne te burnera plus avec 'obsolète'.
Si tu prends des params extenes, gaffe que par contre là il a bien raison, faut absolument en controler la longueur vant de copier dans tes buffers.

ciao...
BruNews, MVP VC++
0
nicolaslepot Messages postés 23 Date d'inscription dimanche 19 décembre 2004 Statut Membre Dernière intervention 20 décembre 2006
12 déc. 2006 à 07:18
Bonjour,

merci pour ta réponse.

pour l'erreur avec le main, c'était en effet a cause du mauvais choix du type de dll. Il fallait choisir la partagée. Par la même occasion, le message avec obsolète ne vient plus.


Il reste qqe warning C4996 (fonction posix désaprouvée), mais ça n'enpêche pas la compilation :)
Petite précision, j'ai fais un copier/coller du code de l'exemple pour le fichier .cpp et .def. Je me suis dit qu'avant de venir apporter mes modifications, ce serait déjà pas mal d'arriver à faire marchere l'exemple.

Pour le coup des MFC différentes entre vs8 et vs6, j'ai récupéré le setup vcredist_x86.exe qui a été installé avec vs8
(dans C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86).

J'ai donc copié vcredist_x86.exe sur la machine de test et je l'ai installé.

J'ai ensuite compilé la DLL en mode release, puis j'ai copié celle-ci sur le pc de test.

Malheureusement, ca ne marche toujours pas...

Devrais-je donner une config spéciale au compilateur pour que ça marche ?
J'ai testé qqes options mais sans succès. D'un autre côté, je sais pas trop quoi tester :)

Nico

Si vous avez une idée
0
nicolaslepot Messages postés 23 Date d'inscription dimanche 19 décembre 2004 Statut Membre Dernière intervention 20 décembre 2006
12 déc. 2006 à 10:44
Re,

voilà, ça marche.

J'aimerais bien vous dire ce que j'ai fait exactement pour faire aller le code, mais j'en suis incapable... :) J'ai joué avec les options du compilateur.

nico
0
Rejoignez-nous