11
votes

Comment imiter un utilisateur pour une copie de fichier sur le réseau lorsque DNS ou NetBIOS n'est pas disponible

Duplicaté possible:

Accéder à des lecteurs de réseau protégés par mot de passe dans Windows en C #?

J'ai Computera sur DomainA en cours d'exécution comme Usera nécessitant copier un fichier très volumineux sur ComputerB sur WorkgroupB, qui possède l'IP de 192.168.10.2 dans une action Windows que seule Userb a un accès écrit.

là N'EST AUCUN NETBIOS OU DNS RESOLVÉ DE NETBIOS DE NETBIO DONS L'ordinateur doit être réfrigé par IP

I, j'ai d'abord essayé xxx

mais je reçois un System.security .SecurityException "Le nom fourni n'est pas un nom de compte correctement formé."

donc j'ai essayé xxx

mais je reçois "l'échec de la connexion : Nom d'utilisateur inconnu ou mauvais mot de passe. " Erreur à la place.

alors j'ai essayé xxx

mais logonuser renvoie false avec l'erreur Win32 "Échec de la connexion: utilisateur inconnu Nom ou mauvais mot de passe "

Je sais que mon nom d'utilisateur et mon mot de passe sont corrects, je me suis connecté à ComputerB comme utilisateur.

Tous les recommandations


0 commentaires

3 Réponses :


0
votes

Hors de ma tête, avez-vous essayé xxx

au lieu de xxx

?


1 commentaires

Échec de la connexion: nom d'utilisateur inconnu ou mauvais mot de passe.



8
votes

maïenne ma réponse ici A > Appliquer sur ce que vous essayez?


(copie de la réponse liée) p>

Cette question m'a eu lieu là où je devais être assez vite dans le même cas. p>

Voici comment j'ai adapté le code: p>

    IntPtr token;

    if (!NativeMethods.LogonUser(
        this.userName,
        this.domain,
        this.password,
        NativeMethods.LogonType.NewCredentials,
        NativeMethods.LogonProvider.Default,
        out token))
    {
        throw new Win32Exception();
    }

    try
    {
        IntPtr tokenDuplicate;

        if (!NativeMethods.DuplicateToken(
            token,
            NativeMethods.SecurityImpersonationLevel.Impersonation,
            out tokenDuplicate))
        {
            throw new Win32Exception();
        }

        try
        {
            using (WindowsImpersonationContext impersonationContext =
                new WindowsIdentity(tokenDuplicate).Impersonate())
            {
                // Do stuff with your share here.

                impersonationContext.Undo();
                return;
            }
        }
        finally
        {
            if (tokenDuplicate != IntPtr.Zero)
            {
                if (!NativeMethods.CloseHandle(tokenDuplicate))
                {
                    // Uncomment if you need to know this case.
                    ////throw new Win32Exception();
                }
            }
        }
    }
    finally
    {
        if (token != IntPtr.Zero)
        {
            if (!NativeMethods.CloseHandle(token))
            {
                // Uncomment if you need to know this case.
                ////throw new Win32Exception();
            }
        }
    }


3 commentaires

Il semblerait que mon 3ème chemin (très proche de ce que vous avez fait) est la bonne façon. Utiliser votre code, cela a fonctionné bien.


Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses uniquement des liaisons peuvent devenir invalides si la page liée change.


Tu es mon héros! J'ai travaillé sur ce problème pendant une telle période et avec des approches différentes. Aucun n'a travaillé avec la propriété intellectuelle. SUPER! Merci.



1
votes
if ( LogonUser(userName,   
                               domain,
                               password,
                               **LOGON32_LOGON_TYPE,
                               LOGON32_PROVIDER_DEFAULT,**
                               ref token ) != 0 )      
                { 

0 commentaires