У меня есть приложение, которое показывает компонент WebBrowser, который содержит флэш-приложение, которое создает XMLSocket с сервером.Сейчас я пытаюсь перехватить 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);
<pre><code>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, похоже, нет проблем.