Compartilhar via


Função AllocateNtmsMedia (ntmsapi.h)

[O Gerenciador de Armazenamento Removível não está mais disponível para uso a partir do Windows 7 e do Windows Server 2008 R2.]

A função AllocateNtmsMedia aloca uma parte da mídia disponível.

Sintaxe

DWORD AllocateNtmsMedia(
  [in]  HANDLE                        hSession,
  [in]  LPNTMS_GUID                   lpMediaPool,
  [in]  LPNTMS_GUID                   lpPartition,
  [out] LPNTMS_GUID                   lpMediaId,
  [in]  DWORD                         dwOptions,
  [in]  DWORD                         dwTimeout,
  [out] LPNTMS_ALLOCATION_INFORMATION lpAllocateInformation
);

Parâmetros

[in] hSession

Manipule para a sessão retornada pela função OpenNtmsSession .

[in] lpMediaPool

Identificador exclusivo do pool de mídia do qual a mídia deve ser alocada. Somente pools de aplicativos podem ser especificados para alocação.

[in] lpPartition

Identificador de parte de um lado a ser usado como um LMID (identificador de mídia lógica). O lado deve estar no estado Disponível ou Importar. Esse recurso pode ser usado para alocar um lado específico ou importar mídia. Esse parâmetro é opcional.

[out] lpMediaId

LMID do meio alocado. Esse parâmetro será NULL se o meio não puder ser alocado.

[in] dwOptions

Opções. Esse parâmetro pode usar um dos valores a seguir.

Valor Significado
NTMS_ALLOCATE_ERROR_IF_UNAVAILABLE
Impede o envio de uma solicitação de operador para nova mídia se nenhuma puder ser alocada com as restrições especificadas.
NTMS_ALLOCATE_NEW
Aloca um lado do meio especificado que não pode ser compartilhado com a mídia lógica de outro aplicativo. Por exemplo, esse valor reserva o segundo lado da mídia óptica de dois lados.
NTMS_ALLOCATE_NEXT
Aloque o próximo lado do meio multi-lado alocado anteriormente com o valor NTMS_ALLOCATE_NEW. Isso permite que um único aplicativo use ambos os lados de uma parte de mídia de dois lados e garanta que o aplicativo possua todos os dados na parte da mídia física.

Se todos os lados do meio já estiverem alocados, a solicitação de alocação falhará.

[in] dwTimeout

Tempo máximo permitido para alocar a mídia especificada, em milissegundos. Se esse parâmetro for INFINITE, a função não atingirá o tempo limite. Se esse parâmetro for zero, ele aguardará a mídia. Observe que essa função não enfileira uma solicitação para mais mídia se o parâmetro dwOptions especificar NTMS_ALLOCATE_ERROR_IF_UNAVAILABLE.

[out] lpAllocateInformation

Ponteiro para uma estrutura NTMS_ALLOCATION_INFORMATION que recebe o pool de mídia de origem do qual o meio foi obtido. Este parâmetro pode ser NULL.

Valor retornado

Essa função retorna um dos valores a seguir.

Valor Significado
ERROR_ACCESS_DENIED
NTMS_CONTROL_ACCESS para o pool de mídia da mídia é negado. Outros erros de segurança também são possíveis, mas indicam um erro de subsistema de segurança.

Windows XP: NTMS_MODIFY_ACCESS para o pool de mídia da mídia é negado.

