LoadLibrary+ole32.dll=ERROR_NOACCESS (3E6h)

Тема в разделе "WASM.WIN32", создана пользователем seeQ, 10 янв 2008.

  1. seeQ

    seeQ New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2003
    Сообщения:
    71
    Вот, под вечер начинаются странности.
    Есть дллка, у нее DllMain динамически(через LoadLibrary) подгружается ole32.dll. Так вот, иногда LoadLibrary возвращает ERROR_NOACCESS. Хочется разобраться в чем собственно дело. Первое, что приходит на ум, что есть в винде дллки(kernel32.dll, user32.dll), которые грузятся только по тому адресу, что указан у них в ImageBase и если этот адрес уже занят, то грузиться не хотят. Может ole32.dll, тоже к ним относится? Да и ImageBаse у нее подозрительный (774E0000). Или проблема не в этом?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Учись пользоватся отладчиком.
     
  3. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    1. Если ImageBase занаят, и имена совпадают, то происходит простой инкремент счетчика и выполнение длл-мейн.
    2. Если ImageBase занят, но имена не совпадают (к примеру, если переименовать кернел32), то все прекрасно грузиццо и по другому ImageBase.

    С ole32.dll аналогично.

    Трабла может быть из-за того, что при первой инициализации длл блокирует доступ к определенным общим ресурсам. Попробуй перед загрузкай вызвать GetModuleHandleA("ole32.dll")
    Если вернет не ноль, то надобность загружать повторно - отпадает.