[Enumdisk1.exe] ディスク デバイスを列挙するための Enumdisk サンプル

文書翻訳 文書翻訳
文書番号: 264203 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

Win32 アプリケーションでは、SetupDi API を使用して、システムで利用できるすべてのデバイスを列挙できます。Enumdisk1.exe サンプルは、この技法を使用したサンプルで、ディスクの種類に関係なく、すべてのディスク デバイスを列挙します。また、サンプルでは、デバイスへのハンドルを取得し、IOCTL コマンドを送信してアダプタとデバイスのプロパティを取得します。さらに、このサンプルは SCSI (Small Computer System Interface) パススルー コマンドを送信することでデバイスと通信して、照会データを取得します。

詳細

下記のファイルは、「Microsoft ダウンロード センター」からダウンロードできます。
元に戻す画像を拡大する
ダウンロード
Enumdisk1.exe
リリース日 : 2000 年 9 月 21 日

マイクロソフトのサポート ファイルのダウンロード方法を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
119591 How to Obtain Microsoft Support Files from Online Services
119591 オンライン サービスからマイクロソフトのサポート ファイルを入手する方法
マイクロソフトでは、アップロード時点の最新のウイルス検査プログラムを使用して、配布ファイルのウイルス チェックを行っています。配布ファイルはセキュリティで保護されたサーバー上に置かれており、権限のない第三者が無断でファイルを変更できないようになっています。 Enumdisk1.exe ファイルには以下のファイルが含まれています。
ファイル          説明
--------------------------
Enumdisk.c     Win32 アプリケーションを実装して、ディスク デバイスを列挙します。
Enumdisk.h     Enumdisk.c のヘッダー ファイル。
Sources        DDK のビルド用の指定。
Enumdisk.htm   これらのサンプルのマニュアル。
Enumdisk.exe   Windows 2000 実行可能プログラム (Free ビルド)
				

デバイスの列挙

Enumdisk1.exe サンプルでは、セットアップ クラスの GUID_DEVCLASS_DISKDRIVE という GUID (グローバル一意識別子) を使用して、システムにインストールされているすべてのディスク デバイスを列挙します。サンプルでは、その後レジストリのプロパティを取得して、デバイス ID を取得します。

Win32 アプリケーションから IOCTL を送信するには、デバイスへのハンドルが必要です。デバイスをデバイス インターフェイス名を使用して開くことで、デバイス ハンドルを取得できます。ディスク クラス ドライバによってデバイス インターフェイスが登録されることで、このインターフェイスが公開されます。デバイスの登録には、DiskClassGuid というインターフェイス GUID が使用されます。Win32 アプリケーションは、同じインターフェイス GUID を指定して SetupDi API を使用することにより、このインターフェイス名を取得できます。これをループ内で実行することにより、登録済みのすべてのディスク インターフェイスを取得できます。この値はディスク クラス ドライバから取得されるので、この技法は、SCSI、IDE (Integrated Device Electronics)、USB (Universal Serial Bus)、および IEEE (Institute for Electrical and Electronics Engineers) 1394 など、すべての種類のディスク デバイスに使用できます。

デバイスのプロパティ

アダプタとデバイスのプロパティを個別に取得するには、IOCTL_STORAGE_QUERY_PROPERTY を使用します。この IOCTL は、STORAGE_PROPERTY_QUERY データ構造体を引数にとります。この IOCTL を呼び出す前に、対応する STORAGE_PROPERTY_ID メンバおよび STORAGE_QUERY_TYPE メンバを設定する必要があります。STORAGE_PROPERTY_ID には、StorageAdapterProperty または StorageDeviceProperty を設定でき、その設定によって返されるプロパティが決定されます。このデータ構造体とそのメンバの値は、\Ntddk\Src\Ntddstor.h で定義されています。

この StorageAdapterProperty IOCTL を呼び出すと、バスの種類、最大転送長、アライメント マスクなど、アダプタのプロパティが含まれるデータ構造体 STORAGE_ADAPTER_DESCRIPTOR が返されます。StorageDeviceProperty により、デバイスの種類、ベンダ ID、プロダクト ID などを含むデータ構造体 STORAGE_DEVICE_DESCRIPTOR が返されます。この情報は各ポート ドライバから取得されます。この IOCTL およびデータ構造体の詳細については、Windows 2000 DDK ドキュメントを参照してください。

SCSI パススルー インターフェイス

この方法で取得したデバイス ハンドルは、デバイスへの SCSI パススルー コマンドの送信にも使用できます。このサンプルでは、Inquiry コマンドをデバイスに送信して、照会データを取得します。SCSI パススルー インターフェイスの詳細については、Windows 2000 DDK に含まれている SPTI サンプルを参照してください。

サンプルのビルド

[Development Kits] プログラム グループの [Free Build Environment] または [Checked Build Environment] アイコンをクリックして、ビルド ユーティリティで必要な基本的な環境変数を設定します。

デバイスのソース コードが格納されているフォルダに移動します。コマンドの例を以下に示します。
cd c:\enumdisk
build -ceZ と入力するか、BLD マクロを使用して、ビルド ユーティリティを実行します。この方法では、Microsoft make ルーチンが呼び出されます。このルーチンでは、Buildxxx.log というログ ファイルが生成されます。また、警告やエラーが発生した場合、Buildxxx.wrn、または Buildxxx.err というログ ファイルが生成されます。

選択した環境に応じて、xxx には "fre" または "chk" が入ります。ビルドが成功すると、sources ファイルで指定された %TargetPath% フォルダのプラットフォーム別のサブフォルダに Enumdisk.exe 実行可能ファイルが配置されます。

Enumdisk1.exe サンプルを実行する

このサンプルの実行には、引数は必要ありません。コマンド プロンプト ウィンドウからサンプルを実行すると、すべてのディスク デバイスのプロパティが一覧表示されます。

関連情報

Microsoft Windows 2000 DDK (Driver Development Kit)

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 264203 (最終更新日 2003-04-22) を基に作成したものです。

なお、この資料は英語版の翻訳であり、日本語環境での確認は行っておりません。

プロパティ

文書番号: 264203 - 最終更新日: 2004年9月6日 - リビジョン: 2.3
この資料は以下の製品について記述したものです。
  • Microsoft Win32 Device Driver Kit for Windows 2000
キーワード:?
kbhowto kbdownload kbgraphxlinkcritical kbfile KB264203
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com