2009-10-19 22 views
9

Mam dll wyprodukowane przez osobę trzecią, która ma jakąś wewnętrzną strukturę danych, która ogranicza jej rozmiar do elementów X.Załaduj wiele kopii dll w tym samym procesie

Zasadniczo ma kolejkę z X jako limit.

Teraz z tego, co wiem, że DLL są na proces, ale czy jest możliwe załadowanie biblioteki DLL więcej niż raz? Może na wątek? W języku C#? lub w C++/CLI?

Próbuję załadować natywne dll C++.

Odpowiedz

5

Jedynym sposobem, w jaki można to zrobić, jest posiadanie wielu kopii tego samego pliku dll, a następnie załadowanie ich dynamicznie.

7

Niestety, rdzeń NT DLL loader routines nie ujawnia publicznego interfejsu, aby pominąć pulę już załadowanych bibliotek DLL. Jako takie, jesteś w lewo z zaledwie kilku opcji:

  • kopiowania, hardlink, dowiązanie symboliczne, i/lub wykorzystywać punkty dowiązania oszukać ładowarka do myślenia, masz wiele różnych bibliotek DLL.
  • Użyj wielu procesów i załaduj jedną bibliotekę DLL na proces.
  • Napisz nowy ładowacz DLL (bardzo nie dla osób o słabym sercu!)
  • Przekonaj sprzedawca DLL, aby to naprawić (może być trudniejsze niż napisanie ładowarka DLL :)
+2

Zauważ, że opcje 1 i 3 może się zepsuć, jeśli DLL zakłada, że ​​ładuje się tylko raz na proces (całkiem rozsądne założenie). Biblioteki DLL COM mogą być wyjątkowo podatne na ataki, ponieważ obie kopie mogą zawierać ten sam identyfikator GUID/interfejs. – MSalters

Powiązane problemy