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