- PR -

ファイルハンドルからファイル名の取得について

1
投稿者投稿内容
penpen
常連さん
会議室デビュー日: 2006/01/19
投稿数: 22
投稿日時: 2006-09-14 15:16
お世話になっております。

CreateFile が返したオブジェクトハンドルからファイル名を取得することは出来るのでしょうか?

hFile = CreateFile("c:\test.txt", GENERIC_READ, 0, 0, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);

hFileオブジェクトハンドルからファイル名(c:\test.txt)を取得するAPIは存在するのでしょうか?
getFileSize APIを使用することで、ファイルサイズを取得出来るのはわかったのですが、ファイル名を取得するにはどのAPIを使用すればよいのかが調べてもわかりません。

どなたかご存知の方がおられましたら、教えて頂けませんでしょうか。
よろしくお願いいたします。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-09-14 15:25
なんでそんなことする必要があんだ?
自分でパスを指定してハンドルを取得してるんだから自分で保持しておけばいいだろ。
ダッチ
大ベテラン
会議室デビュー日: 2005/10/31
投稿数: 113
投稿日時: 2006-09-14 21:24
ダッチです。

引用:

penpenさんの書き込み (2006-09-14 15:16) より:

hFile = CreateFile("c:test.txt", GENERIC_READ, 0, 0, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);



これって .NET Framework を使用した言語ですか?
そうなのでしたら
System.IO.File クラス と
System.IO.FileInfo クラス でやりたいことはできると思いますが。

それとも、どうしても API を使いたいのでしょうか。
penpen
常連さん
会議室デビュー日: 2006/01/19
投稿数: 22
投稿日時: 2006-09-14 23:58
返信ありがとうございます。

今API Hookを使用して、ファイル操作(読み書き)の情報を記録するプログラムを作成しており、WriteFile、ReadFile APIに渡ってくるファイルハンドルからファイル名を取得できないものかといろいろ探しているところです。

プルグラムは、VC6で作成してます。

よろしくお願いいたします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-09-15 00:19
絶対ありそうと思ったんですが、意外にもズバリのものが見つかりませんね。
GetFileInformationByHandle
という API があるのですが、残念ながらファイル名を取得できません。
幾つか組み合わせたらできるのかな?
_________________
囚人のジレンマな日々
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-09-15 00:40
Win32 API のレベルでは不可能だった記憶があります。

NTDLL を使って、ZwQueryObject() で ObjectNameInformation を取ってきてゴニョゴニョすればできるかもしれません。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-09-15 08:46
普通にファイル名を取得できるようにインターフェイス作った方がいくね?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-09-15 21:38
 IE7 の type=file が、ファイル名しか渡さない(パスを渡さない)ようになったのは、なぜですか?

 .NET Framework の OpenFileDialog で、ローカルマシン以外からこれを呼び出すと、FileName プロパティにアクセスできないのはなぜですか?


 ファイル ハンドルからファイル名がわかるなら、OpenFileDialog の仕様が無駄になりませんか?
1

スキルアップ/キャリアアップ(JOB@IT)