Implémentation du package d’authentification Windows personnalisé – LsaApUserLogonEx

Je travaille sur le package d’authentification LSA pour introduire mon mécanisme d’ouverture de session personnalisé dans Windows 10. Jusqu’à présent, j’ai réussi à enregistrer le package d’authentification et à obtenir ma méthode LsaLogonUserEx appelée par LSA. Maintenant, ce qui me bloque, c’est comment préparer les parameters OUT de la méthode LsaApLogOnUser.

NTSTATUS NTAPI LsaApLogonUserEx( IN PLSA_CLIENT_REQUEST ClientRequest, IN SECURITY_LOGON_TYPE LogonType, IN PVOID ProtocolSubmitBuffer, IN PVOID ClientBufferBase, IN ULONG SubmitBufferSize, OUT PVOID *ProfileBuffer, OUT PULONG ProfileBufferSize, OUT PLUID LogonId, OUT PNTSTATUS SubStatus, OUT PLSA_TOKEN_INFORMATION_TYPE TokenInformationType, OUT PVOID *TokenInformation, OUT PUNICODE_STRING *AccountName, OUT PUNICODE_STRING *AuthenticatingAuthority, OUT PUNICODE_STRING *MachineName ); 

Surtout les informations de tampon de profil et de jeton. Suis-je censé ne leur allouer que de la mémoire ou faut-il bien déterminer leurs valeurs et les assigner?

Tout ce qui suit est dans la documentation, mais un peu alambiqué si vous n’êtes pas habitué.

  • TokenInformation : le type de structure que vous renvoyez est déterminé par le paramètre TokenInformationType , que vous avez également défini. Donc, à la fin, vous déterminez quel type de structure vous retournez. Voici une liste des types possibles et des structures associées. Fondamentalement, il s’agit de LSA_TOKEN_INFORMATION_V1 ou de LSA_TOKEN_INFORMATION_NULL .

  • ProfileBuffer : Notez la documentation “Le contenu de cette mémoire tampon est déterminé par le package d’authentification.”. Vous y mettez donc tout ce que vous jugez utile pour votre fournisseur / authentification. Assurez-vous simplement que (cité dans la documentation) “Le package d’authentification est responsable de l’allocation du tampon ProfileBuffer au sein du processus client en appelant la fonction AllocateClientBuffer”.

En général, la documentation de LsaApLogonUserEx indique notamment quand vous (en tant que paquet) devez allouer (ou gratuitement!) Les arguments / mémoire et quand le LSA le fait pour vous. C’est également le cas pour les parameters qui vous préoccupent particulièrement.

Le dernier point est également la raison pour laquelle vous devez utiliser la fonction AllocateClientBuffer pour l’argument ProfileBuffer : afin que le LSA puisse utiliser la fonction “libre” correspondante et non la mémoire corrompue.