1.24.2007

Find All Partitions in Disk/Storage

STROE_INIT:
從registry 中讀取 "Partitions",非'0'才 mount partition : call MountSinglePartition( )。

Partitions 代表有多少partition。 在MountSinglePartition( )中會找到"這麼多"partition (而不是找全部")。

這一篇可以知道..partition table 是一個16 byte的結構:
{
BYTE BootInd; // index
BYTE FirstHead; // starting head
BYTE FirstSector; // starting sector
BYTE FirstTrack; // starting track
BYTE FileSystem; // Partition type
BYTE LastHead; // ending head based
BYTE LastSector; // ending sector based
BYTE LastTrack; // ending track based
DWORD StartSector; // Physical starting sector based
DWORD TotalSectors; // Total physical sectors in partition
}
以下都是在platformbuilder的"Help"中找到的(當然msdn裡也有),開啟help,輸入keyword馬上就可以找到,所以就不附link了。

在CE中,可以用" FindFirstPartition "來找到某個storage中的partition data。
HANDLE WINAPI FindFirstPartition(
HANDLE hStore,
PPARTINFO pPartInfo
);
hStotr : 就是用 OpenStore( )取得的某個storage的handle。
pPartition : 找到的會,會把partition table data 填入這個structure 中,所以是傳回值。

return 值 HANDLE 是一個很奇怪的handle,代表這一次"find"。
這個handle 的用法像 iterator 一樣。可以用"FindNextPartition"來找到下一個partition table
BOOL WINAPI FindNextPartition(
HANDLE hSearch,
PPARTINFO pPartInfo
);
第一個argument就是剛剛return 的handle。找到的下一個partition table會放在第二個argument中。return 值是boolean,也就是代表有沒有找到。

可以一直用FindNextPartition( )找出Storage中所有的 partition,直到return false 為止。
然後,就要把這個奇怪的handle close起來:
BOOL WINAPI FindClosePartition(
HANDLE hSearch
);
.一系列的function,最最開頭是OpenStore:
HANDLE OpenStore(
LPCSTR szDeviceName
);
那個string 就是storage的path ... 不知道ce的storage path是在哪裡,是不是像linux一樣是在 /dev/hda,sda..

Storage 的整個information,像...bytes per sector, cylinders, heads, total sectors,是要用DeviceIoControl( )取得。用CONTROL CODE: IOCTL_DISK_GETINFO。

沒有留言: