わびさびサンプルソース

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

IOCTL_MOUNTDEV_QUERY_DEVICE_NAME

"1"や"0"などのデバイスマウントポイントの名称を取得します。 デバイスマウントポイントの名称を取得するには、DeviceIoControl()関数を利用します。IoControlCode にIOCTL_MOUNTDEV_QUERY_DEVICE_NAMEを渡す事で、MOUNTDEV_NAME構造体を取得する事ができ、その中に デバイスマウントポイントの名称がセットされています。

(注)このサンプルをコンパイルするには、WindowsDDKのヘッダファイルが必要です。

#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" );

	// "F:"は論理ドライブ名称です。
	HANDLE hDevice = CreateFile(L"¥¥¥¥.¥¥F:", 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のインクルードが必要です。
		*/
		{
			// 確保するメモリサイズの算出(MAX_PATH分)
			int iMountdevNameSize = sizeof( MOUNTDEV_NAME ) + sizeof( TCHAR ) * MAX_PATH;

			// メモリの確保
			MOUNTDEV_NAME* tpMountdevName = (MOUNTDEV_NAME*)new CHAR[ iMountdevNameSize ];
			if ( NULL != tpMountdevName ) {

				// バッファの長さをセット
				tpMountdevName->NameLength = MAX_PATH;

				DWORD dwResult = 0;

				DeviceIoControl(
					(HANDLE) hDevice						// handle to device
				  , IOCTL_MOUNTDEV_QUERY_DEVICE_NAME		// dwIoControlCode
				  , NULL									// lpInBuffer
				  , 0										// nInBufferSize
				  , (LPVOID)tpMountdevName					// output buffer
				  , (DWORD)iMountdevNameSize				// size of output buffer
				  , (LPDWORD)&dwResult				        // number of bytes returned
				  , (LPOVERLAPPED)NULL					    // OVERLAPPED structure
				);

				// 文字列終端をセット
				tpMountdevName->Name[ tpMountdevName->NameLength ] = L'¥0';


				/*
					結果を出力
						"¥Device¥CdRom0"などが表示されます
				*/
				std::wcout << L"IOCTL_MOUNTDEV_QUERY_DEVICE_NAME" << std::endl;
				std::wcout << L"¥t" << L"NameLength : " << tpMountdevName->NameLength << std::endl;
				std::wcout << L"¥t" << L"Name       : " << tpMountdevName->Name       << std::endl;

				// メモリ解放
				delete [] tpMountdevName;
			}
		}
		::CloseHandle( hDevice );
	}

	// 正常終了
	return 0;
}

実行結果

IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
        NameLength : 28
        Name       : \Device\CdRom0






わびさびサンプルソース

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