System.DllNotFoundException с использованием EasyHook в Visual Studio 2010 - PullRequest
1 голос
/ 02 января 2011

У меня следующий код:

       try
        {
            Debug.WriteLine("Hook Start");
            RecvHook = LocalHook.Create(
                LocalHook.GetProcAddress("ws2_32.dll", "recv"),
                new Drecv(recv_Hooked),
                this);


            RecvHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });
        }
        catch (Exception ExtInfo)
        {
            Debug.WriteLine("Error creating Hook");
        }
...
        [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);

        }

Когда я запускаю проект, я получаю следующую ошибку:

A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in System.Windows.Forms.dll
Inizio Hook
A first chance exception of type 'System.DllNotFoundException' occurred in EasyHook.dll
A first chance exception of type 'System.DllNotFoundException' occurred in EasyHook.dll
Error creating Hook

Любое предложение о том, что может вызвать эту ошибку?Я добавил ссылку на все необходимые DLL ...

Ответы [ 2 ]

0 голосов
/ 25 января 2011

Я не могу дать вам точное решение, но, возможно, у вас возникли эти проблемы ...

  • Вы добавляете dll в папку вашего проекта / bin?Если да, скопируйте эту папку в System32 и снова добавьте в качестве ссылки на эту папку

  • Или попробуйте это, откройте командную строку Visual Studio и выполните эту команду regsvr32 yourDLLLocation затем добавьте его в качестве ссылки сейчас.

Надеюсь, что это решит проблему, и убедитесь, что тип вашей системы и тип dll, оба должны быть для приложений win32.

0 голосов
/ 25 января 2011

Скорее всего : Попробуйте запустить VS 2010 от имени администратора.На самом деле я создал ярлык в меню «Пуск» VS «Запуск от имени администратора», поэтому мне не нужно запоминать.

В качестве альтернативы : в документации EasyHook для метода Inject упоминается, что: "Если вы внедряете библиотеку в какой-либо целевой процесс, имейте в виду, что ваш рабочий каталог будет переключен. EasyHook автоматически добавит каталог приложения для инъекций в качестве первого каталога переменной среды PATH цели. Поэтому убедитесь, что все необходимые зависимостинаходится в каталоге приложения для инъекций, в системном каталоге или в любом каталоге, который по умолчанию содержится в переменной PATH "

Отчаянное последнее средство : некоторые ошибки, по крайней мере, полулегкие, поэтому выможно зайти в меню VS Отладка -> Исключения ... и снять галочку с ошибочной ошибки, за исключением того, что она там не сломается.У меня был один или два случая, когда код на самом деле работал нормально, как только я сказал VS не останавливаться на этой ошибке.

Кстати: какие двоичные файлы вы включили, какова ваша системная архитектура и ОС?

...