




GM писал(а):Так вот чтобы зарегистрироваться, компоненту нужен доступ к ветке реестру HKLM\Software\Classes или хотя бы HKCU\Software\Classes. У меня бывали случаи, когда доступ к этим веткам был открыт только для чтения, в результате чего компоненту не удается записать нужные ключи, а приложению найти сам компонент с помощью реестра.
Все что мне пришло в голову, это создать небольшую библиотеку, которая бы перехватывала некоторые функции по работе с реестром, и в случае обращении к *\Software\Classes, перенаправила бы их в более доступное место, ну скажем в HKCU\Software\MyProgam\Classes. Как идея, будет ли такой метод работать или есть ли другие способы решить эту проблему?



GM писал(а):А разве регистрировать компонент не нужно?


Регистрация осуществляется с помощью вызова команды DLLRegisterServer. А как мне вручную заставить регестрироваться в HKCU?


GM писал(а):Регистрация осуществляется с помощью вызова команды DLLRegisterServer. А как мне вручную заставить регестрироваться в HKCU?



tyomitch писал(а):Но VB6 этого не знает, и всегда пытается писать в HKLM\Software\Classes. Вот именно в HKCU\Software\Classes его и нужно перенаправлять.








ANDLL писал(а):Andrey Fedorov, DLLRegisterServer это функция той библиотеки, которая регистрируется. Она, судя по всему, вызывает какую-то функцию из msvbvm.
ANDLL писал(а):Может просто прописать в эту функцию что-то типа call <своя_процедура> а в ней уже ВРУЧНУЮ регить библиотеку. Сработает?


ANDLL писал(а):Andrey Fedorov, DLLRegisterServer это функция той библиотеки, которая регистрируется. Она, судя по всему, вызывает какую-то функцию из msvbvm.




Ты сумеешь самостоятельно прописать все нужные ключи? Я - нет.


Andrey Fedorov писал(а):ANDLL писал(а):Andrey Fedorov, DLLRegisterServer это функция той библиотеки, которая регистрируется. Она, судя по всему, вызывает какую-то функцию из msvbvm.
А нафига ей нужна msvbvm? Откуда такой вывод? Компоненты ведь пишутся не только на VB...



Antonariy писал(а):Ты сумеешь самостоятельно прописать все нужные ключи? Я - нет.
Вытащить все ключи уже зарегиситрированной библиотеки не проблема. Скорее геморой, в зависимости от количества классов. На каждый класс нужно три ветки.
1. HKCR\[Название библы].[название класса] - оттуда узнаем CLSID
2. HKCR\CLSID\{...} - оттуда узнаем TypeLib
3. HKCR\TypeLib\{...}



Если бы эти ключи там уже были, то и не нужно бы было их никуда переносить.

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



Совершенно не реально.
Твой код вообще не запускается при регистрации. Когда ты собераешься ставить хук на API для работы с реестром?
А в Windows NT еще и возникает вопрос КАК?


ANDLL писал(а):А как ты определишь адрес ячейки в таблице импорта?


А перезаписать саму функцию невозможно. Ясное дело...


ANDLL писал(а):Потому что API-функции располагаются в защищенной области памяти.
Там нельзя ничего переписать.



tyomitch писал(а):ANDLL писал(а):Потому что API-функции располагаются в защищенной области памяти.
Там нельзя ничего переписать.
Можно снять защиту с помощью VirtualProtect, и всё-таки перезаписать


 
 
Сейчас этот форум просматривают: AhrefsBot и гости: 8