最近は私の手元以外に Windows マシンを持っていないので、easyhookを試してみてください。以下は単なるコールフローです(私が何年も前にしたことのようなもので、ソフトウェアのソケットバインドポートをDetoursによって別のものに変更しました)
CreateFileW のフックについて:
easyhook の wikiの例は、ここで必要なものです。
CreateFileHook = LocalHook.Create(
LocalHook.GetProcAddress("kernel32.dll", "CreateFileW"),
new DCreateFile(CreateFile_Hooked),
this);
CreateFile_Hooked
パラメータを変更してから、InFileName
実際の CreateFileW を呼び出すことができます
static IntPtr CreateFile_Hooked(
String InFileName,
UInt32 InDesiredAccess,
UInt32 InShareMode,
IntPtr InSecurityAttributes,
UInt32 InCreationDisposition,
UInt32 InFlagsAndAttributes,
IntPtr InTemplateFile)
{
// FIGURE OUT THE FILE NAME THAT YOU WANT HERE
// IF the InFileName is not your Document name "My.doc", then call orignal CreateFile
// with all the parameter unchanged.
// call original API...
return CreateFile(
YOUR_CHANGED_FILE_NAME_HERE,
InDesiredAccess,
InShareMode,
InSecurityAttributes,
InCreationDisposition,
InFlagsAndAttributes,
InTemplateFile);
}
コール フロー:
タイトルを「My_Document_2012_11_29」に変更したら、Word プロセスの CreateFileW をフックします。たとえば、InFileName が「My.doc」の場合、「My_Document_2012_11_29」に変更する必要があります。
これは Word プロセスで行われるため、Detoured 関数は "My.doc" が "My_Document_2012_11_29" にマッピングされていることを知りません。このマッピング情報を取得するには多くの方法があります。1 つは、このマッピング情報をアプリ内の既知のファイルに保存し、そのファイルを Detoured 関数で読み取ることです。