· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Выгрузка драйвера

Посл.отвђт Сообщенiе


Дата: Апр 20, 2004 08:52:26

Добрый день.
Уважаемые гуру , подскажите как можно остановить или
выгрузить программно драйвер сетевой платы или любую
службу режима ядра.

Заранее спасибо.


Дата: Апр 20, 2004 09:24:50 · Поправил: q_q

tricker
net stop <служба>?


Дата: Апр 20, 2004 11:25:44

http://www.wasm.ru/article.php?article=drvw2k02
StopDriver proc uses esi ebx pszDriverName:LPSTR

local sest:SERVICE_STATUS

    xor ebx, ebx        ; assume error
    mov edi, offset g_szFail

    invoke OpenSCManager, NULL, NULL, SC_MANAGER_CONNECT
    .if eax != NULL
        mov esi, eax
        
        ; Unregister driver - remove registry directory
        invoke OpenService, esi, pszDriverName, SERVICE_STOP

        invoke LastError

        .if eax != NULL
            push eax
            mov ecx, eax
            invoke ControlService, ecx, SERVICE_CONTROL_STOP, addr sest

            .if eax != 0
                inc ebx                 ; success
                mov edi, offset g_szSuccess
            .endif
            call CloseServiceHandle

        .endif

        invoke CloseServiceHandle, esi
    .else
        invoke MessageBox, g_hDlg, addr g_szOpenSCManagerError, addr g_szCriticalError, \
                                        MB_OK + MB_ICONSTOP + MB_TASKMODAL
    .endif

    return ebx

StopDriver endp


Дата: Апр 21, 2004 08:22:43

Спасибо всем за ответ , но
ни команда net stop <drvname> , ни
приведенный код не останавливают драйвер сетевой платы ,
а дают ошибку № 1052.
Я уточню вопрос - мне хотелось бы найти программный способ
остановки подключения по локальной сети , как если бы делать
это "ручками" - Пуск->Настройка->Панель управления->Сеть и удаленный доступ
->Подключение по локальной сети->Отключить


Дата: Апр 21, 2004 12:52:03 · Поправил: Four-F

Если такой код ошибки, то это значит, что у драйвера нет функции выгрузки или указатель на нее в объекте драйвера затерт нулями. Это самый простой способ предотвратить выгрузку. Вот смотри пример для Mouclass. Даже если удастся получить хендл к его девайсу PointerClass0, то выгрузить драйвер нельзя, т.к. DriverUnload = NULL.
:driver Mouclass
Start    Size     DrvSect  pDrvExt  DrvInit  DrvStaIo DrvUnld  Name
ED348000 000054E0 8181FE48 8181FD78 ED34B4E4 ED348C7C 00000000 Mouclass
AddDevice        : ED34A142
DeviceObject*    : 8187AAB0
Flags            : 00000012 DRVO_LEGACY_DRIVER
HardwareDatabase : \REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM
FastIoDispatch*  : 00000000
IRP_MJ_CREATE                       at 8:ED34858C
IRP_MJ_CLOSE                        at 8:ED348808
. . .
IRP_MJ_PNP                          at 8:ED349026


Дата: Апр 21, 2004 13:33:52

Как тогда сама Windows отключает соединение по локальной сети ? В софтайсе после этого написано unload32 <имя драйвера>


Дата: Апр 21, 2004 13:49:17

Кстати Софтайс сообщает :

:driver e100b
Start Size DrvSect pDrvExt DrvInit DrvStaIo DrvUnld Name
BFD18000 00014E00 817BDF28 817BDEB8 BFD1A9D6 00000000 BFEDB235 E100B
AddDevice : BFECB58A
DeviceObject* : 817BD610
Flags : 00000012 DRVO_LEGACY_DRIVER
HardwareDatabase : \REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM
FastIoDispatch* : 00000000
IRP_MJ_CREATE at 8:BFEC92A0
IRP_MJ_CLOSE at 8:BFEC9916
. . .
IRP_MJ_PNP at 8:BFECCB2E


Дата: Апр 21, 2004 14:19:09

Поставь бряк на DriverUnload и посмотри доходит ли твой программный вызов до неё. Если доходит, тогда там и разберешься как он обрабатывается.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.085