質問編集履歴

6

QueryDosDevice より、HarddiskVolumeX を取得する云々の追加

2018/08/20 02:45

投稿

juner
juner

スコア110

test CHANGED
File without changes
test CHANGED
@@ -82,6 +82,30 @@
82
82
 
83
83
 
84
84
 
85
+ ####`QueryDosDevice()` より取得されたパス群の中より、ボリュームを探して取得
86
+
87
+ `QueryDosDevice()`より取得したデバイス名群より、`HarddiskVolumeX` 形式の名前を探し、それを元に`IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS`を実施した。
88
+
89
+ |FilePath|StartOffset|ExtentLength|StartOffset+ExtentLegnth|
90
+
91
+ |:--|--:|--:|--:|
92
+
93
+ |\.\HarddiskVolume1|1048576|104857600|105906176|
94
+
95
+ |\.\HarddiskVolume2|106954752|133169152|240123904|
96
+
97
+ |\.\HarddiskVolume10|105097723904|895106416640|1000204140544|
98
+
99
+
100
+
101
+ 一部のパーティションが取得できていないが、これがほしかった情報であろうか?
102
+
103
+
104
+
105
+ このコードは FindVolume で取得されたVolumeに対しての読み込み の確認に使ったコードに含まれる。
106
+
107
+
108
+
85
109
  #### GPTPartition情報を直に読み込む
86
110
 
87
111
  |PartitionNumber|First(LBA8)|Last(LBA8)|SectorSize|First*SectorSize|Last*SectorSize|

5

言葉足らずだったので文言修正

2018/08/20 02:45

投稿

juner
juner

スコア110

test CHANGED
File without changes
test CHANGED
@@ -58,7 +58,9 @@
58
58
 
59
59
 
60
60
 
61
- ####FindVolume による読み込み
61
+ ####FindVolume で取得されたVolume対しての読み込み
62
+
63
+ FindVolume で取得されたVolumeに対して `IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS`により読み込んだ場合対象のドライブに関しての情報は次のものだけとなった。
62
64
 
63
65
  |StartOffset|ExtentLength|StartOffset+ExtentLegnth|
64
66
 
@@ -68,7 +70,7 @@
68
70
 
69
71
 
70
72
 
