Question

Je cherche à ce sujet depuis la semaine dernière, presque tous les liens sur DriveDetter x DevicePath / Volume / Périphérique ID / Quel que soit le violet pour moi.

Je développe une application qui répertorie certains périphériques de sotorage ainsi que des périphériques HDI / WPD à l'aide de fonctions SETUPAPI avec ces GUIDS GUID_DEEVIANFACE_USB_DEvice "A5DCBF10-6530-11D2-901F-00C04FB951F-00C04FB951FR-B6BF-11D0-94F2-00A0C91FB8B ".

Alors ... je suis déjà capable de mapper des appareils avec une lettre de lecteur. Comment? Avec SetuPAPI Résultat, à l'aide de DevicePath pour obtenir un Number et partitionnéNumber avec DeviceIocontrol. Et ça va !!! En fait pas tous. Effectivement à cdrom Drives, je ne peux pas l'obtenir.

Voici mon code.

int bytesReturned = 0;
IOCTL.DiskExtents de1 = new IOCTL.DiskExtents();
int numDiskExtents = 0;
IntPtr ptrDe1 = Marshal.AllocHGlobal(Marshal.SizeOf(de1));
bool result = IOCTL.DeviceIoControl(FileHandle, IOCTL.IOControlCodes.IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, IntPtr.Zero, 0, ptrDe1, Marshal.SizeOf(de1), bytesReturned, null);
if ((!result)) {
    Marshal.FreeHGlobal(ptrDe1);
    //libera a memória alocada.
    throw new System.ComponentModel.Win32Exception(); //is thrown here
} else {
    de1 = Marshal.PtrToStructure(ptrDe1, typeof(IOCTL.DiskExtents));
    Marshal.FreeHGlobal(ptrDe1);
    return de1.first.DiskNumber;
}

pour tout le lecteur CDDOM I, j'ai une mauvaise utilisation.

Pour obtenir le fichierHandle, j'utilise les deux, lecteur de lecteur (comme "\. \ D:") et le chemin du périphérique. Et les deux échouent.

Je ne sais pas si je fais quelque chose de mal, provoquer ce travail pour le stockage de masse USB et les disques durs.

merci.

Était-ce utile?

La solution

Maintenant, j'utilise Volummename de DevicePath au lieu de Disknumber et partitionnéNumber. Nous obtenons un nom de volumain de "\. \ C:" et le périphériquePath.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top