Manipulando um IRP Query-Power sistema em um driver de funções ou filtro
Um driver de funções ou filtro (que não é o proprietário da política de energia de um dispositivo) deve passar um IRP de energia de consulta do sistema para o driver inferior seguinte, nas seguintes etapas:
Chame IoAcquireRemoveLock, passando o IRP atual, para garantir que o driver não receba uma solicitação de IRP_MN_REMOVE_DEVICE PnP ao manipular o IRP de energia.
Se IoAcquireRemoveLock retornar uma falha status, o driver não deverá continuar processando o IRP. Em vez disso, começando com o Windows Vista, o driver deve chamar IoCompleteRequest para concluir o IRP e retornar a falha status. No Windows Server 2003, Windows XP e Windows 2000, o driver deve chamar PoStartNextPowerIrp, chamar IoCompleteRequest para concluir o IRP e retornar a falha status.
Determine se ela deve falhar na consulta. Para obter diretrizes, consulte Falha em um sistema Query-Power IRP em um Filtro ou Driver de Função e processamento completo, conforme descrito nessa seção.
Chame PoStartNextPowerIrp. (Somente Windows Server 2003, Windows XP e Windows 2000)
Defina o local da pilha IRP (IoSkipCurrentIrpStackLocation ou IoCopyCurrentIrpStackLocationToNext). O driver pode definir uma rotina IoCompletion no IRP, mas isso raramente é necessário.
Chame IoCallDriver (no Windows 7 e Windows Vista) ou PoCallDriver (no Windows Server 2003, Windows XP e Windows 2000) para passar o IRP para o driver mais baixo.
Chame IoReleaseRemoveLock. No entanto, se o driver definir uma rotina IoCompletion para o IRP, faça essa chamada da rotina IoCompletion .
Retorne STATUS_PENDING de sua rotina DispatchPower .