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