デバイスのタイプ、物理デバイス番号、パーティション番号を取得します。 これらの情報を取得するには、DeviceIoControl()関数を利用します。IoControlCode にIOCTL_STORAGE_GET_DEVICE_NUMBERを渡す事で、STORAGE_DEVICE_NUMBER構造体を 取得する事ができ、その中にデバイスのタイプ、物理デバイス番号、パーティション 番号がセットされています。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <windows.h> int _tmain ( int argc , _TCHAR* argv[] ) { // "C:"は論理ドライブ名称です。 HANDLE hDevice = CreateFile(L"¥¥¥¥.¥¥C:", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if ( hDevice != INVALID_HANDLE_VALUE ) { /* IOCTL_STORAGE_GET_DEVICE_NUMBER */ { STORAGE_DEVICE_NUMBER tStrageDeviceNumber; DWORD dwResult = 0; DeviceIoControl( (HANDLE) hDevice // handle to device , IOCTL_STORAGE_GET_DEVICE_NUMBER // dwIoControlCode , NULL // lpInBuffer , 0 // nInBufferSize , (LPVOID)&tStrageDeviceNumber // output buffer , (DWORD)sizeof( tStrageDeviceNumber ) // size of output buffer , (LPDWORD)&dwResult // number of bytes returned , (LPOVERLAPPED)NULL // OVERLAPPED structure ); // 結果の出力 std::wcout << L"IOCTL_STORAGE_GET_DEVICE_NUMBER" << std::endl; std::wcout << L"¥t" << L"DeviceType : " << tStrageDeviceNumber.DeviceType << std::endl; std::wcout << L"¥t" << L"DeviceNumber : " << tStrageDeviceNumber.DeviceNumber << std::endl; std::wcout << L"¥t" << L"PartitionNumber : " << tStrageDeviceNumber.PartitionNumber << std::endl; } CloseHandle( hDevice ); } return 0; }
IOCTL_STORAGE_GET_DEVICE_NUMBER DeviceType : 7 DeviceNumber : 0 PartitionNumber : 2