IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Lancer un Exe


Sujet :

Windows

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Points : 45
    Points
    45
    Par défaut Lancer un Exe
    Bonjour a tous, j'espère que je suis dans la bonne section.

    Voilà, je souhaiterais développer un Driver Windows, qui effectue des opérations lorsqu'un utilisateur ouvre un fichier.

    J'ai trouvé sur internet la code suivant : (je suis pas très bon en C++ désolé )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <ntddk.h>
    #define  BUFFER_SIZE 30
    //
        HANDLE   handle;
        NTSTATUS ntstatus;
        IO_STATUS_BLOCK    ioStatusBlock;
        LARGE_INTEGER      byteOffset;
       CHAR     buffer[BUFFER_SIZE];
        size_t  cb;
     
    NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)  
    {
             NTSTATUS NtStatus = STATUS_SUCCESS;
             /////////////////////// THIS SECTION /////////////////////////////////////
     UNICODE_STRING     uniName;
         OBJECT_ATTRIBUTES  objAttr;
     
     ////////////////////////////////   \\SystemRoot\\ or C:\WINDOWS / C:|WINNT
      RtlInitUnicodeString(&uniName, L"\\SystemRoot\\native.txt");  // or L"\\SystemRoot\\example.txt"
         InitializeObjectAttributes(&objAttr, &uniName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
     //////////////////////////////////
     ///////////////////////////////////
     //Load the buffer (ie. contents of text file to the console)
      ntstatus = ZwCreateFile(&handle,
                                GENERIC_READ,
                                &objAttr, &ioStatusBlock,
                                NULL,
                                FILE_ATTRIBUTE_NORMAL,
                                0,
                                FILE_OPEN, 
                                FILE_SYNCHRONOUS_IO_NONALERT,
                                NULL, 0);
     ///////////////////////////////////////
     if(NT_SUCCESS(ntstatus)) {
             byteOffset.LowPart = byteOffset.HighPart = 0;
             ntstatus = ZwReadFile(handle, NULL, NULL, NULL, &ioStatusBlock,
                                  buffer, BUFFER_SIZE, &byteOffset, NULL);
            buffer[BUFFER_SIZE-1] = '\0';
               KdPrint(("%s\n", buffer));
     
             }
            ZwClose(handle);
       return 0;
    }
    Ma question est la suivante : Est-il possible de lancer un exe (par exemple notepad.exe), à la place du "KdPrint" et de lui passer en paramètre le filename ?

    Merci à tous pour vos réponses.

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Il faut appeler ZwCreateProcess qui s'utilise à peu près comme CreateProcess ...

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Points : 45
    Points
    45
    Par défaut
    Super, merci beaucoup ! Je vais me renseigner sur cette fonction. Sais tu quelle est la différence avec NtCreateProcess ?

    Merci

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Bah, c'est comme pour toute fonction Zw : d'une part, le système ne valide pas les arguments avant de continuer donc code plus rapide mais risque plus élevé de plantage si jamais tu as fourni n'importe quoi à la fonction et d'autre part, du fait de sa dangerosité, elle ne peut-être appelée que par un driver en mode kernel, alors que les fonctions Nt peuvent aussi bien être appelées dans un driver en mode kernel que dans n'importe quelle autre application.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Points : 45
    Points
    45
    Par défaut
    Ah ok je vois. Merci pour ces informations. Je vais faire quelques recherches sur Google concernant l'implémentatio nde cette fonction. Aurais tu quelques liens qui pourraient me guider par hasard ?

    Merci beaucoup.

  6. #6
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Implémentation ? Je te rappelle que Windows n'est pas Open source . Si c'est de la doc que tu voulais parler, c'est tout simplement dans l'aide. A part ça, j'ai appris à programmer les drivers avec l'aide du DDK et les tutoriels de CodeProject, notamment ceux de de Toby Opferman donc si tu me demandes de t'orienter, je ne peux évidemment que te les conseiller.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Points : 45
    Points
    45
    Par défaut
    Je crois que je patine un peu dans la choucroute...
    J'ai regardé les sites que tu m'a fourni mais j'ai un peu de mal à ecrire cette fonction dans mon exemple...

    J'ai pas mal cherché sur Google et apparemment c'est une fonctione très peu documentée, ce qui ne rend pas les choses faciles pour moi qui débute en programmation de drivers.

    Je sais que c'est un peu trop demander mais pourrais tu me guider un peu stp ?

    Je te remercie beaucoup !

  8. #8
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Si mes souvenirs sont bons, ZwCreateProcess() ne sert qu'a initialiser le "conteneur" processus (la structure EPROCESS) mais il n'y a pas de création de thread primaire, donc pas de stack userland.

    De plus ZwCreateProcess() n'informe pas le subsystem (CSRSS) de la création du processus et tant que ça n'est pas fait, le process n'existe pas.

    En gros j'abandonnerais l'idée. Le kernel n'est pas fait pour démarrer un processus et une bonne partie de la création se déroule en user-land.

  9. #9
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Bah, toi au moins t'as des souvenirs . Honnêtement, je n'ai jamais tenté de lancer un processus depuis un driver mais tout ce temps j'étais convaincu que ça pouvait se faire avec Nt ou Zw CreateProcess. Pire, j'ai un peu parcouru la doc et je viens d'apprendre que CreateProcess lui-même n'utilise pas ces fonctions pour lancer un processus .

    Citation Envoyé par wmenant
    J'ai regardé les sites que tu m'a fourni mais j'ai un peu de mal à ecrire cette fonction dans mon exemple...
    Ah, je ne savais pas que tu étais encore dans la création de process. Je croyais que tu voulais juste des docs sur laprogrammation de drivers en général.

Discussions similaires

  1. [FreePascal] Lancer un exe
    Par Ultraboss dans le forum Free Pascal
    Réponses: 4
    Dernier message: 02/11/2005, 19h03
  2. Réponses: 7
    Dernier message: 10/10/2005, 18h54
  3. [VS .NET] Comment lancer un .exe
    Par lastcheper dans le forum MFC
    Réponses: 2
    Dernier message: 31/08/2005, 15h38
  4. [Flash MX2004] Lancer un *.exe avec fscommand
    Par pioup dans le forum Flash
    Réponses: 7
    Dernier message: 30/07/2004, 16h28
  5. [Debutant(e)]Lancer un exe en ligne de commande
    Par MASSAKA dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 18/05/2004, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo