begin process at 2008 08 29 08:19:33
1 233 523 membres
62 nouveaux aujourd'hui
14 291 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 !

EJECTER TIROIR CDROM SOUS NT/XP


Information sur la source

Catégorie :Multimédia Niveau : Débutant Date de création : 03/01/2002 Date de mise à jour : 03/01/2002 00:01:38 Vu / téléchargé: 8 731 / 414

Note :
5 / 10 - par 1 personne
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Il ejecte le tiroir du cdrom.  

Source

  • #include <windows.h>
  • #include <winioctl.h>
  • #include <tchar.h>
  • #include <stdio.h>
  • // Prototypes
  • BOOL EjectVolume(TCHAR cDriveLetter);
  • HANDLE OpenVolume(TCHAR cDriveLetter);
  • BOOL LockVolume(HANDLE hVolume);
  • BOOL DismountVolume(HANDLE hVolume);
  • BOOL PreventRemovalOfVolume(HANDLE hVolume, BOOL fPrevent);
  • BOOL AutoEjectVolume(HANDLE hVolume);
  • BOOL CloseVolume(HANDLE hVolume);
  • LPTSTR szVolumeFormat = TEXT("\\\\.\\%c:");
  • LPTSTR szRootFormat = TEXT("%c:\\");
  • LPTSTR szErrorFormat = TEXT("Error %d: %s\n");
  • void ReportError(LPTSTR szMsg)
  • {
  • _tprintf(szErrorFormat, GetLastError(), szMsg);
  • }
  • HANDLE OpenVolume(TCHAR cDriveLetter)
  • {
  • HANDLE hVolume;
  • UINT uDriveType;
  • TCHAR szVolumeName[8];
  • TCHAR szRootName[5];
  • DWORD dwAccessFlags;
  • wsprintf(szRootName, szRootFormat, cDriveLetter);
  • uDriveType = GetDriveType(szRootName);
  • switch(uDriveType) {
  • case DRIVE_REMOVABLE:
  • dwAccessFlags = GENERIC_READ | GENERIC_WRITE;
  • break;
  • case DRIVE_CDROM:
  • dwAccessFlags = GENERIC_READ;
  • break;
  • default:
  • _tprintf(TEXT("Cannot eject. Drive type is incorrect.\n"));
  • return INVALID_HANDLE_VALUE;
  • }
  • wsprintf(szVolumeName, szVolumeFormat, cDriveLetter);
  • hVolume = CreateFile( szVolumeName,
  • dwAccessFlags,
  • FILE_SHARE_READ | FILE_SHARE_WRITE,
  • NULL,
  • OPEN_EXISTING,
  • 0,
  • NULL );
  • if (hVolume == INVALID_HANDLE_VALUE)
  • ReportError(TEXT("CreateFile"));
  • return hVolume;
  • }
  • BOOL CloseVolume(HANDLE hVolume)
  • {
  • return CloseHandle(hVolume);
  • }
  • #define LOCK_TIMEOUT 10000 // 10 Seconds
  • #define LOCK_RETRIES 20
  • BOOL LockVolume(HANDLE hVolume)
  • {
  • DWORD dwBytesReturned;
  • DWORD dwSleepAmount;
  • int nTryCount;
  • dwSleepAmount = LOCK_TIMEOUT / LOCK_RETRIES;
  • // Do this in a loop until a timeout period has expired
  • for (nTryCount = 0; nTryCount < LOCK_RETRIES; nTryCount++) {
  • if (DeviceIoControl(hVolume,
  • FSCTL_LOCK_VOLUME,
  • NULL, 0,
  • NULL, 0,
  • &dwBytesReturned,
  • NULL))
  • return TRUE;
  • Sleep(dwSleepAmount);
  • }
  • return FALSE;
  • }
  • BOOL DismountVolume(HANDLE hVolume)
  • {
  • DWORD dwBytesReturned;
  • return DeviceIoControl( hVolume,
  • FSCTL_DISMOUNT_VOLUME,
  • NULL, 0,
  • NULL, 0,
  • &dwBytesReturned,
  • NULL);
  • }
  • BOOL PreventRemovalOfVolume(HANDLE hVolume, BOOL fPreventRemoval)
  • {
  • DWORD dwBytesReturned;
  • PREVENT_MEDIA_REMOVAL PMRBuffer;
  • PMRBuffer.PreventMediaRemoval = fPreventRemoval;
  • return DeviceIoControl( hVolume,
  • IOCTL_STORAGE_MEDIA_REMOVAL,
  • &PMRBuffer, sizeof(PREVENT_MEDIA_REMOVAL),
  • NULL, 0,
  • &dwBytesReturned,
  • NULL);
  • }
  • AutoEjectVolume(HANDLE hVolume)
  • {
  • DWORD dwBytesReturned;
  • return DeviceIoControl( hVolume,
  • IOCTL_STORAGE_EJECT_MEDIA,
  • NULL, 0,
  • NULL, 0,
  • &dwBytesReturned,
  • NULL);
  • }
  • BOOL EjectVolume(TCHAR cDriveLetter)
  • {
  • HANDLE hVolume;
  • BOOL fRemoveSafely = FALSE;
  • BOOL fAutoEject = FALSE;
  • // Open the volume.
  • hVolume = OpenVolume(cDriveLetter);
  • if (hVolume == INVALID_HANDLE_VALUE)
  • return FALSE;
  • // Lock and dismount the volume.
  • if (LockVolume(hVolume) && DismountVolume(hVolume)) {
  • fRemoveSafely = TRUE;
  • // Set prevent removal to false and eject the volume.
  • if (PreventRemovalOfVolume(hVolume, FALSE) &&
  • AutoEjectVolume(hVolume))
  • fAutoEject = TRUE;
  • }
  • // Close the volume so other processes can use the drive.
  • if (!CloseVolume(hVolume))
  • return FALSE;
  • if (fAutoEject)
  • printf("Media in Drive %c has been ejected safely.\n",
  • cDriveLetter);
  • else {
  • if (fRemoveSafely)
  • printf("Media in Drive %c can be safely removed.\n",
  • cDriveLetter);
  • }
  • return TRUE;
  • }
  • void Usage()
  • {
  • printf("Usage: Eject <drive letter>\n\n");
  • return ;
  • }
  • void main(int argc, char * argv[])
  • {
  • if (argc != 2) {
  • Usage();
  • return ;
  • }
  • if (!EjectVolume(argv[1][0]))
  • printf("Failure ejecting drive %c.\n", argv[1][0]);
  • return ;
  • }
