2010-10-13 4 views
5

Je construis un sous-paquet d'authentification personnalisé pour MSV1_0 pour Windows 7. J'ai utilisé l'exemple msvsubauth depuis le SDK Windows et j'ai deux questions concernant certains problèmes auxquels je suis confronté:Implémentation du package d'authentification Windows personnalisé

  1. Quand j'essaie juste de faire en sorte que le get invoquaient routine et définissez la propriété Auth0 dans le registre à mon package et ajouter un simple code à la fin de la Msv1_0SubAuthenticationRoutine qui crée un fichier:

    // 
    // Cleanup up before returning. 
    // 
    
    
    Cleanup: 
    hTestFile = CreateFile(
           TEXT("C:\\lsa\\lsa.txt"), 
           GENERIC_READ|GENERIC_WRITE, 0, 
           NULL, CREATE_ALWAYS, 
           FILE_ATTRIBUTE_NORMAL, NULL); 
    
    
    if(hTestFile != INVALID_HANDLE_VALUE) { 
         CloseHandle(hTestFile); 
    } 
    
    
    return Status; 
    
    
    } // Msv1_0SubAuthenticationRoutine 
    

    Apparemment, le paquet L'âge est invoqué parce que quand j'entre mon mot de passe, je reçois un message d'erreur de Windows "le paramètre est incorrect", ce qui est un bon signe. Mais pourquoi je reçois cette erreur? Lorsque le même code est exécuté à partir d'un fichier .exe distinct, il s'exécute parfaitement et crée le fichier texte de test. J'ai vérifié les autorisations et mis "contrôle total" pour "tout le monde". Des idées? le SDK ne mentionne pas exactement le type de LSA d'isolation créé pour le code dans les paquets auth.

  2. Le deuxième problème est le test du point d'accès. Actuellement, à chaque modification, je reconstruis la bibliothèque, la copie sur une machine virtuelle de test, puis dans le dossier System32 et la redémarre. Y a-t-il un moyen plus facile de faire cela?

Merci d'avance!

+3

Est-ce toujours non résolu? Je travaille sur un projet similaire et j'aimerais savoir comment faire une authentification personnalisée. Je suis en train de voter pour votre question. – tjameson

+0

Oui, à ce moment-là j'ai résolu ce problème. S'il vous plaît poser une question concernant votre problème spécifique et je vais essayer de vous aider autant que possible. Jetez aussi un coup d'œil sur cyglsa - le paquet d'authentification LSA qui fait partie de cygwin. C'est très utile. –

+0

Voici mon message sur serverfault: http://serverfault.com/questions/254192/custom-handling-of-domain-user-profile-creation. J'ai trouvé quelques trucs, mais peut-être que tu as rencontré ça quand tu as appris cela. – tjameson

Répondre

3

Débogueur Winlogon et LSASS fait pour la plupart du temps de débogage.

Pour faciliter le débogage, vous pouvez écrire un point d'accès proxy qui exporte les mêmes fonctions. Une fois chargé, vous proxy_ap serait

  1. Copiez le point d'accès réel d'un emplacement connu à un emplacement temporaire.
  2. LoadLibrary que DLL, GetProcAddress de tout, et transmettre tous les appels qu'il reçoit à cette DLL nouvellement chargé.
  3. Surveillez les changements dans le répertoire où l'original AP a été copié à partir
  4. Lorsqu'un changement se produit (et si votre AP a changé) FreeLibrary et goto étape 2

Mais vous devez garder une poignée serrée sur ce qui se passe sur votre cible de développement, car gérer le commutateur dll tout en traitant des demandes provenant de nombreux threads peut devenir un pire cauchemar que ce que vous essayez de résoudre.LogonUI.exe démarre une nouvelle instance à chaque fois, mais LSASS.exe a une longue durée de vie.

+ Jetez un oeil au code source CVSNT (http://cvsnt.sourcearchive.com/). Ils ont un AP sympa qui implémente su. Exécutez l'exemple dans le compte système local avec psexec -s (à partir de Microsoft/SysInternals pstools suite)

1

Votre problème est peut-être que Tout le monde inclut uniquement les utilisateurs authentifiés? C'est juste une supposition.

Je vous suggère d'utiliser le moniteur de processus pour surveiller les messages d'accès refusé ou pour votre chemin. C'est fantastique pour déboguer les problèmes de permissions/chemins de toutes sortes.

Si vous rencontrez le problème au « Unlock Workstation » ou écrans « changement de mot de passe », et il ne vous empêche pas vous connecter, cela devrait être facile à faire - le mettre en cours d'exécution, reproduire le problème, se reconnecter et hey presto.

Sinon, vous pourriez avoir à recourir à des astuces comme l'exécution de ce chemin de code que pour certains comptes d'utilisateurs, sur le Nième essayer, etc.

Questions connexes