Utilisation des fonctions IOCTL_Storage_X
;) Bonjour, ;)
Je cherche à utiliser les fonctions IOCTL_STORAGE_EJECTION_CONTROL, IOCTL_STORAGE_RESERVE, IOCTL_STORAGE_RELEASE de Device IoControl afin de bloquer l'autorun d'un CDROM et de bloquer l'ouverture manuelle du lecteur durant une manipulation.:?
Je n'arrive jamais à effectuer ces actions sans avoir un code d'erreur du type "paramètre incorrect".:aie:
Mon code est :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
HANDLE hTemp;
DWORD dwTemp;
PREVENT_MEDIA_REMOVAL pmrTemp;
dwTemp = 0;
if (::DeviceIoControl(hTemp, IOCTL_STORAGE_RESERVE, NULL, 0, NULL, 0, &dwTemp, NULL))
AfxMessageBox (_T("CD-DVD Drive reserved successfully."));
else
AfxMessageBox (_T("CD-DVD Drive reserved fail"));
pmrTemp.PreventMediaRemoval = FALSE;
if (::DeviceIoControl(hTemp, IOCTL_STORAGE_EJECTION_CONTROL, &pmrTemp, sizeof(PREVENT_MEDIA_REMOVAL), NULL, 0, &dwTemp, NULL))
AfxMessageBox (_T("Unlock driver successed."));
else
AfxMessageBox (_T("Unlock driver failed")); |
Quelqu'un pourrez m'expliquer pourquoi j'ai un echec à chaque action?:roll:
Merci d'avance.:D
Lnlshaped :bug:
IOCTL_STORAGE début de solution
Après mainte recherche j'ai trouvé que l'on pouvait utiliser autre chose pour bloquer l'éjection du CD mais je n'ai toujours pas de solution pour bloquer l'autorun d'un lecteur.
Une petite remarque tout de même :
Quand le lecteur est bloqué en ouverture et que l'utilisateur appuie tout de même sur le bouton le lecteur s'arrète de tourner. Quelqu'un aurait-il une parade pour pouvoir relancer le disque?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
hTemp = ::CreateFile(_T(\\\\.\\F:), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, NULL);
if (hTemp != INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("Wait correct media"));
dwTemp = 0;
pmrTemp.PreventMediaRemoval = FALSE;
if (DeviceIoControl(hTemp,IOCTL_STORAGE_MEDIA_REMOVAL,&pmrTemp,sizeof(PREVENT_MEDIA_REMOVAL),NULL,0,&dwTemp,NULL)>0)
{
AfxMessageBox(_T("Unlock driver successed."));
}
else
AfxMessageBox(_T("Unlock driver failed"));
pmrTemp.PreventMediaRemoval = TRUE;
if (DeviceIoControl(hTemp,IOCTL_STORAGE_MEDIA_REMOVAL,&pmrTemp,sizeof(PREVENT_MEDIA_REMOVAL),NULL,0,&dwTemp,NULL)>0)
{
AfxMessageBox(_T("Lock driver successed."));
}
else
AfxMessageBox(_T("Lock driver failed"));
|
Merci d'avance
Shaped