71
- マウントしているボリュームのみ取得される様で、RAID構成されているDドライブの位置だけわかる状態となっておりました。(4ドライブの位置も取得されているがここでは要な為、省略。
73
+ マウントしているボリュームのみ取得される様で、RAID構成されているDドライブの位置だけわかる状態となっておりました。(4ディスクの位置も取得されているがここでは要な情報だけ載せる形で省略。
72
74
 
73
75
 
74
76
 

4

計算誤り

2018/08/20 02:17

投稿

juner
juner

スコア110

test CHANGED
File without changes
test CHANGED
@@ -60,11 +60,11 @@
60
60
 
61
61
  ####FindVolume による読み込み
62
62
 
63
- |StartOffset|ExtentLength|StartOffset+ExtentLegnth
63
+ |StartOffset|ExtentLength|StartOffset+ExtentLegnth|
64
64
 
65
- |--:|--:|--:
65
+ |--:|--:|--:|
66
66
 
67
- |105097723904|895106416640|105097723904
67
+ |105097723904|895106416640|1000204140544|
68
68
 
69
69
 
70
70
 

3

試したことを追加。

2018/08/20 02:09

投稿

juner
juner

スコア110

test CHANGED
File without changes
test CHANGED
@@ -32,6 +32,12 @@
32
32
 
33
33
  ### 試したこと
34
34
 
35
+ 以下の方法を試しました。
36
+
37
+ #### list partition
38
+
39
+
40
+
35
41
  尚、`disikpart` で `list partition` すると、次の様な表示となりました。
36
42
 
37
43
  ```diskpart
@@ -52,6 +58,56 @@
52
58
 
53
59
 
54
60
 
61
+ ####FindVolume による読み込み
62
+
63
+ |StartOffset|ExtentLength|StartOffset+ExtentLegnth
64
+
65
+ |--:|--:|--:
66
+
67
+ |105097723904|895106416640|105097723904
68
+
69
+
70
+
71
+ マウントしているボリュームのみ取得される様で、RAID構成されているDドライブの位置だけわかる状態となっておりました。(他4ドライブの位置も取得されているがここでは不要な為、省略。
72
+
73
+
74
+
75
+ 使用したコード
76
+
77
+ [juner/IoControl#93f655872fb7bda6e60d0f0ca13ff96c47680e30](https://github.com/juner/IoControl/tree/93f655872fb7bda6e60d0f0ca13ff96c47680e30)
78
+
79
+ の[IoControlPhysicalExample](https://github.com/juner/IoControl/tree/93f655872fb7bda6e60d0f0ca13ff96c47680e30/IoControlPhysicalExample)
80
+
81
+
82
+
83
+ #### GPTPartition情報を直に読み込む
84
+
85
+ |PartitionNumber|First(LBA8)|Last(LBA8)|SectorSize|First*SectorSize|Last*SectorSize|
86
+
87
+ |:--|--:|--:|--:|--:|--:|
88
+
89
+ |1|0x800|0x327FF|512|1048576|105905664|
90
+
91
+ |2|0x32800|0x32FFF|512|105906176|106954240|
92
+
93
+ |3|0x33000|0x727FF|512|106954752|240123392|
94
+
95
+ |4|0x72800|0x74706D8E|512|240123904|1000204868608|
96
+
97
+
98
+
99
+ First*SectorSize が合致しているのでこの情報はほぼ同じ情報と想定される。Last*SectorSize がずれるのは誤差?
100
+
101
+
102
+
103
+ 確認に使用したコード
104
+
105
+ [juner/ReadHeader#8591d9704b9b5dd4c2ffdc2192e9c779563c89e5](https://github.com/juner/ReadHeader/tree/8591d9704b9b5dd4c2ffdc2192e9c779563c89e5)
106
+
107
+ の [ReadHeaderExample](https://github.com/juner/ReadHeader/tree/8591d9704b9b5dd4c2ffdc2192e9c779563c89e5/ReadHeaderExample)
108
+
109
+
110
+
55
111
  ### 補足情報(FW/ツールのバージョンなど)
56
112
 
57
113
  OS: Windows10 (1803)

2

ダイナミックディスクであることを記載。

2018/08/20 02:05

投稿

juner
juner

スコア110

test CHANGED
@@ -1 +1 @@
1
- GPTなPhysicalDriveから パーティションの空き位置の情報の取得方法について
1
+ ダイナミックディスクでGPTなPhysicalDriveから パーティションの空き位置の情報の取得方法について
test CHANGED
@@ -1,8 +1,10 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 現在、ディスクの管理にて次の様に表示されるGPTなドライブよりパーティションの空き情報を取得方法を探しています。
3
+ 現在、ディスクの管理にて次の様に表示されるダイナミックディスクでGPTなドライブよりパーティションの空き情報を取得方法を探しています。
4
4
 
5
5
  [100MB 正常(EFI システムパーティション)][97.66GB 未割り当て][D: 833.63GB NTFS 正常]
6
+
7
+ ※ソフトウェアRAIDを使用している4つのディスクの一つとなっております。
6
8
 
7
9
 
8
10
 

1

IOCTL_DISK_GET_DRIVE_LAYOUT_EX を GPTな物理ドライブ \\.\PhysicalDrive0 から DeviceIoControl で取得している旨を記述

2018/08/16 02:56

投稿

juner
juner

スコア110

test CHANGED
@@ -1 +1 @@
1
- GPTPhysicalDriveから パーティションの空き位置の情報の取得方法について
1
+ GPTPhysicalDriveから パーティションの空き位置の情報の取得方法について
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ### 発生している問題
10
10
 
11
- パーティションの空き情報はパーティションの情報からと思い、`IOCTL_DISK_GET_DRIVE_LAYOUT_EX` 経由でパーティション間の空き領域情報を取得しようとしてみたのですが、それにより取得される。 `DRIVE_LAYOUT_INFORMATION_EX` の `PartitionEntry[]` こと `PARTITION_INFORMATION_EX` に設定される パーティションの各情報は次の様な形となります。
11
+ パーティションの空き情報はパーティションの情報からるこができる思い、 GPTな物理ドライブの `\.\PhysicaDrive0` より `DeviceIoControl` の `IOCTL_DISK_GET_DRIVE_LAYOUT_EX` 経由でパーティション間の空き領域情報を取得しようとしてみたのですが、それにより取得される。 `DRIVE_LAYOUT_INFORMATION_EX` の `PartitionEntry[]` こと `PARTITION_INFORMATION_EX` に設定される パーティションの各情報は次の様な形となります。
12
12
 
13
13
  |PartitionNumber|StartOffset|PartitionLength|StartOffset+PartitionLength|Type|
14
14