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) |