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 ao monitoramento de drivers de filtro:
Defina a entrada Classe do ficheiro INF como NetService no ficheiro INF. O exemplo a seguir mostra um exemplo de entrada Class para o arquivo INF.
Class = NetService
A seção DDInstall em um arquivo INF do driver de filtro deve ter uma entrada de Características. O exemplo a seguir mostra como você deve definir a entrada Characteristics 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 NCF_ Xxx são definidos em Netcfgx.h. Para obter mais informações sobre sinalizadores NCF_ Xxx, consulte a seção DDInstall num ficheiro INF de rede.
Defina a entrada NetCfgInstanceId no ficheiro 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 Service sob a chave Ndi. A entrada ServiceBinary na seção service-install do arquivo INF especifica o caminho do binário do driver de filtro. Para obter mais informações, consulte Adicionando Service-Related valores para a chave Ndi e a secção DDInstall.Services num arquivo INF de rede.
A seção DDInstall num ficheiro INF de driver de filtro deve ter entradas de FilterType e de 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 Recomendamos fortemente que um driver de filtro leve de monitorização (LWF) não seja obrigatório, a menos que esteja a ser utilizado num ambiente controlado onde não existam drivers LWF modificadores opcionais. Isso ocorre porque um driver LWF de monitoramento obrigatório pode fazer com que os drivers LWF modificadores opcionais falhem FilterAttach. Um driver LWF de monitorização é associado a cada filtro de modificação e ligação por concepção para facilitar a monitorização do tráfego de rede em todos os níveis. Considere o seguinte cenário:
- Uma instância de um driver LWF de monitoramento obrigatório é instalada sobre um driver LWF de modificação opcional.
- O driver LWF opcional de modificação inferior não consegue se conectar a um componente inferior. Isso fará com que a rotina FilterAttach do driver LWF de monitoramento obrigatório não seja chamada.
- Como agora uma instância de um driver LWF obrigatório não é carregada, o NDIS não vinculará nenhum protocolo (como TCP/IP) à interface ou NIC, tornando a interface inutilizável.
O exemplo a seguir mostra como um arquivo INF de 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 do driver, embora geralmente sejam iguais.
O exemplo a seguir mostra como o arquivo INF de filtro faz referência ao nome do serviço do driver de filtro quando 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 de 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 modificados. No entanto, os drivers de filtro de monitorização 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 miniporta.
Você deve definir as seguintes entradas no arquivo INF do filtro de monitorização para controlar as ligações do 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 ligações de controladores, consulte Especificando relações de vinculação de controladores de filtro.
Um arquivo INF de filtro de monitoramento pode especificar definições de parâmetros 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âmetros comuns.
Atenção
Usar HKR AddReg para colocar chaves diretamente debaixo do estado de serviço é uma violação de conformidade. Essas chaves precisam ser adicionadas sob a chave Parameters 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"