Windowsシステムにマウントされたボリューム(別名ファイルシステム)のクラスター(別名アロケーションユニット)のサイズをプログラムで決定したいと思います。いろいろな理由で、を使わない解決策を見つけたいと思いますGetDiskFreeSpace()
。
この目的で使用できるFSCTL_xxxまたはIOCTL_xxxリクエストはありますか?
Windowsシステムにマウントされたボリューム(別名ファイルシステム)のクラスター(別名アロケーションユニット)のサイズをプログラムで決定したいと思います。いろいろな理由で、を使わない解決策を見つけたいと思いますGetDiskFreeSpace()
。
この目的で使用できるFSCTL_xxxまたはIOCTL_xxxリクエストはありますか?
NtQueryVolumeInformationFile
ボリューム上にあるファイルのハンドルを呼び出して、を要求する必要がありますFileFsSizeInformation
。あなたはこの機能を介して取得できるはずです
GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")),"NtQueryVolumeInformationFile")
結果のFILE_FS_SIZE_INFORMATION
構造には、SectorsPerAllocationUnit
値とBytesPerSector
使用可能な値があり、乗算すると、アロケーションユニット(クラスター)のサイズがわかります。
DeviceIoControlは。で使用できますIOCTL_STORAGE_QUERY_PROPERTY
。入力時PropertyId
に、STORAGE_PROPERTY_QUERY
構造体のをに設定しStorageAccessAlignmentProperty
ます。
これにより、とSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
の両方のメンバーを含むが取得されます。リンクされたリファレンスページには、デバイスの論理/物理セクターサイズを取得して表示するためのデモコードが含まれています。BytesPerLogicalSector
BytesPerPhysicalSector