2010-04-29 13 views
0

J'ai écrit un script de gestionnaire d'utilisateurs qui utilise NTLMSetUserInfo pour définir les mots de passe de certains utilisateurs, y compris ADMIN ... Ce que j'ai remarqué c'est que si je fais cela, la combinaison nom d'utilisateur/mot de passe fonctionne parfaitement pour tous les scénarios tels que Telnet, HTTP Auth etc, mais pas la navigation de fichiers. Après une inspection plus poussée, j'ai remarqué que lors du réglage du mot de passe Admin via les pages Web de configuration CE intégrées, cela fonctionne.Problème avec le réglage du mot de passe ADMIN sous Windows CE

Le registre pour l'administrateur ressemble quand j'utilise NTLMSetUserInfo

NT = [hex value] 

Le registre pour l'administrateur contient un champ supplémentaire, Password quand je mets le mot de passe admin via les pages web CE.

NT = [hex value] 
Password = [hex value] 

je figure NTLMSetUserInfo ne définit pas le mot de passe global de la CE pour l'administrateur correctement, donc ne pas être en mesure de déposer sur la boîte parcourir.

J'ai trouvé la fonction suivante dans la DLL d'analyse de code Web CE qui fait le travail appelé SetPassword. J'ai écrit une fonction séparée pour traiter les cas d'administration, mais je ne peux pas le compiler. Voici un extrait de celui-ci

#include <windbase.h> 

bool UserAccounts::SetAdminPassword(const std::string &passwordOld, const std::string &password) 
{ 
    wchar_t wpass[512]; 
    wchar_t wpassold[512]; 

    mbstowcs(wpass, password.c_str(), 512); 
    mbstowcs(wpassold, passwordOld.c_str(), 512); 

    return SetPassword(wpassold, wpass) == TRUE; 
} 

Ce ne sera pas compilé indiquant que 'SetPassword': identifier not found. Je remarque que dans le CE documentation for SetPassword il a la ligne suivante

Pour utiliser cette fonction, vous devez inclure le composant de mot de passe, Fspass, dans votre fichier Cesysgen.bat.

Je ne sais pas ce que cela signifie que je suis assez nouveau pour PlatformBuilder etc ...

Quelqu'un peut-il me aider ou me diriger dans la bonne direction?

Répondre

0

Ajouter ce qui suit au début de votre fichier de code:

extern "C" BOOL SetPassword(LPWSTR lpszOldPassword, LPWSTR lpszNewPassword); 

L'éditeur de liens fera le reste.

+0

Doh! Vous pensez que c'est le problème? J'aurais dû y penser ... – Shaihi

+0

Oui, c'est le raccourci quand vous ne trouvez pas l'en-tête. J'ai tendance à le faire beaucoup pour les fonctions que je connais, mais je ne trouve pas la déclaration (TouchCalibrate, SetPassword, etc.). – ctacke

0

Je ne peux pas donner une réponse exacte maintenant (jamais utilisé cette authentification). Mais, je ai juste essayé d'utiliser (en fait compiler) SetPassword dans une version clonée du pilote BluetoothGuide AudioGateway que j'ai et il compile sans problèmes. Lorsque j'ai essayé de l'utiliser dans un sous-projet ou un projet indépendant régulier, j'ai eu la même erreur que vous avez eue. Donc, une solution rapide pourrait être de le faire dans un pilote et de voir si cela fonctionne.

En ce qui concerne le commentaire dans les docs, je suppose que cela revient à avoir le SYSGEN_FSPASSWORD sélectionné dans le catalogue bien que je ne l'ai pas encore trouvé. Je suppose que vous avez choisi cette option si vous pouvez définir des mots de passe et autres.

+0

@Shaihi. Merci pour la réponse. Notre SDK a SYSGEN_FSPASSWORD compilé dans ainsi ne peut pas imaginer que le composant ne fait pas partie du SDK. Savez-vous de quoi fait partie LIB, pour que je puisse y faire un lien? – Chris

+0

Je viens de l'ajouter à un pilote normal et il a également été compilé. Je suppose qu'il réside dans 'coredll'. J'ai cherché le nom de la fonction dans le 'coredll.dll' dans le répertoire de publication et il apparaît ici.Avez-vous essayé d'ajouter l'appel à un pilote? – Shaihi