ERROR_CANCELLED
O operador cancelou a solicitação de nova mídia.
ERROR_DATABASE_FAILURE
O banco de dados está inacessível ou danificado.
ERROR_DATABASE_FULL
O banco de dados está cheio.
ERROR_DEVICE_NOT_AVAILABLE
Um recurso intermediário não está disponível; por exemplo, o pool de mídia gratuito não está disponível.
ERROR_INVALID_HANDLE
O identificador de sessão está ausente ou não é válido.
ERROR_INVALID_MEDIA
A ID de partição ou LMID não era válida na entrada ao usar o sinalizador NTMS_ALLOCATE_NEXT.
ERROR_INVALID_MEDIA_POOL
A ID do pool de mídia não é válida.
ERROR_INVALID_PARAMETER
A ID do pool de mídia ou mídia está ausente.
ERROR_MEDIA_OFFLINE
A mídia especificada está offline e não pode ser alocada.
ERROR_MEDIA_UNAVAILABLE
Nenhuma mídia foi alocada dentro do evento de tempo limite especificado.
ERROR_NOT_ENOUGH_MEMORY
Houve uma falha de alocação durante o processamento.
ERROR_SUCCESS
A função foi bem-sucedida.
ERROR_TIMEOUT
O evento de tempo limite expirou antes da mídia estar disponível.

Comentários

A função AllocateNtmsMedia retorna um LMID. Dependendo da política do pool de mídia, se o pool de mídia especificado não contiver nenhuma mídia disponível online, AllocateNtmsMedia poderá pesquisar o pool de mídia gratuito para que o meio especificado se mova para o pool de mídia especificado. A mídia do pool de mídia designado é alocada primeiro e, em seguida, a mídia gratuita é movida e alocada.

Se o pool de mídia contiver qualquer mídia disponível online, um meio do pool será alocado.

Se o pool de mídia estiver configurado para alocar mídia do pool gratuito automaticamente e o pool gratuito contiver mídia disponível online, um meio será movido para o pool especificado e alocado.

Windows Server 2003: Se a mídia estiver sendo alocada do pool gratuito, será necessário NTMS_USE_ACCESS para o pool gratuito e NTMS_CONTROL_ACCESS para o pool de destino. Se o pool gratuito não for o pool de mídia de origem, NTMS_CONTROL_ACCESS será necessário nos pools de origem e de destino.

Quando o valor de NTMS_ALLOCATE_NEXT é especificado, o parâmetro lpMediaId deve apontar para uma ID de mídia válida no momento da invocação. Nesse caso, lpMediaId é usado como um parâmetro IN e OUT. O próximo lado do meio lateral múltiplo especificado por lpMediaId é alocado e a nova ID de partição é retornada por meio de lpMediaId (substituindo a ID de mídia original passada).

Se NTMS_ALLOCATE_ERROR_IF_UNAVAILABLE for especificado, ERROR_MEDIA_ UNAVAILABLE será retornado se nenhuma mídia estiver disponível.

Quando necessário, o RSM gera uma solicitação de operador para inserir mídia nova ou disponível. Se o tempo especificado no parâmetro dwTimeout passar antes que a solicitação do operador seja tratada, o RSM retornará ERROR_TIMEOUT e excluirá a solicitação do operador.

Se o usuário cancelar a solicitação de alocação, o RSM retornará ERROR_CANCELLED.

Se um usuário indicar que a solicitação do operador foi atendida, a solicitação será excluída e o RSM repetirá o processo.

Quando um aplicativo requer novas mídias que contêm dados, um usuário ou administrador coloca a mídia em uma biblioteca ou unidade. O RSM identifica a mídia e a coloca no pool de importação. O aplicativo pesquisa o pool de importação, move a mídia para seu pool de aplicativos e a aloca. Esse processo de rotina pode ser simplificado e tornado atômico por meio de uma única chamada para AllocateNtmsMedia. Depois de pesquisar o pool de importação, o aplicativo pode chamar AllocateNtmsMedia, passando a ID de partição do lado como o valor do parâmetro lpPartId . RSM, em seguida:

  1. move o meio para o pool de mídia especificado.
  2. altera o estado da mídia para alocado.
  3. retorna um LMID.
Nota Para mídia de dois lados, o outro lado permanece no estado De importação e não está disponível para uso até ser importado.
 

Requisitos

   
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho ntmsapi.h
Biblioteca Ntmsapi.lib
DLL Ntmsapi.dll

Confira também

DesalocadoNtmsMedia

Funções dos Serviços de Mídia

NTMS_ALLOCATION_INFORMATION