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, и всё-таки перезаписать
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10