Дров. BSOD. Перезагрузка.

Тема в разделе "WASM.BEGINNERS", создана пользователем asmfan, 25 сен 2007.

  1. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Итак, дров упал в бсод. Но перед этим успел наследить в реестре, т.е. его имя, и проч. параметры в секции CurrentControlSet/Services. После перезагрузки, для успешной новой загрузки того же дрова нужно бы почистить следы его пребывания в реестре. Итак, почистили. Но как сделать так, чтобы после чистки реестра - от его имени, проч. других параметров - можно было бы без перезагрузки загружать этот дров повторно. Что надо зафлушить или мож. другие манипуляции? Посоветуйте новичку.

    Т.е. имеем 2 перезагрузки - после БСОДа и после чистки реестра, чтобы можно было снова загружать тот же дров (здесь речь про динамическую загрузку- SCM).
    Как сократить это число до 1й перезагрузки?
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    OpenService\DeleteService удаляет и из базы SCM и из реестра, по идее после перезагрузки (если драйвер не запускался) база SCM должна быть пуста поэтому удаление из реестра должно решить проблему и CreateService должен отработать нормально, так что откуда берётся вторая перезагрузка у тебя мне не ясно =\
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    после ребута и удаления сервиса все у меня ОК. одной перезагрузки достаточно
     
  4. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    rain, Great
    Зачастую до DeleteService не доходит, а падает в БСОД, посему реестр не чистится менеджером. И после БСОДа реестр база не пуста. И приходится её чистить, но после чистки опять нужна перезагрузка(!?) иначе дров не грузится менеджером. А почему - не знаю. Будто база менеджера не увидела изменений в реестре после чистки. Приходится ребутить ещё раз( И ведь не могу понять почему... вот и спрашиваю мож чё за'Flush'ить надо) чтобы изменения вступили в силу без перезагрузки.

    CreateService возвращается с ERROR_SERVICE_EXISTS (00000431), хотя перед этим реестр был почищен. Зато после перезагрузки всё норм. Вот такие пироги.
    ХР СП2+
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    у меня нормально все грузится.
    если ты делетишь и создаешь потом в одной сессии SCM, тогда он мог не произвести фактическое удаление сервиса, а ты пытаешься его создать. мне помогает перезагрузка только проги-лоадера. в новой сессии SCM все ок
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Хм, а закрыть SCM не проще?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    IceStudent
    ну да, я просто влом было писать переоткрытие хендла, мне проще перезапустить лоадер :))0
    ну а так конечно проще. я это и имел в виду в словах
     
  8. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Хм... выходит у меня одного такая проблема возникает..?
    шаги:
    1. Лоадер открывает базу, создаёт сервис, стартует сервис.
    2. Дров уходит в БСОД, при этом лоадер не удаляет ничего из реестра.
    3. После БСОДА чистится реестр в regedit'е.
    4. После чистки реестра попытка запуска лоадера ведёт к ERROR_SERVICE_EXISTS.
    5. После новой перезагрузки лоадер отрабатывает на ура.
    Люди, человеки... у кого такое же встречается то?(( и как с этим бороться? как дать системе обновить базы сервисов динамически?
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    asmfan
    По 1 пункту - хендлы закрываются хоть? Или бсод при старте драйвера?

    Вообще, у меня было нечто схожее, но только я пробовал второй драйвер зарегистрировать с тем же DisplayName, что и у первого (запись которого была удалена регедитом). Возникла мысль, что DisplayName где-то кешируется, но дальше смотреть не стал.
     
  10. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    эгм.. я во втором посте предлагал сделать OpenService \ DeleteService, что-то из этого вышло?
    upd:
    IceStudent Всё правильно если делать без перезагрузки так и должно быть, а вот почему у ТС после перезагрузки не чистится база SCM? я такого ещё не видел (это хоть теоретически невозможно?)
    asmfan может всё-таки дров автостартом запускается, но не бсодит, поэтому оставляет след в SCM, а когда ты удаляешь из реестра запись то в SCM ессесно остаётся запись и говорит что есть уже такой
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Нужно сделать ровно обратные операци - открыть SCM, сделать DeleteService, закрыть SCM
    после этого можно снова открывать SCM и добавлять этот сервис. Реестр лучше руками не трогай
     
  12. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Просто специфика дрова такова, что он хранится в темповом для каждого запуска лоадера файле и информация о его имени нигде кроме контекста лоадера и самого реестра не сохраняется, а так... наверное вы все правы про чистку базы сервисов программно...
    Спасибо всем, принявшим участие. Вопрос считаю исчерпаным.

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

    Терь другой вопрос - что считается хорошим тоном, если при первом запуске лоадера имеем ERROR_SERVICE_EXISTS? Динамически создавать имя сервиса, помимо имени файла?
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Новая версия DT так и делает :-\ Только юзеров шугает.