ERROR_SERVICE_MARKED_FOR_DELETE

Тема в разделе "WASM.WIN32", создана пользователем cresta, 1 мар 2006.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Кто может пометить сервис для удаления и по какой причине?

    Ситуация такая: программа запускается и пытается открыть драйвер через CreateFile. Если драйвер запущен, то получает хэндл и хранит его для общения с ним в процессе работы. При завершении программа закрывает этот хэндл.

    Если драйвер не был запущен, то вызываются последовательно

    1.OpenSCManager

    2.CreateService

    3.OpenService если CreateService==ERROR_SERVICE_EXISTS

    3.StartService

    4.CreateFile

    все хэндлы сохраняются и при завершении программы все это хозяйство закрывается.

    Если программа работает достаточно длительное время, то при завершении она не может остановить драйвер, как я понял, по причине ERROR_SERVICE_MARKED_FOR_DELETE. И драйвер остается запущенным (продолжает периодически выводить инфу по DbgPrint).

    И при последующем запуске программа опять же не может получить к нему доступ - ERROR_SERVICE_MARKED_FOR_DELETE. Хотя он все ещё работает. И спасает только перезагрузка.

    Вот такая ситуация. Как победить?
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Странно, что она не может остановить драйвер (если драйвер это поддерживат (Unload function) .. У меня такого никогда не возникало.

    А ты проверял , заходит ли в процедуру выгрузки при получении соответствующего IRP ?
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    В DriverUnload не заходит, т.к. там DbgPrint("DriverUnload"); и этой строки в DbgView нет.
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Да.. гадать так можно долго наверно. Хотя еще уточнение.. А не виснет ли драйвер.. Может ему памяти в какой-то момент нехватает (аллок не вызвался и все накрылось ..) или чтото в этом духе.. И еще - Сайс как нить реагирует ? (попробуй так же долго протестить с сайсом этот драйвер с прогой)
     
  5. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165


    Посмотри, может ещё какойто процесс открыл хендл. Скажем антивирь...
     
  6. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Может быть я ошибаюсь и к данной ситуации это не применимо, но у меня была такая ситуация (драйвер не останавливался).

    Проблема оказалась в том, что в процедуре AddDevice я создавал ассоциативный список (ExInitializePagedLookasideList), а в процедуре выгрузки драйвера я НЕ уничтожал его (ExDeletePagedLookasideList).

    Это и не давало возможности выгрузить драйвер.

    Более того, при попытке переустановки драйвера (остановить, заменить файл драйвера, запустить новый), я "наблюдал" весьма симпатичный BSoD :derisive:
     
  7. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    TermoSINteZ

    На все ExAllocatePage стоит проверка успешности, драйвер не виснет

    DelExe

    Антивирусами не пользуюсь, разве что файрвол что-то...

    ksu_ant

    Все, что создается - все потом закрывается/уничтожается. На этот предмет я просмотрел всё.



    В общем, видимо надо ещё понаблюдать, накопить данных.
     
  8. Koshak

    Koshak New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    31
    Адрес:
    Russia
    ERROR_SERVICE_MARKED_FOR_DELETE у меня возникало только после того, как я для драйвера вызывал DeleteService. И то, только в том случае если драйвер не был остановлен. И тогда спасала действительно только перезагрузка. Посмотри, может кто-то у тебя его удаляет?
     
  9. ViCooper

    ViCooper Victor

    Публикаций:
    0
    Регистрация:
    11 дек 2006
    Сообщения:
    26
    При удалении драйвера DeleteService он не удаляется сразу а помечается маркером ERROR_SERVICE_MARKED_FOR_DELETE как тока все хендлы связанные с драйвером будут закрыты он выгружаеца. У тя как я понял хендлы закрываются при завершении проги...