2011-04-06 2 views
2

La documentation sur IOCTL_MOUNTDEV_QUERY_UNIQUE_ID est un peu déroutant ... exactement ce que type d'identité doit être retourné dans la structure MOUNTDEV_UNIQUE_ID?L'Unicité de IOCTL_MOUNTDEV_QUERY_UNIQUE_ID

La documentation

typedef struct _MOUNTDEV_UNIQUE_ID { 
    USHORT UniqueIdLength; 
    UCHAR UniqueId[1]; 
} MOUNTDEV_UNIQUE_ID, *PMOUNTDEV_UNIQUE_ID; 

dit:

UniqueIdLength

  • Contient la longueur d'ID de volume unique.

UniqueId

  • Contient l'ID de volume unique. Le format des noms de volumes uniques est "\??\Volume{GUID}\", où GUID est un identificateur global unique qui identifie le volume.

Cependant, il y a quelque chose de bizarre ici: Quel devrait être le format exact de UniqueId? Si le format est \??\Volume{GUID}\, alors quel est le point du champ UniqueIdLength - ne sont-ils pas tous de la même taille? Sinon, dans quel format l'identifiant de l'appareil doit-il être?

En outre, est-ce un ID ou un volume ID? En d'autres termes, est-ce supposé être unique par moyen (par exemple CD) ou par dispositif (lecteur de CD)?

Répondre

0

Ce type de structure est assez courant dans les API MS - la variable UniqueID[1] est juste un espace réservé, en réalité, elle est utilisée comme variable UniqueId[UniqueIdLength].

L'ID est unique à la fois par support et par périphérique. Cela dépend si vous parlez à un pilote de volume ou à un pilote de classe de périphérique. L'identification est destinée à identifier "quelque chose qui peut être monté" - donc par ex. un lecteur de CD-ROM, une partition de disque fixe ou un disque amovible non partitionné. Le gestionnaire de montage utilise l'ID a.o. pour rechercher où ce volume particulier a été monté avant, et le remonter au même point.

+1

@Eric: Désolé, je pense que ma question était trompeuse. Par * fixed-size * je ne parlais pas du '[1]' (je sais comment C fonctionne!), Mais du fait que la chaîne \ ?? \ Volume {GUID} \ aurait toujours la même longueur (environ 35 caractères je pense?) ... alors pourquoi avez-vous besoin d'un autre champ de longueur? Aussi, à propos de l'unicité: Pour un programme comme ImDisk, serait-ce par disque virtuel? – Mehrdad

+0

@Mehrdad: Actuellement, les 35 caractères du nom, ou presque, ne sont pas corrigés, mais il serait parfaitement logique d'utiliser une chaîne comptée.Autant que je sache, l'ID est persistant et unique pour tout ce qui peut être monté en tant que lettre de lecteur - qu'il s'agisse d'une partition sur un disque fixe, un lecteur de CD-ROM ou une clé USB non partitionnée mais formatée. Je ne sais pas ImDisk - mais la même règle devrait tenir, l'identifiant unique identifie ce qui peut être monté comme un lecteur. – Erik

+0

Ah d'accord, merci pour l'info. :) (Btw, juste remarqué que j'ai mal orthographié votre nom la dernière fois ..: [) – Mehrdad

0

De MSDN

Peut-être il y a malentendu au sujet de cette structure.

J'ai appelé DeviceIoControl(IOCTL_MOUNTDEV_QUERY_UNIQUE_ID) et j'ai obtenu une chaîne au format similaire à Device Interface Path, mais il est juste différent du préfixe 4 caractères, puis enregistré dans le registre \HKLM\SYSTEM\MountedDevices.

Questions connexes