Função FltGetVolumeName (fltkernel.h)
A rotina FltGetVolumeName obtém o nome do volume de um determinado volume.
Sintaxe
NTSTATUS FLTAPI FltGetVolumeName(
[in] PFLT_VOLUME Volume,
[in, out, optional] PUNICODE_STRING VolumeName,
[out, optional] PULONG BufferSizeNeeded
);
Parâmetros
[in] Volume
Ponteiro opaco para o volume. Esse parâmetro é necessário e não pode ser NULL.
[in, out, optional] VolumeName
Ponteiro para uma estrutura de UNICODE_STRING alocada pelo chamador que contém o nome do objeto de dispositivo não persistente do volume (por exemplo, "\Device\HarddiskVolume1") quando STATUS_SUCCESS é retornado. Lembre-se de que o pool para VolumeName->Buffer também é alocado pelo chamador.
Esse parâmetro é opcional e pode ser NULL; no entanto, deve serNULL não se BufferSizeNeeded for NULL. Se esse parâmetro for NULL e BufferSizeNeeded não estiver NULL, FltGetVolumeName armazenará o tamanho do buffer necessário para o nome do volume solicitado no parâmetro bufferSizeNeeded do e retornará STATUS_BUFFER_TOO_SMALL. Consulte Comentários.
[out, optional] BufferSizeNeeded
Ponteiro para uma variável alocada por chamador que recebe o tamanho, em bytes, do nome do volume solicitado. Esse parâmetro é opcional e pode ser NULL; no entanto, deve serNULL não se VolumeName for NULL para que FltGetVolumeName possa armazenar o tamanho do buffer necessário para o nome do volume solicitado.
Valor de retorno
FltGetVolumeName retorna um dos seguintes valores NTSTATUS:
Código de retorno | Descrição |
---|---|
STATUS_SUCCESS | A estrutura UNICODE_STRING, apontada por VolumeName, contém o nome do volume no membro buffer para a estrutura e o comprimento do nome, em bytes, no membro comprimento. |
STATUS_BUFFER_TOO_SMALL | O buffer membro da estrutura UNICODE_STRING, apontado por VolumeName, é muito pequeno (conforme indicado por seu membro MaximumLength) para conter o nome inteiro do volume. Este é um código de erro. |
STATUS_INVALID_PARAMETER | VolumeName e BufferSizeNeeded são NULL. Este é um código de erro. |
Observações
Para que essa rotina seja bem-sucedida, o buffer membro da estrutura UNICODE_STRING (apontado por VolumeName) deve ser grande o suficiente, conforme indicado por seu membro MaximumLength, para conter toda a cadeia de caracteres de nome do volume.
O pseudocódigo a seguir mostra um método possível para adquirir com êxito um nome de volume se bufferSizeNeeded for desconhecido:
Chame FltGetVolumeName para determinar o pool necessário para de Buffer e o tamanho necessário para MaximumLength. Por exemplo:
FltGetVolumeName(VolumePtr, NULL, &VolumeNameSize);
Aloque
VolumeNameSize
bytes de pool para de buffer e defina MaximumLength comoVolumeNameSize
.Chame FltGetVolumeName novamente para adquirir o nome do volume. Por exemplo:
FltGetVolumeName(VolumePtr, &VolumeNameStruct, NULL);
VolumeNameStruct.Buffer
contém a cadeia de caracteres de nome de volume Unicode, que é VolumeNameStruct.Length
bytes de comprimento.
Para obter o nome GUID do volume de um determinado volume, chame FltGetVolumeGuidName.
Para obter um ponteiro de volume opaco para um volume com um determinado nome, chame FltGetVolumeFromName.
Para obter mais informações sobre como nomear um volume, consulte Suporte a solicitações do Mount Manager em um driver de classe de armazenamento**.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
cabeçalho | fltkernel.h (inclua FltKernel.h) |
biblioteca | FltMgr.lib |
de DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |