Diferenciação programada entre a unidade de disquete USB e a unidade flash USB no Windows

No Windows (XP-7), existe uma maneira confiável de diferenciar de forma programática entre unidades de disquete USB e unidades flash USB em C ++?

No momento, estou usando o WMI para obter atualizações quando novasWin32_LogicalDisk instâncias são detectadas e, em seguida, usando o atributo DriveType do objeto LogicalDisk para descobrir um tipo básico. Isso funciona muito bem, exceto que as unidades de disquete e as unidades flash USB são ambas do DriveTypeDRIVE_REMOVABLE, então, para diferenciar entre esses (disquete vs flash), eu estou usando oIOCTL_STORAGE_GET_HOTPLUG_INFO interface para descobrir se o dispositivo é hotpluggable, e estava trabalhando no principal que isso significava que era uma unidade flash e não um disquete. Novamente, eu acho que isso funciona muito bem (se um pouco ineficiente, usando tanto a API WDK quanto o WMI para obter informações) no caso de unidades de disquete internas, mas infelizmente unidades de disquete USB também são hotpluggable a maior parte do tempo, então existe Não há uma maneira clara de diferenciar entre flash e unidades de disquete USB, que eu posso ver. Eu sei que existem propriedades quemaio trabalho, como verificar se o seu mapeado para as unidades reservadas A: ou B (editar: só é relevante se a máquina definitivamente tem uma unidade de disquete - verMS-KB: Como alterar atribuições de letra de unidade no Windows XP), ou olhando para a descrição, mas eu realmente gostaria de algo um pouco mais confiável.

Desculpe pela longa explicação, mas só queria ser claro! obrigado

questionAnswers(4)

yourAnswerToTheQuestion