サーバーで XMLSocket を作成するフラッシュ アプリケーションを含む WebBrowser コンポーネントを表示するアプリケーションがあります。現在、ログ purpuse のために recv (幸運にも LocalHook) をフックしようとしていますが、ソケットの内容を読み取ろうとすると、奇妙な文字しか取得できませんが、SpyStudio でフックを設定すると、読み取り可能な文字列が取得されます。ここに私が使用するコードがあります:
でフックをセットしました
CreateRecvHook = LocalHook.Create( LocalHook.GetProcAddress("ws2_32.dll", "recv"), new Drecv(recv_Hooked), this); CreateRecvHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });
必要なものをすべてセットアップしました
[DllImport("ws2_32.dll")] static extern int recv( IntPtr socketHandle, IntPtr buf, int count, int socketFlags ); [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] delegate int Drecv( IntPtr socketHandle, IntPtr buf, int count, int socketFlags ); static int recv_Hooked( IntPtr socketHandle, IntPtr buf, int count, int socketFlags) { byte[] test = new byte[count]; Marshal.Copy(buf, test, 0, count);
}IntPtr ptr = IntPtr.Zero; ptr = Marshal.AllocHGlobal(count); Marshal.Copy(test, 0, ptr, count); string s = System.Text.UnicodeEncoding.Unicode.GetString(test); Debug.WriteLine(s); System.IO.StreamWriter file = new System.IO.StreamWriter("log.txt"); file.WriteLine(s); file.Close(); return recv(socketHandle, buf, count, socketFlags);;
私はすでに成功せずに別のエンコーディングを使用しようとしました。ちなみに、WebBrowser には問題ないようです。