Estrutura VPB (wdm.h)

A estrutura do VPB (bloco de parâmetros de volume) é usada para mapear um objeto de dispositivo que representa um volume do sistema de arquivos montado para um objeto de dispositivo que representa um dispositivo de disco físico ou virtual.

Sintaxe

typedef struct _VPB {
  CSHORT                Type;
  CSHORT                Size;
  USHORT                Flags;
  USHORT                VolumeLabelLength;
  struct _DEVICE_OBJECT *DeviceObject;
  struct _DEVICE_OBJECT *RealDevice;
  ULONG                 SerialNumber;
  ULONG                 ReferenceCount;
  WCHAR                 VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
} VPB, *PVPB;

Membros

Type

Um membro somente leitura usado pelo sistema para indicar que a estrutura é um objeto VPB.

Size

Um membro somente leitura usado pelo sistema para indicar que a estrutura é um objeto VPB.

Flags

Valor Significado
VPB_MOUNTED Esse bit é definido pelo gerenciador de E/S para indicar que o sistema de arquivos montou o volume lógico.
VPB_LOCKED Esse bit pode ser definido ou desmarcado pelo driver do sistema de arquivos que montou o volume lógico. Quando definido, o gerenciador de E/S falhará em todas as solicitações de criação/abertura subsequentes direcionadas ao volume lógico. Os sistemas de arquivos podem optar por definir esse membro em resposta às solicitações de aplicativo para bloquear o volume ou se desejarem temporariamente impedir que qualquer solicitação de criação/abertura prossiga.
VPB_PERSISTENT Esse bit pode ser definido ou desmarcado por drivers do sistema de arquivos. Se definido, o gerenciador de E/S não excluirá a estrutura de VPB mesmo que ReferenceCount seja zero.
VPB_REMOVE_PENDING Definido pelo gerenciador de Plug and Play (PnP) para indicar que o dispositivo subjacente está sendo removido.
VPB_RAW_MOUNT Indica que somente o sistema de arquivos RAW pode ser montado no dispositivo.
VPB_DIRECT_WRITES_ALLOWED Indica que as operações de gravação direta para o volume são permitidas. Esse sinalizador é definido pelo gerenciador de E/S quando o sistema de arquivos RAW é montado ou pelo próprio sistema de arquivos quando determina que o volume pode ser gravado com segurança. Normalmente, é seguro gravar em um volume quando o sistema de arquivos é desmontado.

VolumeLabelLength

Um membro de leitura/gravação que especifica o comprimento do rótulo de volume, em bytes. Esse membro deve ser definido pelo driver do sistema de arquivos. Se o volume não tiver rótulo, esse membro deverá ser definido como zero.

DeviceObject

Um membro de leitura/gravação, definido pelo driver do sistema de arquivos, que aponta para um objeto de dispositivo do tipo FILE_DEVICE_DISK_FILE_SYSTEM. Esse objeto de dispositivo é criado pelo driver do sistema de arquivos para representar o volume montado.

RealDevice

Um membro somente leitura, definido pelo gerenciador de E/S, que aponta para o objeto do dispositivo para um dispositivo de disco físico ou virtual que contém o volume lógico montável (apontado por DeviceObject).

SerialNumber

Um membro de leitura/gravação que especifica o número de série associado ao volume do sistema de arquivos. Esse membro deve ser definido pelo driver do sistema de arquivos, se disponível.

ReferenceCount

Um membro somente leitura que especifica a contagem de referência para a estrutura VPB. Se a contagem de referência para a estrutura VPB for maior que zero, o gerente de E/S não desalocará a estrutura VPB. Lembre-se de que ReferenceCount pode ser considerado um membro de leitura/gravação quando um driver do sistema de arquivos deve manter o volume presente para processar uma solicitação de desativação.

VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]

Um membro de leitura/gravação, definido pelo driver do sistema de arquivos, que especifica o rótulo do volume montado. O comprimento do rótulo de volume deve ser de 32 caracteres largos ou menos. Atualmente , MAXIMUM_VOLUME_LABEL_LENGTH é definido da seguinte maneira:

#define MAXIMUM_VOLUME_LABEL_LENGTH  (32 * sizeof(WCHAR));

Comentários

Um objeto VPB (bloco de parâmetros de volume) é usado para criar uma associação entre um objeto de dispositivo de disco físico e um objeto de dispositivo de volume lógico. Ou seja, um VPB mapeia o objeto de dispositivo de volume de um sistema de arquivos para o dispositivo ou partição no qual o volume é montado. Um objeto VPB existe apenas para objetos de dispositivo que representam mídia física, mídia virtual ou mídia lógica que pode ser montada.

O gerenciador de E/S aloca e desaloca a memória para a estrutura VPB do pool nãopagado. Essa alocação (ou desalocação) ocorre quando um objeto de dispositivo (conforme descrito anteriormente) é criado chamando as funções IoCreateDevice ou IoVerifyVolume . Ou seja, o objeto de dispositivo criado deve ser um dos seguintes tipos:

  • FILE_DEVICE_DISK

  • FILE_DEVICE_CD_ROM

  • FILE_DEVICE_TAPE

  • FILE_DEVICE_VIRTUAL_DISK

Para obter mais informações sobre tipos de objeto de dispositivo, consulte Especificando tipos de dispositivo.

Os drivers devem chamar IoAcquireVpbSpinLock antes de acessar os membros aplicáveis do objeto VPB.

Membros opacos devem ser considerados inacessíveis. Drivers com dependências em locais de membro do objeto ou acesso a membros opacos podem não permanecer portáteis e interoperáveis com outros drivers ao longo do tempo.

Os drivers podem usar membros somente leitura para adquirir informações relevantes. Os drivers não devem modificar membros somente leitura ou o objeto para o qual o membro aponta, se o membro for um ponteiro.

Requisitos

Requisito Valor
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, FltKernel.h)

Confira também

DEVICE_OBJECT

FILE_OBJECT

Como o volume é montado