Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Como o driver do adaptador é instalado como um serviço de driver de modo kernel, o sistema operacional carrega o driver do adaptador no momento da inicialização do sistema e chama a rotina DriverEntry do driver. A rotina DriverEntry recebe dois parâmetros: um objeto de driver e um nome de caminho do Registro. DriverEntry deve chamar a função PortCls PcInitializeAdapterDriver com os parâmetros driver-object e registry-path name mais um terceiro parâmetro, que é um ponteiro para a função AddDevice do driver do adaptador.
No exemplo a seguir, a função DriverEntry do driver passa o ponteiro da função MyAddDevice, que aponta para a função AddDevice do driver, como o terceiro parâmetro para a rotina PcInitializeAdapterDriver.
NTSTATUS
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
return PcInitializeAdapterDriver(DriverObject, RegistryPath, MyAddDevice);
}
A rotina PcInitializeAdapterDriver instala a rotina AddDevice fornecida na extensão de driver do objeto de driver e instala os manipuladores IRP do driver PortCls no próprio objeto de driver.
O código seguinte é um exemplo de implementação da função do driver MyAddDevice.
#define MAX_MINIPORTS 6 // maximum number of miniports
NTSTATUS
MyAddDevice(
PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT PhysicalDeviceObject
)
{
return PcAddAdapterDevice(DriverObject, PhysicalDeviceObject, MyStartDevice,
MAX_MINIPORTS, 0);
}
Essa função chama a função PortCls PcAddAdapterDevice, que cria o dispositivo adaptador especificado, associa um driver ao dispositivo e armazena um ponteiro para a função do driver do MyStartDevice adaptador, que é chamada quando o sistema operacional inicia o dispositivo (consulte Iniciando um dispositivo). A rotina PcAddAdapterDevice cria um objeto de dispositivo funcional (FDO) e associa-o com o objeto de dispositivo físico (DOP) que é fornecido pelo sistema. O novo FDO é criado com uma extensão que PortCls usa para armazenar informações de contexto sobre o dispositivo. Este contexto inclui o MyStartDevice ponteiro de função fornecido pelo MyAddDevice.
Depois que o sistema operacional determina quais recursos (interrupções, canais DMA, endereços de porta de E/S e assim por diante) atribuir ao dispositivo, ele envia ao dispositivo uma solicitação para iniciar (IRP_MN_START_DEVICE). Em resposta a essa solicitação, o manipulador de solicitação no driver PortCls chama a função do MyStartDevice driver do adaptador, que é mostrada no código de exemplo a seguir:
NTSTATUS
MyStartDevice(
PDEVICE_OBJECT DeviceObject,
PIRP Irp,
PRESOURCELIST ResourceList
)
{
...
}
O manipulador de solicitações fornece MyStartDevice ponteiros para o objeto de dispositivo, solicitação de IRP_MN_START_DEVICE e lista de recursos (consulte IResourceList). A MyStartDevice função particiona a lista de recursos nos recursos necessários para cada driver de miniporta que precisa ser iniciado. A função então inicia cada driver de miniporta e retorna o controle para PortCls, que completa o IRP e retorna o controle para o sistema operacional.
Para obter mais exemplos de código de inicialização do driver, consulte os drivers de adaptador de áudio de exemplo no Microsoft Windows Driver Kit (WDK).