Win32APIとATAコマンドの関係 – プログラミング – Home

Win32APIとATAコマンドの関係
 
通知
すべてクリア

Win32APIとATAコマンドの関係


rk
 rk
(@rk)
ゲスト
結合: 12年前
投稿: 2
Topic starter  

教えてください。

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

例えば、

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

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


引用解決済
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

デバイス関係ですと、Win32 APIは、抽象的な意味としての「ファイル」が、
あるだけなのでATAコマンドと直接関係のある関数は存在しません。
従って、ご希望の様な一覧表はどこにも存在しません。

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

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

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


返信引用
rk
 rk
(@rk)
ゲスト
結合: 12年前
投稿: 2
Topic starter  

仲澤@失業者様

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

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

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

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

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

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

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


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました