Compartilhar via


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:

  1. 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.

  2. 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.

  3. Chame PoStartNextPowerIrp. (Somente Windows Server 2003, Windows XP e Windows 2000)

  4. Defina o local da pilha IRP (IoSkipCurrentIrpStackLocation ou IoCopyCurrentIrpStackLocationToNext). O driver pode definir uma rotina IoCompletion no IRP, mas isso raramente é necessário.

  5. 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.

  6. Chame IoReleaseRemoveLock. No entanto, se o driver definir uma rotina IoCompletion para o IRP, faça essa chamada da rotina IoCompletion .

  7. Retorne STATUS_PENDING de sua rotina DispatchPower .