Função IoEnumerateDeviceObjectList (ntifs.h)

A rotina IoEnumerateDeviceObjectList enumera a lista de objetos de dispositivo de um driver.

Sintaxe

NTSTATUS IoEnumerateDeviceObjectList(
  [in]  PDRIVER_OBJECT DriverObject,
  [out] PDEVICE_OBJECT *DeviceObjectList,
  [in]  ULONG          DeviceObjectListSize,
  [out] PULONG         ActualNumberDeviceObjects
);

Parâmetros

[in] DriverObject

Um ponteiro para o objeto de driver para o driver.

[out] DeviceObjectList

Um ponteiro para uma matriz alocada pelo chamador que recebe os ponteiros de objeto do dispositivo. Essa matriz deve ser alocada do pool nãopagado. Este parâmetro pode ser NULL. Consulte Observações.

[in] DeviceObjectListSize

Tamanho, em bytes, da matriz DeviceObjectList . Esse parâmetro pode ser zero. Consulte Observações.

[out] ActualNumberDeviceObjects

Número real de objetos de dispositivo encontrados na lista de objetos de dispositivo do objeto de driver. Observe que, se a matriz em DeviceObjectList for muito pequena, o número de ponteiros de objeto de dispositivo copiados para a matriz será menor que ActualNumberDeviceObjects.

Retornar valor

IoEnumerateDeviceObjectList retorna um código NTSTATUS, como um dos seguintes valores:

Código de retorno Descrição
STATUS_SUCCESS A chamada para IoEnumerateDeviceObjectList foi concluída com êxito.
STATUS_BUFFER_TOO_SMALL A matriz em DeviceObjectList é muito pequena para manter toda a lista de objetos do dispositivo. Nesse caso, IoEnumerateDeviceObjectList copia o máximo possível de ponteiros de objeto de dispositivo para a matriz.

Comentários

Um driver de filtro do sistema de arquivos chama IoEnumerateDeviceObjectList para enumerar:

  • Os objetos de dispositivo que ele criou. Isso geralmente é feito quando o driver está se preparando para descarregar. Observe que um driver de filtro não pode ser descarregado com segurança de um sistema em execução. Para obter mais informações, consulte ZwUnloadDriver.

  • Os objetos de dispositivo criados pelo sistema de arquivos base, para que o filtro saiba o número de volumes aos quais ele pode anexar.

IoEnumerateDeviceObjectList retorna todos os objetos de dispositivo criados pelo driver de filtro. Isso inclui CDOs (objetos de dispositivo de controle), bem como VDOs (objetos de dispositivo de volume). Os dois tipos de objetos de dispositivo podem ser diferenciados pelo fato de que, por convenção, os CDOs são nomeados e os VDOs não são.

No último caso, o driver de filtro normalmente chama IoEnumerateDeviceObjectList duas vezes: uma para obter o número de objetos de dispositivo na lista e uma vez para obter a própria lista de objetos do dispositivo. Na primeira chamada, o chamador deve definir o parâmetro DeviceObjectList como NULL e DeviceObjectListSize como zero. Na segunda chamada, DeviceObjectList deve conter um ponteiro para uma matriz de ponteiro de tamanho apropriado, e DeviceObjectListSize deve conter o tamanho, em bytes, dessa matriz.

IoEnumerateDeviceObjectList incrementa a contagem de referência em cada objeto de dispositivo na lista apontada por DeviceObjectList. Portanto, cada chamada bem-sucedida para IoEnumerateDeviceObjectList deve ser correspondida por uma chamada subsequente para ObDereferenceObject para cada objeto de dispositivo na lista. Não fazer isso impede que o sistema libere ou exclua esses objetos de dispositivo devido a uma contagem de referência pendente.

Requisitos

Requisito Valor
Cliente mínimo com suporte Pacote cumulativo de atualizações do Windows 2000 SP4; Windows XP
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

Confira também

ExAllocatePool2

ExAllocatePool3

IoGetAttachedDevice

IoGetAttachedDeviceReference

IoGetLowerDeviceObject

ObDereferenceObject

ZwUnloadDriver