わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。

IOCTL_STORAGE_GET_DEVICE_NUMBER

デバイスのタイプ、物理デバイス番号、パーティション番号を取得します。 これらの情報を取得するには、DeviceIoControl()関数を利用します。IoControlCode にIOCTL_STORAGE_GET_DEVICE_NUMBERを渡す事で、STORAGE_DEVICE_NUMBER構造体を 取得する事ができ、その中にデバイスのタイプ、物理デバイス番号、パーティション 番号がセットされています。

デバイスのタイプ

  • FILE_DEVICE_8042_PORT
  • FILE_DEVICE_ACPI
  • FILE_DEVICE_BATTERY
  • FILE_DEVICE_BEEP
  • FILE_DEVICE_BLUETOOTH
  • FILE_DEVICE_BUS_EXTENDER
  • FILE_DEVICE_CD_ROM
  • FILE_DEVICE_CD_ROM_FILE_SYSTEM
  • FILE_DEVICE_CHANGER
  • FILE_DEVICE_CONTROLLER
  • FILE_DEVICE_CRYPT_PROVIDER
  • FILE_DEVICE_DATALINK
  • FILE_DEVICE_DFS
  • FILE_DEVICE_DFS_FILE_SYSTEM
  • FILE_DEVICE_DFS_VOLUME
  • FILE_DEVICE_DISK
  • FILE_DEVICE_DISK_FILE_SYSTEM
  • FILE_DEVICE_DVD
  • FILE_DEVICE_FILE_SYSTEM
  • FILE_DEVICE_FIPS
  • FILE_DEVICE_FULLSCREEN_VIDEO
  • FILE_DEVICE_INFINIBAND
  • FILE_DEVICE_INPORT_PORT
  • FILE_DEVICE_KEYBOARD
  • FILE_DEVICE_KS
  • FILE_DEVICE_KSEC
  • FILE_DEVICE_MAILSLOT
  • FILE_DEVICE_MASS_STORAGE
  • FILE_DEVICE_MIDI_IN
  • FILE_DEVICE_MIDI_OUT
  • FILE_DEVICE_MODEM
  • FILE_DEVICE_MOUSE
  • FILE_DEVICE_MULTI_UNC_PROVIDER
  • FILE_DEVICE_NAMED_PIPE
  • FILE_DEVICE_NETWORK
  • FILE_DEVICE_NETWORK_BROWSER
  • FILE_DEVICE_NETWORK_FILE_SYSTEM
  • FILE_DEVICE_NETWORK_REDIRECTOR
  • FILE_DEVICE_NULL
  • FILE_DEVICE_PARALLEL_PORT
  • FILE_DEVICE_PHYSICAL_NETCARD
  • FILE_DEVICE_PRINTER
  • FILE_DEVICE_SCANNER
  • FILE_DEVICE_SCREEN
  • FILE_DEVICE_SERENUM
  • FILE_DEVICE_SERIAL_MOUSE_PORT
  • FILE_DEVICE_SERIAL_PORT
  • FILE_DEVICE_SMARTCARD
  • FILE_DEVICE_SMB
  • FILE_DEVICE_SOUND
  • FILE_DEVICE_STREAMS
  • FILE_DEVICE_TAPE
  • FILE_DEVICE_TAPE_FILE_SYSTEM
  • FILE_DEVICE_TERMSRV
  • FILE_DEVICE_TRANSPORT
  • FILE_DEVICE_UNKNOWN
  • FILE_DEVICE_VDM
  • FILE_DEVICE_VIDEO
  • FILE_DEVICE_VIRTUAL_DISK
  • FILE_DEVICE_VMBUS
  • FILE_DEVICE_WAVE_IN
  • FILE_DEVICE_WAVE_OUT
  • FILE_DEVICE_WPD
#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






わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。