Проблема с функцией Unload
От: polambus  
Дата: 04.04.08 10:05
Оценка:
При попытке выгрузить драйвер следющий код "зависает".Насколько я понял, то не вызывается PCloseAdapter. В чем может юыть проблема?
void PCloseAdapter (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status)
{
    _asm
    {
        int 3
    }
    DbgPrint("PCloseAdapter called");
    NdisSetEvent(&CloseWaitEvent);
    return;
}

void OnUnload( IN PDRIVER_OBJECT DriverObject)
{

    NDIS_STATUS Status;

    DbgPrint("OnUnload called");
    IoDeleteSymbolicLink(&SymLink);
    IoDeleteDevice(DriverObject->DeviceObject);
    NdisResetEvent(&CloseWaitEvent);
    NdisCloseAdapter(&Status,BindingAdapter);
    if (Status==NDIS_STATUS_PENDING)
    {
        NdisWaitEvent(&CloseWaitEvent,0);
    }

    
    NdisDeregisterProtocol(&Status,ProtocolHandle);
    if (NT_SUCCESS(Status)==FALSE)
    {
        DbgPrint("DeregisterProtocol faild!!!");
    }
    else
    {
        DbgPrint("DeregisterProtocol SUCCESS");
    }


    NdisFreeBufferPool(BufferPoolH);
    NdisFreePacketPool(PacketPoolH);
    DbgPrint("Free Buffer and Packet Pools");
    NdisFreeSpinLock(&GlobalLock);
    NdisFreeSpinLock(&ReadlLock);
    DbgPrint("Free SpinLock");

    return;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.