Hook recv and unreadable buffer

Dec 29, 2010 at 10:13 AM

I have an application that shows a WebBrowser component, which contains a flash application that create a XMLSocket with a server.I'm now trying to hook recv ( luckly a LocalHook) for log purpuse, but when I try to read the socket content I get only strange chars, but if i set the hook with SpyStudio I get readable strings.Here is the code I use : 
1. I set the hook with

CreateRecvHook = LocalHook.Create(
    LocalHook.GetProcAddress("ws2_32.dll", "recv"),
    new Drecv(recv_Hooked),
    this);

2. I set up everything I need with
[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);;


}

I've already tried using different Encoding without success. As a side note, the WebBrowser doesn't seems to have any problem.