Ler em inglês

Compartilhar via


código de controle IOCTL_LMR_DISABLE_LOCAL_BUFFERING

O código de controle IOCTL_LMR_DISABLE_LOCAL_BUFFERING desabilita o cache de dados na memória do lado do cliente local ao ler dados ou gravar dados em um arquivo remoto. Este é um código de controle definido internamente não disponível em um cabeçalho público.

Para executar essa operação, chame a função DeviceIoControl com os parâmetros a seguir.

BOOL DeviceIoControl(
  (HANDLE) hDevice,             // handle to device
  IOCTL_LMR_DISABLE_LOCAL_BUFFERING, // dwIoControlCode
  (LPVOID) NULL,                // lpInBuffer
  (DWORD) 0,                    // nInBufferSize
  (LPVOID) NULL,                // lpOutBuffer
  (DWORD) 0,                    // nOutBufferSize
  (LPDWORD) lpBytesReturned,    // number of bytes returned
  (LPOVERLAPPED) lpOverlapped   // OVERLAPPED structure
);

Parâmetros

hDevice [in]

Um identificador para o arquivo remoto. Para obter esse identificador, chame a função CreateFile .

dwIoControlCode [in]

O código de controle da operação. Use o valor 0x140390 para esta operação.

lpInBuffer

Não usado, deve ser NULL.

nInBufferSize [in]

O tamanho do buffer de entrada, em bytes. Deve ser zero.

lpOutBuffer [out]

Não usado, deve ser NULL.

nOutBufferSize [in]

O tamanho do buffer de saída em bytes. Deve ser zero.

lpBytesReturned [out]

Um ponteiro para uma variável que recebe o tamanho dos dados armazenados no buffer de saída, em bytes.

Se o buffer de saída for muito pequeno, a chamada falhará, a função GetLastError retornará ERROR_INSUFFICIENT_BUFFER e lpBytesReturned será zero.

Se o parâmetro lpOverlapped for NULL, lpBytesReturned não poderá ser NULL. Mesmo quando uma operação não retorna dados de saída e o parâmetro lpOutBuffer é NULL, DeviceIoControl usa lpBytesReturned. Após essa operação, o valor de lpBytesReturned não tem sentido.

Se lpOverlapped não for NULL, lpBytesReturned poderá ser NULL. Se lpOverlapped não for NULL e a operação retornar dados, lpBytesReturned não terá sentido até que a operação sobreposta seja concluída. Para recuperar o número de bytes retornados, chame a função GetOverlappedResult . Se o parâmetro hDevice estiver associado a uma porta de conclusão de E/S, você poderá recuperar o número de bytes retornados chamando a função GetQueuedCompletionStatus .

lpOverlapped [in]

Um ponteiro para uma estrutura OVERLAPPED .

Se o parâmetro hDevice foi aberto sem especificar FILE_FLAG_OVERLAPPED, lpOverlapped será ignorado.

Se hDevice foi aberto com o sinalizador FILE_FLAG_OVERLAPPED , a operação é executada como uma operação sobreposta (assíncrona). Nesse caso, lpOverlapped deve apontar para uma estrutura OVERLAPPED válida que contenha um identificador para um objeto de evento. Caso contrário, a função falhará de maneiras imprevisíveis.

Para operações sobrepostas, DeviceIoControl retorna imediatamente e o objeto de evento é sinalizado quando a operação é concluída. Caso contrário, a função não retornará até que a operação seja concluída ou até que ocorra um erro.

Valor retornado

Se a operação for concluída com êxito, DeviceIoControl retornará um valor diferente de zero.

Se a operação falhar ou estiver pendente, DeviceIoControl retornará zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

O código de controle IOCTL_LMR_DISABLE_LOCAL_BUFFERING é definido internamente pelo sistema como 0x140390 e não em um arquivo de cabeçalho público. Ele é usado por aplicativos de finalidade especial para desabilitar o cache de dados no lado do cliente local na memória ao ler dados ou gravar dados em um arquivo remoto. Depois que o buffer local é desabilitado, a configuração permanece em vigor até que todos os identificadores abertos para o arquivo sejam fechados e o redirecionador limpe suas estruturas de dados internas.

Aplicativos de uso geral não devem usar IOCTL_LMR_DISABLE_LOCAL_BUFFERING, pois isso pode resultar em tráfego de rede excessivo e perda de desempenho associada. O código de controle IOCTL_LMR_DISABLE_LOCAL_BUFFERING deve ser usado apenas em aplicativos especializados que movem grandes quantidades de dados pela rede enquanto tentam maximizar o uso da largura de banda de rede. Por exemplo, as funções CopyFile e CopyFileEx usam IOCTL_LMR_DISABLE_LOCAL_BUFFERING para melhorar o desempenho de cópia de arquivo grande.

IOCTL_LMR_DISABLE_LOCAL_BUFFERING não é implementado por sistemas de arquivos locais e falhará com o erro ERROR_INVALID_FUNCTION. A emissão do código de controle IOCTL_LMR_DISABLE_LOCAL_BUFFERING em identificadores de diretório remoto falhará com o erro ERROR_NOT_SUPPORTED.

Confira também

Deviceiocontrol