教えてください。
件名の通り、Win32APIとATAコマンドの関係性がわかるような
資料・ページを探しています。
例えば、
ATAの 0xEA/FLUSH CACHE EXT は、
Win32APIで FlushFileBuffers() を実行した時に
デバイスへ発行される。
宜しくお願いしますm(_ _)m
デバイス関係ですと、Win32 APIは、抽象的な意味としての「ファイル」が、
あるだけなのでATAコマンドと直接関係のある関数は存在しません。
従って、ご希望の様な一覧表はどこにも存在しません。
Win32 APIは、抽象的な「ファイル」に対して「開く」や「書く」などが
行えるだけです。この「ファイル」には、HDD上のファイル、
ボリューム、パイプ、シリアルデバイス、コンソールなどが含まれ、
CreateFile()関数で開くことができます。
デバイスを開いた場合などには、DeviceIoControl()関数を使用して、
コントロールコードをデバイスに送信することができます。
ATAコマンドなどは、この方法を使って送信することができるはずですが、
残念ながらやったことがないので、詳しい解説ができません。あしからず。
上記2関数について調べてみてください。
仲澤@失業者様
御回答ありがとうございます。
記載しておりませんでしたが
DeviceIoControl()を使ってATAを発行する事はできています。
目標は、PASS_THROUGHを使わずに任意のATAを発行する事です。
(馬鹿げていますが、諸事情があり...)
Win32APIが抽象的なファイルを介して処理したとしても、
最終的にはデバイスに対してATAが発行されるはずです。
例えば、
ATAのREADxx/WRITExx/FLUSHCACHE/SEEKは
Win32APIのfread/fwrite/FlushFileBuffers/SetFilePointer
を実行することでデバイスに発行されると想像しています。
そこで、IDENTIFYDEVICEやその他のATAコマンドを発行するには?
が質問の背景です。
全てのATAコマンドがWin32APIで意図的に発行できるとは思っていませんが、
何かヒントを頂ければ、と思い質問させて頂いた次第です。
(やっぱり無いですよね・・・)
検索すればすぐにわかりますが、CreateFile()した物理HDDでバイスに対して
DeviceIoControl()を使ってATAPI_IDENTIFY_DEVICEコマンドを送付することで
みなさんデバイス情報は取得できてるようですね、コードを見る限り
特別なことは何もやってないようですけど(そういうことではないのかな)。
主に、HDDのシリアル番号などを取得するのが目的みたいですね(vv;)。