Win32APIとATAコマンドの関係

[戻る]
rk 2013/04/11(木) 13:54:34
教えてください。

件名の通り、Win32APIとATAコマンドの関係性がわかるような
資料・ページを探しています。

例えば、

ATAの 0xEA/FLUSH CACHE EXT は、
Win32APIで FlushFileBuffers() を実行した時に
デバイスへ発行される。

宜しくお願いしますm(_ _)m

仲澤@失業者 2013/04/11(木) 15:24:05
デバイス関係ですと、Win32 APIは、抽象的な意味としての「ファイル」が、
あるだけなのでATAコマンドと直接関係のある関数は存在しません。
従って、ご希望の様な一覧表はどこにも存在しません。

Win32 APIは、抽象的な「ファイル」に対して「開く」や「書く」などが
行えるだけです。この「ファイル」には、HDD上のファイル、
ボリューム、パイプ、シリアルデバイス、コンソールなどが含まれ、
CreateFile()関数で開くことができます。

デバイスを開いた場合などには、DeviceIoControl()関数を使用して、
コントロールコードをデバイスに送信することができます。
ATAコマンドなどは、この方法を使って送信することができるはずですが、
残念ながらやったことがないので、詳しい解説ができません。あしからず。

上記2関数について調べてみてください。

rk 2013/04/12(金) 17:01:09
仲澤@失業者様

御回答ありがとうございます。

記載しておりませんでしたが
DeviceIoControl()を使ってATAを発行する事はできています。
目標は、PASS_THROUGHを使わずに任意のATAを発行する事です。
(馬鹿げていますが、諸事情があり...)

Win32APIが抽象的なファイルを介して処理したとしても、
最終的にはデバイスに対してATAが発行されるはずです。

例えば、
ATAのREADxx/WRITExx/FLUSHCACHE/SEEKは
Win32APIのfread/fwrite/FlushFileBuffers/SetFilePointer
を実行することでデバイスに発行されると想像しています。

そこで、IDENTIFYDEVICEやその他のATAコマンドを発行するには?
が質問の背景です。

全てのATAコマンドがWin32APIで意図的に発行できるとは思っていませんが、
何かヒントを頂ければ、と思い質問させて頂いた次第です。

(やっぱり無いですよね・・・)

仲澤@失業者 2013/04/12(金) 18:46:20
検索すればすぐにわかりますが、CreateFile()した物理HDDでバイスに対して
DeviceIoControl()を使ってATAPI_IDENTIFY_DEVICEコマンドを送付することで
みなさんデバイス情報は取得できてるようですね、コードを見る限り
特別なことは何もやってないようですけど(そういうことではないのかな)。

主に、HDDのシリアル番号などを取得するのが目的みたいですね(vv;)。

古いスレッドには追加発言できません。