System.DllNotFoundException с использованием easyHook в Visual Studio 2010

StackOverflow https://stackoverflow.com/questions/4578589

  •  14-10-2019
  •  | 
  •  

Вопрос

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

       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 ...

Это было полезно?

Решение

Более вероятный: Попробуйте запустить VS 2010 в качестве администратора. Я фактически сделал свой сочетание меню VS Start «запустить в качестве администратора», поэтому мне не нужно помнить.

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top