microSDカードをロックする方法ありますか? – プログラミング – Home

microSDカードをロックする方法あ...
 
通知
すべてクリア

[解決済] microSDカードをロックする方法ありますか?

固定ページ 1 / 3

kim
 kim
(@kim)
ゲスト
結合: 21年前
投稿: 29
Topic starter  

MFCを使ってPCからSDカードリーダーを通し、
microSDカードにデータの読み書きするプログラムを作成しております。

SDカードのライトプロテクト切り替えでロックかけるような機能を
microSDカードで実現できるAPIなどはありますでしょうか?

また、WindowsからアクセスできるSDカードの論理アドレス領域以外にも
物理アドレスでアクセスできる領域も存在するのでしょうか?

存在するとしたらどうやってアクセスできるのでしょうか?
その領域にロックに関する情報もあるのでしょうか?

参考になるHPなどがあれば助かります。

以上、よろしくお願いします。


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

なんか俺俺用語が使われてて日本語の意味がわからんのだが・・・
ロックというのが「ライトプロテクト」のつもりであるとして

microSD を SD アダプタにいれてアクセスすれば LOCK タブでライトプロテクトできる

> microSDカードで実現できるAPIなどはありますでしょうか?
API レベルでは無いと思う。
FilterDriver でも書けば可能
ドライブレベルで開いて Lock すれば可能かも?

とりあえずお約束で。すべての仕様はここにある
http://www.sdcard.org/home

物理的レベルの話ではなくて CPRM の話なのかな?
http://www.4Centity.com/


返信引用
玲音 (st.lain)
 玲音 (st.lain)
(@玲音 (st.lain))
ゲスト
結合: 17年前
投稿: 89
 

半ば余談です。

> FilterDriver でも書けば可能
> ドライブレベルで開いて Lock すれば可能かも?
デバドラ上からWindowsネイティブAPIのフック(ntoskrnl.exe上のNtCreateFileとか)を
行うことも可能なようで、コール時点でアクセスフラグと対象デバイス先から判断
すればこのパターンには適用できるカモ、と思ったりしました。

通常のフィルタドライバと違って、IRPを意識しなくてもフックが行えるようです。
(但し、DriverEntryやUnload等の主要構成は必要)

# 一度試してみたい部分ではあったりもします。


返信引用
玲音 (st.lain)
 玲音 (st.lain)
(@玲音 (st.lain))
ゲスト
結合: 17年前
投稿: 89
 

遠まわしに書いて意味不明な日本語になってしまった。 orz

> コール時点でアクセスフラグと対象デバイス先から判断
フック先で、デバイスとしてSD系のメディアが指定 且つ FILE_WRITE_XXXXXフラグが
指定されている場合にSTATUS_ACCESS_DENIEDをリターンする、ということです。

# 先にも書いていますが、まだ文献を読んだ程度なのでできるかどうかはわかりませ
ん。


返信引用
kim
 kim
(@kim)
ゲスト
結合: 21年前
投稿: 29
Topic starter  

tetrapodさま、早速の御回答ありがとうございます。

下手な日本語で申し訳ございません。
英語の方はもっと下手なんです><;

今回、SDアダプタは使いません。
ドライブレベルで開いてバイナリーデータの読み書きをしています。
他人から更新を防ぐため、ロックをかけたい話が出てきたので・・・

URLありがとうございます。がんばって翻訳します。


返信引用
kim
 kim
(@kim)
ゲスト
結合: 21年前
投稿: 29
Topic starter  

玲音 (st.lain) さま、ご回答ありがとうございます。

貴重な情報を元に、もうちょっと調べてみます。


返信引用
玲音 (st.lain)
 玲音 (st.lain)
(@玲音 (st.lain))
ゲスト
結合: 17年前
投稿: 89
 

tetrapodさん指摘のようにアダプタ側でのロックで十分だと思っていたので、
URLの案内をしませんでしたが、そのようではないので一応案内します。

>> Hooking Windows NT System Services
> http://www.windowsitlibrary.com/Content/356/06/2.html
書籍「Undocumented Windows」のほぼ全容がサイトに掲載されていると思われますが、
その一部としてのカーネルフック部分です。
(Amazonでも購入できるようですが、日米共にプレミア値段がついています)

ただ、この手になると開発も特に注意が必要なのでまずもって別の手段(若しくは
運用ルールとか)を見直したほうが無難だと思われます。


返信引用
kim
 kim
(@kim)
ゲスト
結合: 21年前
投稿: 29
Topic starter  

玲音 (st.lain) さま、URLありがとうございます。

参考になります。
やはり私のレベルでの話ではなさそうですね。
もうちょっと解析して、上の人に話しします。

何度もありがとうございました。
助かりました。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

> ただ、この手になると開発も特に注意が必要なのでまずもって別の手段(若しくは
> 運用ルールとか)を見直したほうが無難だと思われます。
めっちゃ御意

> 他人から更新を防ぐため、ロックをかけたい話が出てきたので・・・
「話」のレベルならフィルタドライバとか API フックとかに手を出さないほうがいい
Windows 自体を一瞬でぶっ壊すことができる代物だし
下手をすると rootkit に応用できる代物だし
習得に数ヶ月以上かかると思われる代物だし

他人ソフトとの共存を考える上では、やみくもな対策は逆効果だ。

プログラムを使う側の立場で考えるとき
ウィルス対策ソフトのリアルタイム検査と俺プログラムのアクセスと
どっちが優先されるべき?
ウィルス対策ソフトのリアルタイム駆除と俺プログラムのアクセスと
どっちが優先されるべき?

プログラミング以外の考察を先に行いポイントを抑えておくのが先だぞ。


返信引用
kim
 kim
(@kim)
ゲスト
結合: 21年前
投稿: 29
Topic starter  

tetrapodさま、ご回答ありがとうございます。

なるなる^^話がどんどん難しくなってきましたね。

microSDカードのソフト上でのロック実現は難しいことですね。

皆様の貴重な時間潰してしまい申し訳ございません。

ありがとうございました。


返信引用
玲音 (st.lain)
 玲音 (st.lain)
(@玲音 (st.lain))
ゲスト
結合: 17年前
投稿: 89
 

依然、ややこしいと言えばややこしいですが、ふと思ったことを。

誰からのロック、という定義がなされていないので見当はずれカモ
しれませんが、例えばドライブを指定することによる形式からの保護と
いう意味では使える手カモしれません。
(一般的なPGやユーザーによるエクスプローラ等の操作からは有効?)

「unique volume name」でググると
>> Getting the unique volume name for an unmounted drive
というタイトル表示されます。
そのサンプルはアンマウント状態にあるドライブ(パーティション)のボリューム名が
取得できるものです。(デバイスタイプ等も出力してくれます)

CreateFile()が\\?\volume{xxx}の形式によるオープンを許可しているので、
ディスク管理ツールからドライブレターを外して、自前プログラムはボリューム名
を使用したオープンを行えば、安易な操作からの保護はできるカナ・・・と。


返信引用
玲音 (st.lain)
 玲音 (st.lain)
(@玲音 (st.lain))
ゲスト
結合: 17年前
投稿: 89
 

ごめんなさい、書き忘れました。

\\?\volume{xxx}の形式によるオープンがドライブ指定のオープンと同等で
あることと、\\?\volume{xxx}\hoge.txtのような指定も可能であることは
確認しています。
ドライブレターのシンボリックリンクのような働きになっているかと
妄想してます。(どっちがどっちのリンクかは知りませんが)


返信引用
kim
 kim
(@kim)
ゲスト
結合: 21年前
投稿: 29
Topic starter  

玲音 (st.lain)さま、丁寧なご回答ありがとうございます。

日本語が下手なので、何度も申し訳ございません。

基本的には、microSDをSDアダプタにいれて、
LOCKタブでライトプロテクトしたような状態にしたいです。

つまり、自分のツールからロックかけると他のツール、エクスプローラ、
他人から参照はできるけど、更新ができないようにしたいです。

アンマウント状態にあるドライブをボリューム名でオープンできるのは
知りませんでした。勉強になります^^

現在のつくりは
SDカードドライブ名を利用し、CreateFile()でオープンし、
SetFilePointer()で読み書きセクタに移動、
ReadFile()、WriteFile()でバイナリデータの読み書きを行っています。

今はセキュリティ対応でロック機能を入れてほしい話が出て、調査中です。

何度もすみませんでした。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

読み取りアクセスを許可しなければならないのが難しいですね。
完全な排他アクセスであれば、DeviceIoControl( FSCTL_LOCK_VOLUME ) でできるかも?


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>「話」のレベルならフィルタドライバとか API フックとかに手を出さないほうがいい
> Windows 自体を一瞬でぶっ壊すことができる代物だし
> 下手をすると rootkit に応用できる代物だし
> 習得に数ヶ月以上かかると思われる代物だし
そのとおりですね。
何度もブルー画面になることを覚悟しないとだめですね。
ウイルス対策ソフトの検索にひっかかってスパイウエアと間違われる可能性も
あると思います。

> 今回、SDアダプタは使いません。
> ドライブレベルで開いてバイナリーデータの読み書きをしています。
> 他人から更新を防ぐため、ロックをかけたい話が出てきたので・・・
ってことは、USB I/Fは独自開発ですか?
USBドライバーは、USBストレージデバイス(マイクロソフト製)を使うとしても、
ハード側は独自開発となるとハード側の対応ですね。
うまくハードでプロテクトかけるように作ればいいと思います。

>今はセキュリティ対応でロック機能を入れてほしい話が出て、調査中です。
新規にユーザーを作ってユーザー権限でロックかける方法もありかとおもいますね。


返信引用
固定ページ 1 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

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