質問編集履歴
6
QueryDosDevice より、HarddiskVolumeX を取得する云々の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -40,6 +40,18 @@
|
|
40
40
|
[juner/IoControl#93f655872fb7bda6e60d0f0ca13ff96c47680e30](https://github.com/juner/IoControl/tree/93f655872fb7bda6e60d0f0ca13ff96c47680e30)
|
41
41
|
の[IoControlPhysicalExample](https://github.com/juner/IoControl/tree/93f655872fb7bda6e60d0f0ca13ff96c47680e30/IoControlPhysicalExample)
|
42
42
|
|
43
|
+
####`QueryDosDevice()` より取得されたパス群の中より、ボリュームを探して取得
|
44
|
+
`QueryDosDevice()`より取得したデバイス名群より、`HarddiskVolumeX` 形式の名前を探し、それを元に`IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS`を実施した。
|
45
|
+
|FilePath|StartOffset|ExtentLength|StartOffset+ExtentLegnth|
|
46
|
+
|:--|--:|--:|--:|
|
47
|
+
|\.\HarddiskVolume1|1048576|104857600|105906176|
|
48
|
+
|\.\HarddiskVolume2|106954752|133169152|240123904|
|
49
|
+
|\.\HarddiskVolume10|105097723904|895106416640|1000204140544|
|
50
|
+
|
51
|
+
一部のパーティションが取得できていないが、これがほしかった情報であろうか?
|
52
|
+
|
53
|
+
このコードは FindVolume で取得されたVolumeに対しての読み込み の確認に使ったコードに含まれる。
|
54
|
+
|
43
55
|
#### GPTPartition情報を直に読み込む
|
44
56
|
|PartitionNumber|First(LBA8)|Last(LBA8)|SectorSize|First*SectorSize|Last*SectorSize|
|
45
57
|
|:--|--:|--:|--:|--:|--:|
|
5
言葉足らずだったので文言修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -28,12 +28,13 @@
|
|
28
28
|
Partition 4 ダイナミック データ 931 GB 229 MB
|
29
29
|
```
|
30
30
|
|
31
|
-
####FindVolume に
|
31
|
+
####FindVolume で取得されたVolumeに対しての読み込み
|
32
|
+
FindVolume で取得されたVolumeに対して `IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS`により読み込んだ場合対象のドライブに関しての情報は次のものだけとなった。
|
32
33
|
|StartOffset|ExtentLength|StartOffset+ExtentLegnth|
|
33
34
|
|--:|--:|--:|
|
34
35
|
|105097723904|895106416640|1000204140544|
|
35
36
|
|
36
|
-
マウントしているボリュームのみ取得される様で、RAID構成されているDドライブの位置だけわかる状態となっておりました。(
|
37
|
+
マウントしているボリュームのみ取得される様で、RAID構成されているDドライブの位置だけわかる状態となっておりました。(計4ディスクの位置も取得されているがここでは必要な情報だけ載せる形で省略。
|
37
38
|
|
38
39
|
使用したコード
|
39
40
|
[juner/IoControl#93f655872fb7bda6e60d0f0ca13ff96c47680e30](https://github.com/juner/IoControl/tree/93f655872fb7bda6e60d0f0ca13ff96c47680e30)
|
4
計算誤り
title
CHANGED
File without changes
|
body
CHANGED
@@ -29,9 +29,9 @@
|
|
29
29
|
```
|
30
30
|
|
31
31
|
####FindVolume による読み込み
|
32
|
-
|StartOffset|ExtentLength|StartOffset+ExtentLegnth
|
32
|
+
|StartOffset|ExtentLength|StartOffset+ExtentLegnth|
|
33
|
-
|--:|--:|--:
|
33
|
+
|--:|--:|--:|
|
34
|
-
|105097723904|895106416640|
|
34
|
+
|105097723904|895106416640|1000204140544|
|
35
35
|
|
36
36
|
マウントしているボリュームのみ取得される様で、RAID構成されているDドライブの位置だけわかる状態となっておりました。(他4ドライブの位置も取得されているがここでは不要な為、省略。
|
37
37
|
|
3
試したことを追加。
title
CHANGED
File without changes
|
body
CHANGED
@@ -15,6 +15,9 @@
|
|
15
15
|
想定していた隙間がどこにも空いていませんでした。
|
16
16
|
|
17
17
|
### 試したこと
|
18
|
+
以下の方法を試しました。
|
19
|
+
#### list partition
|
20
|
+
|
18
21
|
尚、`disikpart` で `list partition` すると、次の様な表示となりました。
|
19
22
|
```diskpart
|
20
23
|
Partition ### Type Size Offset
|
@@ -25,6 +28,31 @@
|
|
25
28
|
Partition 4 ダイナミック データ 931 GB 229 MB
|
26
29
|
```
|
27
30
|
|
31
|
+
####FindVolume による読み込み
|
32
|
+
|StartOffset|ExtentLength|StartOffset+ExtentLegnth
|
33
|
+
|--:|--:|--:
|
34
|
+
|105097723904|895106416640|105097723904
|
35
|
+
|
36
|
+
マウントしているボリュームのみ取得される様で、RAID構成されているDドライブの位置だけわかる状態となっておりました。(他4ドライブの位置も取得されているがここでは不要な為、省略。
|
37
|
+
|
38
|
+
使用したコード
|
39
|
+
[juner/IoControl#93f655872fb7bda6e60d0f0ca13ff96c47680e30](https://github.com/juner/IoControl/tree/93f655872fb7bda6e60d0f0ca13ff96c47680e30)
|
40
|
+
の[IoControlPhysicalExample](https://github.com/juner/IoControl/tree/93f655872fb7bda6e60d0f0ca13ff96c47680e30/IoControlPhysicalExample)
|
41
|
+
|
42
|
+
#### GPTPartition情報を直に読み込む
|
43
|
+
|PartitionNumber|First(LBA8)|Last(LBA8)|SectorSize|First*SectorSize|Last*SectorSize|
|
44
|
+
|:--|--:|--:|--:|--:|--:|
|
45
|
+
|1|0x800|0x327FF|512|1048576|105905664|
|
46
|
+
|2|0x32800|0x32FFF|512|105906176|106954240|
|
47
|
+
|3|0x33000|0x727FF|512|106954752|240123392|
|
48
|
+
|4|0x72800|0x74706D8E|512|240123904|1000204868608|
|
49
|
+
|
50
|
+
First*SectorSize が合致しているのでこの情報はほぼ同じ情報と想定される。Last*SectorSize がずれるのは誤差?
|
51
|
+
|
52
|
+
確認に使用したコード
|
53
|
+
[juner/ReadHeader#8591d9704b9b5dd4c2ffdc2192e9c779563c89e5](https://github.com/juner/ReadHeader/tree/8591d9704b9b5dd4c2ffdc2192e9c779563c89e5)
|
54
|
+
の [ReadHeaderExample](https://github.com/juner/ReadHeader/tree/8591d9704b9b5dd4c2ffdc2192e9c779563c89e5/ReadHeaderExample)
|
55
|
+
|
28
56
|
### 補足情報(FW/ツールのバージョンなど)
|
29
57
|
OS: Windows10 (1803)
|
30
58
|
|
2
ダイナミックディスクであることを記載。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
GPTなPhysicalDriveから パーティションの空き位置の情報の取得方法について
|
1
|
+
ダイナミックディスクでGPTなPhysicalDriveから パーティションの空き位置の情報の取得方法について
|
body
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
-
現在、ディスクの管理にて次の様に表示されるGPTなドライブよりパーティションの空き情報を取得方法を探しています。
|
2
|
+
現在、ディスクの管理にて次の様に表示されるダイナミックディスクでGPTなドライブよりパーティションの空き情報を取得方法を探しています。
|
3
3
|
[100MB 正常(EFI システムパーティション)][97.66GB 未割り当て][D: 833.63GB NTFS 正常]
|
4
|
+
※ソフトウェアRAIDを使用している4つのディスクの一つとなっております。
|
4
5
|
|
5
6
|
### 発生している問題
|
6
7
|
パーティションの空き情報はパーティションの情報からることができる思い、 GPTな物理ドライブの `\.\PhysicaDrive0` より `DeviceIoControl` の `IOCTL_DISK_GET_DRIVE_LAYOUT_EX` 経由でパーティション間の空き領域情報を取得しようとしてみたのですが、それにより取得される。 `DRIVE_LAYOUT_INFORMATION_EX` の `PartitionEntry[]` こと `PARTITION_INFORMATION_EX` に設定される パーティションの各情報は次の様な形となります。
|
1
IOCTL_DISK_GET_DRIVE_LAYOUT_EX を GPTな物理ドライブ \\.\PhysicalDrive0 から DeviceIoControl で取得している旨を記述
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
GPT
|
1
|
+
GPTなPhysicalDriveから パーティションの空き位置の情報の取得方法について
|
body
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[100MB 正常(EFI システムパーティション)][97.66GB 未割り当て][D: 833.63GB NTFS 正常]
|
4
4
|
|
5
5
|
### 発生している問題
|
6
|
-
パーティションの空き情報はパーティションの情報から
|
6
|
+
パーティションの空き情報はパーティションの情報からることができる思い、 GPTな物理ドライブの `\.\PhysicaDrive0` より `DeviceIoControl` の `IOCTL_DISK_GET_DRIVE_LAYOUT_EX` 経由でパーティション間の空き領域情報を取得しようとしてみたのですが、それにより取得される。 `DRIVE_LAYOUT_INFORMATION_EX` の `PartitionEntry[]` こと `PARTITION_INFORMATION_EX` に設定される パーティションの各情報は次の様な形となります。
|
7
7
|
|PartitionNumber|StartOffset|PartitionLength|StartOffset+PartitionLength|Type|
|
8
8
|
|:--|--:|--:|--:|:--:|
|
9
9
|
|1|1048576|104857600|105906176|c12a7328-f81f-11d2-ba4b-00a0c93ec93b|
|