2016-12-21 4 views
-1

現在、EasyHookを使用してuser32.dllに "MessageBeep"関数をフックしようとしています。私が[この例] [1]を実行していると、すべて正常に動作しているようです。しかし、52行目と60行目のthread-IDをテストアプリケーションのthread-IDに置き換えた場合、フックはohterプログラムには適用されません。EasyHookは他のスレッドでは機能しません

なぜSetExclusiveACL-Methodは他のスレッドIDを受け入れないのですか?例えば

Sub Main() 
    While True 
     Console.WriteLine(GetCurrentThreadId().ToString) 
     MessageBeep(&H40) 
     If Console.ReadKey().KeyChar = "c"c Then 
      Console.Clear() 
     End If 
    End While 
End Sub 
+0

を参照することができますか? –

+0

私は2つのアプリケーションを持っています: 1. EasyHook開発者が提供する例 2.上記のコードを持つvb.netの私のテストプログラム 元の例では、スレッドIDがSetExclusiveACL(new int [] { 0}); ist 0(フックが現在のスレッドに適用されることを意味します)。私は任意のスレッドIDにフックを適用したいが、私はこの作業を行うことはできない – user4841702

+1

つまり、アプリケーションAでMessageBeepのフックを設定するあなたはアプリケーションBでMessageBeepを呼び出します。そして、アプリケーションAのフック関数が実行されると思いますか? –

答えて

1

はあなたがフックしたい場合は:私は私のテストアプリケーションのスレッドIDを取得し、フックがのMessageBeep関数に動作するかどうかを確認するには、次のコードを使用してい

hook.ThreadACL.SetExclusiveACL(new int[] { 8788 }); 

ターゲットプロセス、あなたのターゲットプロセスにあなたのDLLを注入する必要がある、EasyHookはすでにそれを行う方法を提供しています。その注入されたDLLの中で、MessageBeepのLocalHookを設定することができます。以下はRemoteHooking.Inject

更新
//create channel to send text data and log 
RemoteHooking.IpcCreateServer<LogChannel>(ref _logChannelName, WellKnownObjectMode.Singleton); 

RemoteHooking.IpcCreateServer<TextDataChannel>(
    ref _textDataChannelName, WellKnownObjectMode.Singleton); 

CommandChannel = new Common.IPC.CommandChannel(); 

string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\" + INJECT_DLL_NAME; 
RemoteHooking.Inject(processID,InjectionOptions.DoNotRequireStrongName, 
       filePath, 
       filePath, 
       _logChannelName, _textDataChannelName, CommandChannel.PipeName, _pendingMsgType); 

を使用して注入を行うためのサンプルコードです:あなたが「他のプログラム」によって何を意味していますこのリンクにhttps://www.codeproject.com/Articles/27637/EasyHook-The-reinvention-of-Windows-API-hooking

関連する問題