Compartilhar via


Especificando o refletor em um arquivo INF

A partir Windows 11, a maneira recomendada de adicionar o refletor (WUDFRd.sys) à pilha de dispositivos no modo kernel é referenciar o arquivo WudfRd.inf fornecido pelo sistema no arquivo INF de um driver UMDF.

Observação

WudfRd.inf é incluído apenas com Windows 11 e posteriores.

Em Windows 10 e anteriores, para adicionar o refletor (WUDFRd.sys), o arquivo INF de um driver UMDF deve incluir uma diretiva AddService em uma seção INF DDInstall.Services, bem como uma seção service-install. Embora esse método ainda funcione em Windows 11 e posteriores, ele não é recomendado.

Em ambos os métodos, o refletor pode ser um filtro superior, um filtro inferior ou o serviço para o dispositivo, dependendo da configuração da pilha do modo de usuário.

Referenciando WudfRd.inf (Windows 11 e posterior)

Você pode encontrar um INF de exemplo que usa essa técnica em echoum.inx. Como alternativa, use um dos snippets a seguir.

Para instalar o serviço WudfRd como o driver de função para o dispositivo:

[DDInstall]
Include=WUDFRD.inf
Needs=WUDFRD.NT
; also include any existing DDInstall directives

[DDInstall.HW]
Include=WUDFRD.inf
Needs=WUDFRD.NT.HW
; also include any existing DDInstall.HW directives

[DDInstall.Services]
Include=WUDFRD.inf
Needs=WUDFRD.NT.Services
; also include any existing any DDInstall.Services directives

Para instalar o serviço WudfRd como um driver de filtro superior:

[DDInstall] 
Include=WUDFRD.inf
Needs=WUDFRD_UpperFilter.NT
; also include any existing DDInstall directives

[DDInstall.HW]
Include=WUDFRD.inf
Needs=WUDFRD_UpperFilter.NT.HW
; also include any existing DDInstall.HW directives

[DDInstall.Services]
Include=WUDFRD.inf
Needs=WUDFRD_UpperFilter.NT.Services
; also include any existing any DDInstall.Services directives

[DDInstall.Filters]
Include=WUDFRD.inf
Needs=WUDFRD_UpperFilter.NT.Filters

Para instalar o serviço WudfRd como um driver de filtro inferior:

[DDInstall] 
Include=WUDFRD.inf
Needs=WUDFRD_LowerFilter.NT
; also include any existing DDInstall directives

[DDInstall.HW]
Include=WUDFRD.inf
Needs=WUDFRD_LowerFilter.NT.HW
; also include any existing DDInstall.HW directives

[DDInstall.Services]
Include=WUDFRD.inf
Needs=WUDFRD_LowerFilter.NT.Services
; also include any existing any DDInstall.Services directives

[DDInstall.Filters]
Include=WUDFRD.inf
Needs=WUDFRD_LowerFilter.NT.Filters

Usando uma diretiva AddService (Windows 10 e anterior)

O exemplo de código a seguir mostra como o arquivo INF para um driver de função UMDF pode adicionar o refletor.

[Skeleton_Install.Services]
AddService=WUDFRd,0x000001fa,WUDFRD_ServiceInstall

Neste exemplo, o driver especifica o sinalizador 0x2 (SPSVCINST_ASSOCSERVICE) (ORed no parâmetro flags acima) para atribuir o refletor como o driver de função na pilha de dispositivos no modo kernel.

A diretiva AddService também define os sinalizadores 0x000001f8 para evitar a substituição de qualquer configuração preexistência para o serviço. Para obter mais informações sobre esses sinalizadores, consulte o parâmetro flags da diretiva AddService.

O exemplo de código a seguir, obtido do exemplo WUDFVhidmini, mostra uma diretiva AddService para um driver de filtro UMDF.

[hidumdf.win8.NT.Services]
AddService=WUDFRd,0x000001f8,WUDFRD_ServiceInstall  
AddService=mshidumdf, 0x000001fa, mshidumdf.AddService

[WudfVhidmini_AddReg]
HKR,,"LowerFilters",0x00010008,"WUDFRd" ; FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND

Nesse caso, o serviço mshidumdf é associado ao FDO para a pilha do dispositivo e o refletor é um filtro inferior.

Fornecendo uma seção de instalação de serviço

A diretiva AddService faz referência a uma seção de instalação de serviço semelhante ao exemplo de código a seguir. A entrada ServiceType especifica 1 ou 0x00000001, o que indica que o INF instala o suporte para um ou mais dispositivos. A entrada StartType especifica quando iniciar o driver. A entrada ErrorControl especifica o nível de controle de erro que o driver fornece. A entrada ServiceBinary especifica o caminho para o binário (o refletor) para o serviço.

[WUDFRD_ServiceInstall]
DisplayName = "Windows Driver Frameworks - User-mode Driver Framework Reflector"
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\WUDFRd.sys