Bonjour,
Je cherche à accéder à la partition Recovery d'un PC.
Pour ce faire, j'interroge la BCD et je trouve un path du style : \Device\HarddiskVolume1
Si j'explore les disque avec le gestionnaire de disque, je trouve effectivement une partition sans lettre de lecteur.
Le code suivant me permet de retrouver les volumes non montés, et de les monter avec une lettre de lecteur :
J'ai volontairement simplifié pour la clarté (le code original contrôle que les volumes ne sont pas déjà montés etc.), vu que le code fonctionne. Ma question est ailleurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 for i := 0 to 99 do begin vol := PChar('\\.\PhysicalDrive' + IntToStr(i)); // Parcours des disques physiques H := CreateFile(Vol, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if H = INVALID_HANDLE_VALUE then begin // Pas d'autres disques Break; end; CloseHandle(H); for j := 1 to 20 do begin // Parcours des partition du disque en cours BreakCycle := False; NextLetter := GetNextAvailableLetter; DefineDosDevice(DDD_RAW_TARGET_PATH or DDD_NO_BROADCAST_SYSTEM, PChar(string(NextLetter + ':')), PChar('\Device\Harddisk' + IntToStr(i) + '\Partition' + IntToStr(j))); H := CreateFile(PChar('\\.\' + NextLetter + ':'), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if H = INVALID_HANDLE_VALUE then begin // pas d'autres partitions sur le disque Break; end; end; end;
Le code suivant me donne la liste des volumes sous la forme \\?\volume{GUID} :
1. J'attribue donc une lettre de lecteur à un volume dont le chemin est du type \Device\Harddsik0\Partition1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 H := FindFirstvolumeW(@VolName, MAX_PATH+1); while FindNextvolumeW(H, @VolName, MAX_PATH+1) do begin VolNameGuid := WideCharToString(VolName); end; FindVolumeClose(H);
2. La BCD indique de son côté le chemin \Device\HarddiskVolume1
3. Le CreateFile fonctionne uniquement avec des chemins du type \\?\volume{GUID} ou \Device\Harddsik0\Partition1, mais pas \Device\HarddiskVolume1 ...
Ma question est donc : Comment puis-je rapprocher les informations données par la BCD (\Device\HarddiskVolume1) et celles fournies par l'API \\?\volume{GUID} ou \Device\Harddsik0\Partition1 ?
Merci
Partager