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 :

Besoin d'aide pour monter un volume


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 204
    Points : 48
    Points
    48
    Par défaut Besoin d'aide pour monter un volume
    Bonjour,

    je veux monter un volume depuis une partition du disque dur et
    DeviceIocontrol me renvoie l'erreur 87 :

    #include "stdafx.h"
    #include <windows.h>
    #include <winioctl.h>




    #pragma pack(push,1)
    typedef struct _tagMountMngrMountPoint
    {
    USHORT SymbolicLinkNameOffset;
    USHORT SymbolicLinkNameLength;
    //ULONG UniqueIdOffset;
    //USHORT UniqueIdLength;
    USHORT DeviceNameOffset;
    USHORT DeviceNameLength;
    } MOUNTMGR_MOUNT_POINT, *PMOUNTMGR_MOUNT_POINT;


    typedef struct _tagMountPoint
    {
    MOUNTMGR_MOUNT_POINT MngrMountPoint;
    WCHAR res0[128];
    WCHAR res1[128];
    } MOUNTPOINT, *PMOUNTPOINT;

    #pragma pack(pop,1)


    #define MOUNTMGRCONTROLTYPE 0x0000006D
    #define MOUNTDEVCONTROLTYPE 0x0000004D // 'M'
    #define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME CTL_CODE(MOUNTDEVCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
    #define IOCTL_MOUNTMGR_CREATE_POINT CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)


    #define MOUNTMGR_DEVICE_NAME "\\Device\\MountPointManager"
    #define MOUNTMGR_DOS_DEVICE_NAME "\\\\.\\MountPointManager"

    MOUNTPOINT MountPoint={0};


    int _tmain(int argc, _TCHAR* argv[])
    {
    HANDLE f=CreateFile("\\\\.\\c:",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
    EMOUNTDEV_NAME x;
    DWORD dt=0;
    DeviceIoControl(f,IOCTL_MOUNTDEV_QUERY_DEVICE_NAME,NULL,0,&x,sizeof (x),&dt,NULL);
    CloseHandle(f);



    swprintf(MountPoint.res0, L"\\DosDevices\\T:");
    MountPoint.MngrMountPoint.SymbolicLinkNameLength = wcslen(MountPoint.res0) * 2;
    MountPoint.MngrMountPoint.SymbolicLinkNameOffset = sizeof(MOUNTMGR_MOUNT_POINT);

    //swprintf(MountPoint.res1, L"\\Device\\Harddisk1\\Partition0");
    memcpy(MountPoint.res1,x.Name,x.NameLength);
    MountPoint.MngrMountPoint.DeviceNameLength = x.NameLength;
    MountPoint.MngrMountPoint.DeviceNameOffset = sizeof(MOUNTMGR_MOUNT_POINT)+sizeof(MountPoint.res0);

    HANDLE hMountPointDir = CreateFile (MOUNTMGR_DOS_DEVICE_NAME,
    GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ, NULL, OPEN_EXISTING,
    0 , NULL);
    SetLastError(0);
    if(DeviceIoControl(
    hMountPointDir,
    IOCTL_MOUNTMGR_CREATE_POINT,
    &MountPoint,
    sizeof(MountPoint),
    NULL,
    0,
    &dt,
    NULL
    )
    )
    {
    printf("OK\n");
    }


    int err=GetLastError();
    CloseHandle(hMountPointDir);

    return 0;


    err=87 (Paramétre invalide).

    Merci de m'aider

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    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. Réponses: 14
    Dernier message: 27/08/2007, 14h32
  2. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  3. [Kylix] besoin d'aide pour installer kylix3
    Par Sph@x dans le forum EDI
    Réponses: 3
    Dernier message: 11/02/2004, 13h53
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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