Configurando um arquivo INF para um driver de filtro de monitoramento
Os seguintes problemas de instalação do driver de filtro NDIS estão associados aos drivers de filtro de monitoramento:
Defina a entrada de arquivo CLASSE INF como NetService no arquivo INF. O exemplo a seguir mostra uma entrada de classe de exemplo para o arquivo INF.
Class = NetService
A seção DDInstall em um arquivo INF do driver de filtro deve ter uma entrada Características . O exemplo a seguir mostra como você deve definir a entrada Características no arquivo INF do filtro.
Characteristics=0x40000
O valor 0x40000 indica que NCF_LW_FILTER (0x40000) está definido. Os drivers de filtro não devem definir o sinalizador NCF_FILTER (0x400). Os valores dos sinalizadores xxx NCF_ são definidos em Netcfgx.h. Para obter mais informações sobre NCF_ sinalizadores Xxx , consulte Seção DDInstall em um arquivo INF de rede.
Defina a entrada de arquivo INF NetCfgInstanceId no arquivo INF, como mostra o exemplo a seguir.
NetCfgInstanceId="{5cbf81bf-5055-47cd-9055-a76b2b4e3697}"
Você pode usar a ferramenta Uuidgen.exe para criar o GUID para a entrada NetCfgInstanceId .
A seção DDInstall do arquivo INF para um driver de filtro deve incluir uma diretiva Addreg para uma chave Ndi . O arquivo INF deve especificar a entrada Serviço sob a chave Ndi . A entrada ServiceBinary na seção service-install do arquivo INF especifica o caminho para o binário para o driver de filtro. Para obter mais informações, consulte Adicionando valores de Service-Related à seção Ndi Key e DDInstall.Services em um arquivo INF de rede.
A seção DDInstall em um arquivo INF do driver de filtro deve ter entradas FilterType e FilterRunType . Para especificar um filtro de monitoramento, defina a entrada FilterType no arquivo INF, como mostra o exemplo a seguir.
HKR, Ndi,FilterType,0x00010001 ,0x00000001
O valor FilterType 0x00000001 indica que o filtro é um filtro de monitoramento.
Defina a entrada FilterRunType no arquivo INF, como mostra o exemplo a seguir.
HKR, Ndi,FilterRunType,0x00010001 ,0x00000002
O valor 0x00000002 no exemplo anterior indica que o módulo de filtro é opcional. Para instalar um módulo de filtro obrigatório, defina a entrada FilterRunType como 0x00000001. Para obter mais informações, consulte Drivers de filtro obrigatórios.
Nota É altamente recomendável que um driver LWF (filtro leve de monitoramento) não seja obrigatório, a menos que ele seja usado em um ambiente controlado em que não haverá nenhuma modificação opcional de drivers LWF. Isso ocorre porque um driver LWF de monitoramento obrigatório pode fazer com que os drivers LWF de modificação opcionais falhem em FilterAttach. Um driver LWF de monitoramento é associado a cada filtro de modificação e associação por design para facilitar o monitoramento do tráfego de rede em todos os níveis. Considere o cenário a seguir.
- Uma instância de um driver LWF de monitoramento obrigatório é instalada em um driver LWF de modificação opcional.
- O driver LWF opcional de modificação inferior falha ao anexar a um componente inferior. Isso fará com que o manipulador FilterAttach do driver LWF de monitoramento obrigatório não seja chamado.
- Como agora uma instância de um driver LWF obrigatório não é carregada, o NDIS não associará nenhum protocolo (como TCP/IP) à interface ou NIC, tornando a interface inutilizável.
O exemplo a seguir mostra como um arquivo INF do driver de filtro especifica o nome do serviço.
HKR, Ndi,Service,,"NdisMon"
Neste exemplo, "NdisMon" é o nome do serviço do driver conforme é relatado ao NDIS. Observe que o nome do serviço de um driver de filtro pode ser diferente do nome do binário para o driver, mas normalmente eles são os mesmos.
O exemplo a seguir mostra como o arquivo INF do filtro faz referência ao nome do serviço do driver de filtro quando ele adiciona esse serviço.
[Install.Services] AddService=NdisMon,,NdisMon_Service_Inst [NdisMon_Service_Inst] DisplayName = %NdisMon_Desc% ServiceType = 1 ;SERVICE_KERNEL_DRIVER StartType = 1 ;SERVICE_SYSTEM_START ErrorControl = 1 ;SERVICE_ERROR_NORMAL ServiceBinary = %13%\ndisMon.sys LoadOrderGroup = NDIS Description = %NdisMon_Desc% AddReg = Common.Params.Reg
Um arquivo INF de filtro deve especificar pelo menos o nome do serviço primário do filtro para o atributo CoServices , como mostra o exemplo a seguir.
HKR, Ndi,CoServices,0x00010000,"NdisMon"
Para obter mais informações sobre o atributo CoServices , consulte Adicionando valores de Service-Related à chave Ndi.
O valor FilterClass no arquivo INF para um driver de filtro determina sua ordem em uma pilha de filtros de modificação. No entanto, os drivers de filtro de monitoramento não definem a chave FilterClass . Em vez disso, o módulo de filtro de monitoramento instalado primeiro está mais próximo do adaptador de miniport.
Você deve definir as seguintes entradas no arquivo INF do driver de filtro de monitoramento para controlar as associações de driver:
HKR, Ndi\Interfaces,UpperRange,,"noupper" HKR, Ndi\Interfaces,LowerRange,,"nolower" HKR, Ndi\Interfaces, FilterMediaTypes,,"ethernet"
Para obter mais informações sobre como controlar as associações de driver, consulte Especificando relações de associação de driver de filtro.
Um arquivo INF de filtro de monitoramento pode especificar definições de parâmetro comuns para o driver de filtro, parâmetros associados a um adaptador específico e parâmetros associados a uma instância específica (módulo de filtro). O exemplo a seguir mostra algumas definições de parâmetro comuns.
Cuidado
Usar o HKR AddReg para colocar chaves diretamente sob o estado do serviço é uma violação de conformidade. Essas chaves precisam ser adicionadas sob a chave Parâmetros do serviço para serem compatíveis.
[Common.Params.reg] HKR, FilterDriverParams\DriverParam, ParamDesc, ,"Driverparam for filter" HKR, FilterDriverParams\DriverParam, default, ,"5" HKR, FilterDriverParams\DriverParam, type, ,"int" HKR, FilterAdapterParams\AdapterParam, ParamDesc, ,"Adapterparam for filter" HKR, FilterAdapterParams\AdapterParam, default, ,"10" HKR, FilterAdapterParams\AdapterParam, type, ,"int" HKR, FilterInstanceParams\InstanceParam, ParamDesc, ,"Instance param for filter" HKR, FilterInstanceParams\InstanceParam, default, ,"15" HKR, FilterInstanceParams\InstanceParam, type, ,"int"