begin process at 2008 08 08 21:24:53
1 223 607 membres
365 nouveaux aujourd'hui
14 230 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXECUTER EN TANT QUE EN .NET


Information sur la source

Catégorie :Shell Source .NET ( DotNet ) Classé sous : shell, shellas, executer, shellexecute, createprocesswithlogonw Niveau : Débutant Date de création : 25/10/2004 Date de mise à jour : 26/10/2004 03:32:22 Vu : 16 200

Note :
6,5 / 10 - par 2 personnes
6,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note


Description

Une classe qui vous permet d "executer en tant que" , c'est a dire executer un programme sous un user de windows en tant qu'un autre user, de manière transparente pour l'utilisateur (sans que le password n'apparaisse), en .net.
Il y avait deja une source pour faire ca sur le site, mais pas .net, et le code était pas exceptionnellement propre. ( http://www.vbfrance.com/code.aspx?ID=7555 )
Celui là est un peu plus propre a mon gout et c'est une classe.

Source

  • Imports System
  • Imports System.Runtime.InteropServices
  • Public Class clsRunAs
  • Public Const LOGON_WITH_PROFILE = &H1&
  • Public Const LOGON_NETCREDENTIALS_ONLY = &H2&
  • Public Const CREATE_DEFAULT_ERROR_MODE = &H4000000
  • Public Const CREATE_NEW_CONSOLE = &H10&
  • Public Const CREATE_NEW_PROCESS_GROUP = &H200&
  • Public Const CREATE_SEPARATE_WOW_VDM = &H800&
  • Public Const CREATE_SUSPENDED = &H4&
  • Public Const CREATE_UNICODE_ENVIRONMENT = &H400&
  • Public Const ABOVE_NORMAL_PRIORITY_CLASS = &H8000&
  • Public Const BELOW_NORMAL_PRIORITY_CLASS = &H4000&
  • Public Const HIGH_PRIORITY_CLASS = &H80&
  • Public Const IDLE_PRIORITY_CLASS = &H40&
  • Public Const NORMAL_PRIORITY_CLASS = &H20&
  • Public Const REALTIME_PRIORITY_CLASS = &H100&
  • Public Structure PROCESS_INFO
  • Public hProcess As IntPtr
  • Public hThread As IntPtr
  • Public dwProcessId As Integer
  • Public dwThreadId As Integer
  • End Structure
  • Public Structure STARTUP_INFO
  • Public cb As Integer
  • Public lpReserved As Integer
  • <MarshalAs(UnmanagedType.LPTStr)> _
  • Public lpDesktop As String
  • <MarshalAs(UnmanagedType.LPTStr)> _
  • Public lpTitle As String
  • Public dwX As Long
  • Public dwY As Integer
  • Public dwXSize As Integer
  • Public dwYSize As Integer
  • Public dwXCountChars As Integer
  • Public dwYCountChars As Integer
  • Public dwFillAttribute As Integer
  • Public dwFlags As Integer
  • Public wShowWindow As Short
  • Public cbReserved2 As Short
  • Public lpReserved2 As Integer
  • Public hStdInput As Integer
  • Public hStdOutput As Integer
  • Public hStdError As Integer
  • End Structure
  • <DllImport("C:\\Windows\\System32\\advapi32.dll")> _
  • Public Shared Function CreateProcessWithLogonW( _
  • <MarshalAs(UnmanagedType.LPWStr)> ByVal lpUsername As String, _
  • <MarshalAs(UnmanagedType.LPWStr)> ByVal lpDomain As String, _
  • <MarshalAs(UnmanagedType.LPWStr)> ByVal lpPassword As String, _
  • ByVal dwLogonFlags As Integer, _
  • <MarshalAs(UnmanagedType.LPWStr)> ByVal lpApplicationName As String, _
  • <MarshalAs(UnmanagedType.LPWStr)> ByVal lpCommandLine As String, _
  • ByVal lpCreationFlags As Integer, _
  • ByVal lpVoid As Integer, _
  • <MarshalAs(UnmanagedType.LPWStr)> ByVal lpCurrentDirectory As String, _
  • ByRef lpStartupInfo As STARTUP_INFO, _
  • ByRef lpProcessInfo As PROCESS_INFO) As Boolean
  • End Function
  • Public Sub start(ByVal strCMD As String, ByVal strUser As String, ByVal strPass As String, Optional ByVal strArguments As String = "")
  • Dim strDomain As String
  • Try
  • strDomain = Split(strUser, "\")(0)
  • strUser = Split(strUser, "\")(1)
  • Catch
  • ' no Domain given Try invoking users Domain
  • strDomain = System.Environment.UserDomainName
  • End Try
  • Dim lres As Long
  • Dim pStartInfo As STARTUP_INFO
  • Dim pProcessInfo As PROCESS_INFO
  • Dim LOGON_NETCREDENTIALS_ONLY As Long = LOGON_WITH_PROFILE
  • Dim CREATE_DEFAULT_ERROR_MODE As Long = CREATE_DEFAULT_ERROR_MODE
  • Dim lpUsername As String = strUser
  • Dim lpPassword As String = strPass
  • Dim lpApplicationName As String = strCMD
  • Dim lpdomainname As String = strDomain
  • Dim lpcommandline As String
  • If strArguments = "" Then
  • lpcommandline = VariantType.Null
  • Else
  • lpcommandline = strArguments
  • End If
  • Dim lpCurrentDirectory As String = "c:\"
  • pStartInfo.cb = Len(pStartInfo)
  • pStartInfo.lpTitle = "MowConsole"
  • pStartInfo.dwFlags = 0&
  • Try
  • lres = CreateProcessWithLogonW(lpUsername, lpdomainname, lpPassword, LOGON_NETCREDENTIALS_ONLY, lpApplicationName, lpcommandline, CREATE_DEFAULT_ERROR_MODE, 0, lpCurrentDirectory, pStartInfo, pProcessInfo)
  • Catch ec As Exception
  • MsgBox(ec.ToString)
  • End Try
  • End Sub
  • End Class
Imports System
Imports System.Runtime.InteropServices
Public Class clsRunAs
    Public Const LOGON_WITH_PROFILE = &H1&
    Public Const LOGON_NETCREDENTIALS_ONLY = &H2&
    Public Const CREATE_DEFAULT_ERROR_MODE = &H4000000
    Public Const CREATE_NEW_CONSOLE = &H10&
    Public Const CREATE_NEW_PROCESS_GROUP = &H200&
    Public Const CREATE_SEPARATE_WOW_VDM = &H800&
    Public Const CREATE_SUSPENDED = &H4&
    Public Const CREATE_UNICODE_ENVIRONMENT = &H400&
    Public Const ABOVE_NORMAL_PRIORITY_CLASS = &H8000&
    Public Const BELOW_NORMAL_PRIORITY_CLASS = &H4000&
    Public Const HIGH_PRIORITY_CLASS = &H80&
    Public Const IDLE_PRIORITY_CLASS = &H40&
    Public Const NORMAL_PRIORITY_CLASS = &H20&
    Public Const REALTIME_PRIORITY_CLASS = &H100&

    Public Structure PROCESS_INFO
        Public hProcess As IntPtr
        Public hThread As IntPtr
        Public dwProcessId As Integer
        Public dwThreadId As Integer
    End Structure
    Public Structure STARTUP_INFO
        Public cb As Integer
        Public lpReserved As Integer
        <MarshalAs(UnmanagedType.LPTStr)> _
        Public lpDesktop As String
        <MarshalAs(UnmanagedType.LPTStr)> _
        Public lpTitle As String
        Public dwX As Long
        Public dwY As Integer
        Public dwXSize As Integer
        Public dwYSize As Integer
        Public dwXCountChars As Integer
        Public dwYCountChars As Integer
        Public dwFillAttribute As Integer
        Public dwFlags As Integer
        Public wShowWindow As Short
        Public cbReserved2 As Short
        Public lpReserved2 As Integer
        Public hStdInput As Integer
        Public hStdOutput As Integer
        Public hStdError As Integer
    End Structure

    <DllImport("C:\\Windows\\System32\\advapi32.dll")> _
    Public Shared Function CreateProcessWithLogonW( _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal lpUsername As String, _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal lpDomain As String, _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal lpPassword As String, _
    ByVal dwLogonFlags As Integer, _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal lpApplicationName As String, _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal lpCommandLine As String, _
    ByVal lpCreationFlags As Integer, _
    ByVal lpVoid As Integer, _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal lpCurrentDirectory As String, _
    ByRef lpStartupInfo As STARTUP_INFO, _
    ByRef lpProcessInfo As PROCESS_INFO) As Boolean
    End Function

    Public Sub start(ByVal strCMD As String, ByVal strUser As String, ByVal strPass As String, Optional ByVal strArguments As String = "")
        Dim strDomain As String
        Try
            strDomain = Split(strUser, "\")(0)
            strUser = Split(strUser, "\")(1)
        Catch
            ' no Domain given Try invoking users Domain 
            strDomain = System.Environment.UserDomainName
        End Try

        Dim lres As Long
        Dim pStartInfo As STARTUP_INFO
        Dim pProcessInfo As PROCESS_INFO
        Dim LOGON_NETCREDENTIALS_ONLY As Long = LOGON_WITH_PROFILE
        Dim CREATE_DEFAULT_ERROR_MODE As Long = CREATE_DEFAULT_ERROR_MODE
        Dim lpUsername As String = strUser
        Dim lpPassword As String = strPass
        Dim lpApplicationName As String = strCMD
        Dim lpdomainname As String = strDomain
        Dim lpcommandline As String
        If strArguments = "" Then
            lpcommandline = VariantType.Null
        Else
            lpcommandline = strArguments
        End If

        Dim lpCurrentDirectory As String = "c:\"
        pStartInfo.cb = Len(pStartInfo)
        pStartInfo.lpTitle = "MowConsole"
        pStartInfo.dwFlags = 0&
        Try
            lres = CreateProcessWithLogonW(lpUsername, lpdomainname, lpPassword, LOGON_NETCREDENTIALS_ONLY, lpApplicationName, lpcommandline, CREATE_DEFAULT_ERROR_MODE, 0, lpCurrentDirectory, pStartInfo, pProcessInfo)
        Catch ec As Exception
            MsgBox(ec.ToString)
        End Try
    End Sub
End Class

26 octobre 2004 03:32:23 :
Mise en page.
  • signaler à un administrateur
    Commentaire de dionysos6868 le 27/10/2004 08:15:15

    tu dit "Celui là est un peu plus propre a mon gout et c'est une classe."

    un peu plus propre il faut le dire vite car c'est deux chose différente de faire un vb6 et en vb.net et puis dans ton code je ne vois aucun commentaire.

    Sinon merci

  • signaler à un administrateur
    Commentaire de jmenfous le 27/10/2004 14:00:30

    je ne suis pas ok avec l'idee "c'est deux chose différente de faire un vb6 et en vb.net".

    Un personne qui programme proprement en vb6 ne doit pas avoir un code trop different au niveau de la structure; les classes, moduls et autres ne sont pas propres a vb Net....

    Bon Ok Type est mort mais il a un petit frere ;-)

  • signaler à un administrateur
    Commentaire de Alain Proviste le 27/10/2004 17:38:54 administrateur CS

    Le code est transpartent, pas besoin de commenter.
    Sinon si vous pouviez tester le code pour wds 2000 pro et XP pro ca me rendrait service.

  • signaler à un administrateur
    Commentaire de sly535 le 02/11/2004 08:51:50

    Je mettrai une bonne note pour ce module d'administration quand il y aura un exemple d'application car ca manque un peu de commentaire. Si non l'idée est vraiment sympa !

  • signaler à un administrateur
    Commentaire de Benouille le 03/11/2004 11:39:35

    j'ai pas tout compris, ça doit pas être assez trop beaucoup transparent pour moi.

    l'idée a l'air sympa, mais sans commentaire et vu la remarque de l'auteur j'ai plutot envie de mettre 1, ou 2 pour le code. donc je préfère pas noter.

    d'un autre coté <MarshalAs(UnmanagedType.LPWStr)> ça me parle pas donc je me renseignerais. ton mot de passe invisble, c'est un peu bidon puisque de toutes façons tu connais pas le user et qu'il est pas crypté plus que ça (ou alors une chose m'échappe dans ton code). et puis ça aussi:
    Public Const LOGON_NETCREDENTIALS_ONLY = &H2&
    Dim LOGON_NETCREDENTIALS_ONLY As Long = LOGON_WITH_PROFILE
    ça me parle pas trop

    dommage que le code soit un gros paté tout crado, il donne pas envie d'être lu, pourtant le contenu a l'iar bien sur le papier.

    donc pour conclure, je dirais comme sly, un exemple et des commentaires pour que ça puisse servir.

    Benouille

  • signaler à un administrateur
    Commentaire de Alain Proviste le 03/11/2004 13:46:25 administrateur CS

    Il y a peut-etre des erreurs dans le code mais ce code est vieux et j'ai pas envie de m'y remettre. La note de ce code m'indiffere completement, mettez 2 ou 1 ca ne change rien : ce qui auront besoin de ce code le trouveront et arriveront probablement à s'en servir.

  • signaler à un administrateur
    Commentaire de Benouille le 03/11/2004 15:17:04

    super, bonne mentalité, tu mets un code tu sais pas si il marche, il est meme peut etre pas de toi, et t'imagines que des mecs vont se plonger dedans? prochain code de toi je l'ouvre meme pas, si c'est pour passer une heure sur un truc tout moche et entendre un mec hautain me dire jm'en fous ...

  • signaler à un administrateur
    Commentaire de Alain Proviste le 03/11/2004 15:18:32 administrateur CS

    C'est bien ce que je disais, ca m'indiffère :p

  • signaler à un administrateur
    Commentaire de Alain Proviste le 03/11/2004 15:25:16 administrateur CS

    Les sources que je publie ne sont pas destinées à etre appriécées comme des oeuvres d'arts mais plutot à etre réutilisées par des personnes qui sont suceptibles d'en avoir besoin.
    Le code fonctionne parfaitement chez moi sous XP Pro Et 2000 Pro Mais avec les services packs et les versions du framework il y a parfois des incompatibilités et c'est pour cela que j'ai demandé si d'éventuelles personnes motivées pouvaient vérifier son fonctionnement sous d'autres conditions.

  • signaler à un administrateur
    Commentaire de jmenfous le 03/11/2004 15:38:08

    Un test avec un domaine ca te dirait?

    Des que j'ai un peu de temps je fais le test sur le domaine (NT4, 2000, XP SP1 et SP2)

  • signaler à un administrateur
    Commentaire de Alain Proviste le 03/11/2004 15:39:32 administrateur CS

    Ca serait vraiment sympa.

  • signaler à un administrateur
    Commentaire de jmenfous le 03/11/2004 16:19:46

    XPpro Pro SP2 Workgroup -> OK
    XPpro Pro SP1 Domaine -> OK
    XPpro Pro SP2 Domaine -> OK
    2000Pro SP4 Domaine -> Non DLL introuvable sur la machine

    NT4 Worstation -> Non DLL introuvable sur la machine

    et serise sur le gateau :
    2003 Serveur en controleur de domaine -> OK

    Etrangement un programme lance avec les droit de l'utilisateur en cours se lance san sutiliser les themes XP. Pour les histoires de DLL, je n'ai pas cherche a inclure les DLL de mes Xp, j'aime bien qaund un PC garde c'est DLL et pas celles du voisin ;-)

    PS: du fait des restrictions de securite du framework, mes tests n'ont pas fonctione a partir de partages reseau.

    @+ bonne continuation.

  • signaler à un administrateur
    Commentaire de Alain Proviste le 03/11/2004 16:51:46 administrateur CS

    Moi ca fonctionne sous wds2000 pro sp4 mais j'avoue qu'il n'est pas impossible que mes dll aient été remplacées.
    Je te suis extremement reconnaissant pour ces tests.

  • signaler à un administrateur
    Commentaire de jmenfous le 03/11/2004 17:04:29

    De rien, je voulais juste faire des tests car je ne note jamais dans le vide.

  • signaler à un administrateur
    Commentaire de DarkenerDaemonEx le 21/02/2006 15:00:26

    En VB8 (.NET2) par contre ça se résume en une seule ligne :
    System.Diagnostics.Process.Start(System.String filename[, System.String arguments], System.String userName, System.Security.SecureString password, System.String domain)

  • signaler à un administrateur
    Commentaire de Alain Proviste le 21/02/2006 17:01:35 administrateur CS

    je ne savais pas ! merci beaucoup!!

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS