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

C Discussion :

[WIN API] DeviceIoControl


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 7
    Par défaut [WIN API] DeviceIoControl
    Salut a tous !

    Je développe un " driver " , permettant de cacher un processus dans le Task Manager.

    Mon problème est que je n'arrive pas a envoyer un IOCTL a mon driver , avec la fonction DeviceIoControl. Cette fonction me renvoie une erreur 87,
    ceux qui correspond a: ERROR_INVALID_PARAMETER.

    J'ai tous vérifier plein de fois et je vois vraiment pas où je me suis trompé... :/

    Donc si quelqu'un pourrais m'aider ça serait cool .
    J'espère avoir bien expliqué mon problème, sinon dite le moi...

    Voila le code:

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <windows.h>
    #include <winioctl.h>
     
    #define SIOCTL_TYPE 40000
    #define IOCTL_NAME_PROCESS CTL_CODE(SIOCTL_TYPE, 0x801, METHOD_BUFFERED, FILE_READ_DATA|FILE_WRITE_DATA)
     
    static void purger( void )
    {
        int c;
     
        while( ( c = getchar() ) != '\n' && c != EOF )
        {
        }
    }
     
    static void clean( char *string )
    {
        char *p = strchr( string , '\n' );
     
        if( p )
        {
            *p = 0;
        }
        else
        {
            purger();
        }
    }
     
    int __cdecl main(int argc, char* argv[])
    {
        char *process = ( char* )malloc( sizeof( char ) * 50 );
     
        HANDLE hDevice;
        DWORD d;
        DWORD size = sizeof( process );
     
        BOOL test;
     
        printf("Process name: ");
        fgets( process , sizeof( process ) , stdin );
        clean( process );
     
     
        //hDevice = CreateFile( "\\\\.\\ProcessHide.sys" , GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ | FILE_SHARE_WRITE , 0 , OPEN_EXISTING ,  FILE_ATTRIBUTE_NORMAL , 0 );
     
        //hDevice = CreateFile( "C:\\Users\\Raphaël\\Documents\\DriverProject\\ProcessHide\\ProcessHide.sys" , GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ | FILE_SHARE_WRITE , 0 , OPEN_EXISTING ,  FILE_ATTRIBUTE_NORMAL , 0 );
     
        hDevice = CreateFile( ".\\ProcessHide.sys" , GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ | FILE_SHARE_WRITE , 0 , OPEN_EXISTING ,  FILE_ATTRIBUTE_NORMAL , 0 );
     
        if( hDevice == INVALID_HANDLE_VALUE )
        {
            printf("Error Open Device");
            printf("\nError %d", GetLastError() );
     
            Sleep(1000);
        }
        else
        {
     
            printf("Works ! ");
            Sleep(1000);
        }
     
        test = (BOOL)DeviceIoControl( hDevice , IOCTL_NAME_PROCESS , process , size , NULL , 0 , &d , (LPOVERLAPPED) NULL );
     
        if( test == 0 )
        {
            printf("\nError DeviceIoControl");
            printf("\nErro %d", GetLastError() );
     
            Sleep(1000);
        }
     
     
        CloseHandle( hDevice );
     
        return 0;
     
    }
    Merci d'avance !

    PS: Le prototype de DeviceIoControl est disponible ici => http://msdn.microsoft.com/en-us/librar [...] VS.85%29.aspx

    Et je compile avec gcc ( inclus dans la dernière version de codeblocks )

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Bonjour,
    1. Je n'appelle pas ça un driver, mais un rootkit. Cela va à l'encontre de tous mes principes, je refuse donc de t'aider.
    2. J'ai déjà vu une erreur flagrante, mais j'ignore si c'est vraiment elle qui fait foirer la fonction.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 7
    Par défaut
    Mon but n'est pas de faire un rootkit , mais simplement d'apprendre a coder ce genre de logiciel , pour faire un article pour mon labo.

    Libre a toi de me dire l'erreur que tu a vu ou pas.

    Merci quand meme d'avoir répondu.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je vais t'accorder le bénéfice du doute pour l'instant.
    L'erreur est présente dans ton utilisation de sizeof(), qui te retourne la taille du pointeur et non celle de la zone mémoire allouée.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 7
    Par défaut
    Deja merci de me faire confiance !

    Ensuite effectivement j'avais pas vu cette erreur , j'ai donc remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DWORD size = sizeof( process );
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DWORD size = sizeof( *process );
    Cependant ça me renvoie la même erreur...

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ça ne change rien.
    L'opérateur sizeof est 100% statique, et ne marche pas sur les zones mémoire allouées dynamiquement.*

    *sauf dans le cas des Variable-Length Arrays (VLAs) de la norme C99, mais c'est vraiment un cas à part.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [Win API] problème avec WriteFile
    Par acryline dans le forum Windows
    Réponses: 5
    Dernier message: 02/11/2006, 09h26
  2. Win API : GetOpenFileName
    Par acryline dans le forum Windows
    Réponses: 4
    Dernier message: 02/11/2006, 08h16
  3. [Win API] insérer une flexgrid.(c' est une grille)
    Par bmatthieu3 dans le forum Windows
    Réponses: 3
    Dernier message: 15/10/2006, 14h26
  4. [Win API] insérer une flexgrid
    Par bmatthieu3 dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 09/10/2006, 16h46
  5. Réponses: 4
    Dernier message: 05/09/2005, 16h01

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