パーティションの情報を取得します。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <windows.h> //#include <Mountmgr.h> // --> WindowsDDKです。 int _tmain ( int argc , _TCHAR* argv[] ) { // 標準出力にユニコードを表示できるようにする setlocale( LC_ALL, "Japanese" ); // "C:"は論理ドライブ名称です。 HANDLE hDevice = CreateFile(L"¥¥¥¥.¥¥C:", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if ( hDevice != INVALID_HANDLE_VALUE ) { /* IOCTL_MOUNTDEV_QUERY_DEVICE_NAME (DDKのMountmgr.hのインクルードが必要です。 */ { PARTITION_INFORMATION_EX tPartitionInformationEx; DWORD dwResult = 0; /* IOCTL_DISK_GET_PARTITION_INFO_EX */ BOOL bResult = ::DeviceIoControl( (HANDLE) hDevice // handle to device , IOCTL_DISK_GET_PARTITION_INFO_EX // dwIoControlCode , NULL // lpInBuffer , 0 // nInBufferSize , (LPVOID)&tPartitionInformationEx // output buffer , (DWORD)sizeof( tPartitionInformationEx ) // size of output buffer , (LPDWORD)&dwResult // number of bytes returned , (LPOVERLAPPED)NULL // OVERLAPPED structure ); if ( 0 == bResult ) { // 取得失敗 std::wcout << L"IOCTL_DISK_GET_PARTITION_INFO_EX失敗(" << ::GetLastError() << L")" << std::endl; ::CloseHandle( hDevice ); return( -1 ); } /* 結果を出力 */ std::wcout << L"IOCTL_DISK_GET_PARTITION_INFO_EX" << std::endl; std::wcout << L"¥t" << L"PartitionNumber : " << tPartitionInformationEx.PartitionNumber << std::endl; std::wcout << L"¥t" << L"PartitionStyle : " << tPartitionInformationEx.PartitionStyle << std::endl; std::wcout << L"¥t" << L"StartingOffset : " << tPartitionInformationEx.StartingOffset.QuadPart << std::endl; std::wcout << L"¥t" << L"PartitionLength : " << tPartitionInformationEx.PartitionLength.QuadPart << std::endl; std::wcout << L"¥t" << L"RewritePartition : " << tPartitionInformationEx.RewritePartition << std::endl; switch( tPartitionInformationEx.PartitionStyle ) { case PARTITION_STYLE_MBR: { std::wcout << L"¥t" << L"Mbr.BootIndicator : " << tPartitionInformationEx.Mbr.BootIndicator << std::endl; std::wcout << L"¥t" << L"Mbr.HiddenSectors : " << tPartitionInformationEx.Mbr.HiddenSectors << std::endl; std::wcout << L"¥t" << L"Mbr.PartitionType : " << tPartitionInformationEx.Mbr.PartitionType << std::endl; std::wcout << L"¥t" << L"Mbr.RecognizedPartition : " << tPartitionInformationEx.Mbr.RecognizedPartition << std::endl; } break; case PARTITION_STYLE_GPT: { std::wcout << L"¥t" << L"Mbr.Attributes : " << tPartitionInformationEx.Gpt.Attributes << std::endl; std::wcout << L"¥t" << L"Mbr.Name : " << tPartitionInformationEx.Gpt.Name << std::endl; } break; case PARTITION_STYLE_RAW: { } break; } } ::CloseHandle( hDevice ); } // 正常終了 return 0; }
IOCTL_DISK_GET_PARTITION_INFO_EX PartitionNumber : 4 PartitionStyle : 0 StartingOffset : 168532377600 PartitionLength : 331574411264 RewritePartition : 0 Mbr.BootIndicator : 0 Mbr.HiddenSectors : 329164800 Mbr.PartitionType : 7 Mbr.RecognizedPartition : 1