#include <windows.h>
   #include <winioctl.h>
   #include <tchar.h>
   #include <stdio.h>

   // Prototypes

   BOOL EjectVolume(TCHAR cDriveLetter);

   HANDLE OpenVolume(TCHAR cDriveLetter);
   BOOL LockVolume(HANDLE hVolume);
   BOOL DismountVolume(HANDLE hVolume);
   BOOL PreventRemovalOfVolume(HANDLE hVolume, BOOL fPrevent);
   BOOL AutoEjectVolume(HANDLE hVolume);
   BOOL CloseVolume(HANDLE hVolume);

   LPTSTR szVolumeFormat = TEXT("\\\\.\\%c:");
   LPTSTR szRootFormat = TEXT("%c:\\");
   LPTSTR szErrorFormat = TEXT("Error %d: %s\n");

   void ReportError(LPTSTR szMsg)
   {
       _tprintf(szErrorFormat, GetLastError(), szMsg);
   }

   HANDLE OpenVolume(TCHAR cDriveLetter)
   {
       HANDLE hVolume;
       UINT uDriveType;
       TCHAR szVolumeName[8];
       TCHAR szRootName[5];
       DWORD dwAccessFlags;

       wsprintf(szRootName, szRootFormat, cDriveLetter);

       uDriveType = GetDriveType(szRootName);
       switch(uDriveType) {
       case DRIVE_REMOVABLE:
           dwAccessFlags = GENERIC_READ | GENERIC_WRITE;
           break;
       case DRIVE_CDROM:
           dwAccessFlags = GENERIC_READ;
           break;
       default:
           _tprintf(TEXT("Cannot eject.  Drive type is incorrect.\n"));
           return INVALID_HANDLE_VALUE;
       }

       wsprintf(szVolumeName, szVolumeFormat, cDriveLetter);

       hVolume = CreateFile(   szVolumeName,
                               dwAccessFlags,
                               FILE_SHARE_READ | FILE_SHARE_WRITE,
                               NULL,
                               OPEN_EXISTING,
                               0,
                               NULL );
       if (hVolume == INVALID_HANDLE_VALUE)
           ReportError(TEXT("CreateFile"));

       return hVolume;
   }

   BOOL CloseVolume(HANDLE hVolume)
   {
       return CloseHandle(hVolume);
   }

   #define LOCK_TIMEOUT        10000       // 10 Seconds
   #define LOCK_RETRIES        20

   BOOL LockVolume(HANDLE hVolume)
   {
       DWORD dwBytesReturned;
       DWORD dwSleepAmount;
       int nTryCount;

       dwSleepAmount = LOCK_TIMEOUT / LOCK_RETRIES;

       // Do this in a loop until a timeout period has expired
       for (nTryCount = 0; nTryCount < LOCK_RETRIES; nTryCount++) {
           if (DeviceIoControl(hVolume,
                               FSCTL_LOCK_VOLUME,
                               NULL, 0,
                               NULL, 0,
                               &dwBytesReturned,
                               NULL))
               return TRUE;

           Sleep(dwSleepAmount);
       }

       return FALSE;
   }

   BOOL DismountVolume(HANDLE hVolume)
   {
       DWORD dwBytesReturned;

       return DeviceIoControl( hVolume,
                               FSCTL_DISMOUNT_VOLUME,
                               NULL, 0,
                               NULL, 0,
                               &dwBytesReturned,
                               NULL);
   }

   BOOL PreventRemovalOfVolume(HANDLE hVolume, BOOL fPreventRemoval)
   {
       DWORD dwBytesReturned;
       PREVENT_MEDIA_REMOVAL PMRBuffer;

       PMRBuffer.PreventMediaRemoval = fPreventRemoval;

       return DeviceIoControl( hVolume,
                               IOCTL_STORAGE_MEDIA_REMOVAL,
                               &PMRBuffer, sizeof(PREVENT_MEDIA_REMOVAL),
                               NULL, 0,
                               &dwBytesReturned,
                               NULL);
   }

   AutoEjectVolume(HANDLE hVolume)
   {
       DWORD dwBytesReturned;

       return DeviceIoControl( hVolume,
                               IOCTL_STORAGE_EJECT_MEDIA,
                               NULL, 0,
                               NULL, 0,
                               &dwBytesReturned,
                               NULL);
   }

   BOOL EjectVolume(TCHAR cDriveLetter)
   {
       HANDLE hVolume;

       BOOL fRemoveSafely = FALSE;
       BOOL fAutoEject = FALSE;

       // Open the volume.
       hVolume = OpenVolume(cDriveLetter);
       if (hVolume == INVALID_HANDLE_VALUE)
           return FALSE;

       // Lock and dismount the volume.
       if (LockVolume(hVolume) && DismountVolume(hVolume)) {
           fRemoveSafely = TRUE;

           // Set prevent removal to false and eject the volume.
           if (PreventRemovalOfVolume(hVolume, FALSE) &&
               AutoEjectVolume(hVolume))
               fAutoEject = TRUE;
       }

       // Close the volume so other processes can use the drive.
       if (!CloseVolume(hVolume))
           return FALSE;

       if (fAutoEject)
           printf("Media in Drive %c has been ejected safely.\n",
                  cDriveLetter);
       else {
           if (fRemoveSafely)
               printf("Media in Drive %c can be safely removed.\n",
               cDriveLetter);
       }

       return TRUE;
   }

   void Usage()
   {
       printf("Usage: Eject <drive letter>\n\n");
       return ;
   }

   void main(int argc, char * argv[])
   {
       if (argc != 2) {
           Usage();
           return ;
       }

       if (!EjectVolume(argv[1][0]))
           printf("Failure ejecting drive %c.\n", argv[1][0]);

       return ;
   } 
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de RayBan le 22/11/2005 14:55:15

    Merci microsoft ...

    http://support.microsoft.com/default.aspx?scid=kb;en-us;165721

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS