他プロセスが排他モードで開かれているファイルにアクセスする方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アキ

他プロセスが排他モードで開かれているファイルにアクセスする方法

#1

投稿記事 by アキ » 10年前

現在ファイルのチェックを行うプログラムでCreateFile()を使用してデータの読み込みを行ってます。
パラメータは以下になります。
CreateFile("パス", GENERIC_READ ,
       FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

リードのみで共有モードをONの設定を使用しています。
この場合、他のプロセスが排他モードでファイルをオープンしていると、当たり前ですがアクセスできません(GetLastError()=5 で失敗します)

なんらかの方法でこのファイルに対して、ファイルのハンドルを取得することはできないでしょうか?
また無理の場合、このファイルのバイナリデータをメモリー上にコピーする方法などは無いでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: 他プロセスが排他モードで開かれているファイルにアクセスする方法

#2

投稿記事 by h2so5 » 10年前

調べてみた限りでは以下の方法があります。

1. CreateRemoteThreadを使ってロックしているプロセスのハンドルを強制的に削除する。
これで排他モードを解除してハンドルを得ることができます。
問題は勝手にハンドルを削除されたプロセスでエラーがでる可能性が高いことです。
http://www.codeguru.com/cpp/w-p/files/f ... -Files.htm

2. Volume Shadow Copy を利用する
バックアップ用の機能です。ロックされたファイルを含めてボリュームごとコピーできます。
ボリューム単位でしかコピーできないので使いにくいと思いますが。
http://wj32.org/wp/2012/12/13/how-to-ba ... rvice-vss/

3. 何らかの方法でOSより低いレベルでファイルにアクセスする
排他モードはOSが管理しているので、それより低いレベルではアクセスできるはずです。

閉鎖

“C言語何でも質問掲示板” へ戻る