Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Код элемента управления IOCTL_LMR_DISABLE_LOCAL_BUFFERING отключает локальное кэширование данных в памяти на стороне клиента при чтении данных из удаленного файла или записи данных в удаленный файл. Это внутренний код элемента управления, недоступный в общедоступном заголовке.
Для выполнения этой операции вызовите функцию DeviceIoControl со следующими параметрами.
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]
-
Дескриптор удаленного файла. Чтобы получить этот дескриптор, вызовите функцию CreateFile .
-
dwIoControlCode [in]
-
Код элемента управления для операции. Используйте значение 0x140390 для этой операции.
-
lpInBuffer
-
Не используется, должен иметь значение NULL.
-
nInBufferSize [in]
-
Размер входного буфера в байтах. Должен равняться нулю.
-
lpOutBuffer [out]
-
Не используется, должен иметь значение NULL.
-
nOutBufferSize [in]
-
Размер выходного буфера в байтах. Должен равняться нулю.
-
lpBytesReturned [out]
-
Указатель на переменную, которая получает размер данных, хранящихся в выходном буфере, в байтах.
Если выходной буфер слишком мал, вызов завершается ошибкой, функция GetLastError возвращает ERROR_INSUFFICIENT_BUFFER, а значение lpBytesReturned равно нулю.
Если параметр lpOverlapped имеет значение NULL, lpBytesReturned не может иметь значение NULL. Даже если операция не возвращает выходных данных и параметр lpOutBuffer имеет значение NULL, DeviceIoControl использует lpBytesReturned. После такой операции значение lpBytesReturned не имеет смысла.
Если значение lpOverlapped не равно NULL, lpBytesReturned может иметь значение NULL. Если значение lpOverlapped не равно NULL и операция возвращает данные, lpBytesReturned не имеет смысла до завершения перекрывающейся операции. Чтобы получить количество возвращенных байтов, вызовите функцию GetOverlappedResult . Если параметр hDevice связан с портом завершения ввода-вывода, можно получить количество возвращаемых байтов, вызвав функцию GetQueuedCompletionStatus .
-
lpOverlapped [in]
-
Указатель на структуру OVERLAPPED .
Если параметр hDevice был открыт без указания FILE_FLAG_OVERLAPPED, lpOverlapped игнорируется.
Если hDevice был открыт с флагом FILE_FLAG_OVERLAPPED , операция выполняется как перекрываемая (асинхронная) операция. В этом случае lpOverlapped должен указывать на допустимую структуру OVERLAPPED , содержащую дескриптор объекта события. В противном случае функция завершается сбоем непредсказуемым образом.
Для перекрывающихся операций DeviceIoControl возвращает немедленно, и объект события получает сигнал о завершении операции. В противном случае функция не возвращается до завершения операции или до возникновения ошибки.
Возвращаемое значение
Если операция завершается успешно, DeviceIoControl возвращает ненулевое значение.
Если операция завершается сбоем или находится в состоянии ожидания, DeviceIoControl возвращает ноль. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Код элемента управления IOCTL_LMR_DISABLE_LOCAL_BUFFERING внутренне определен системой как 0x140390, а не в общедоступном файле заголовка. Он используется приложениями специального назначения для отключения локального кэширования данных на стороне клиента в памяти при чтении данных из удаленного файла или записи данных в удаленный файл. После отключения локальной буферизации параметр остается в силе до тех пор, пока все открытые дескрипторы файла не будут закрыты, а перенаправитель не очистит свои внутренние структуры данных.
Приложения общего назначения не должны использовать IOCTL_LMR_DISABLE_LOCAL_BUFFERING, так как это может привести к чрезмерному сетевому трафику и снижению производительности. Код управления IOCTL_LMR_DISABLE_LOCAL_BUFFERING следует использовать только в специализированных приложениях, перемещающих большие объемы данных по сети, пытаясь максимально использовать пропускную способность сети. Например, функции CopyFile и CopyFileEx используют IOCTL_LMR_DISABLE_LOCAL_BUFFERING для повышения производительности копирования больших файлов.
IOCTL_LMR_DISABLE_LOCAL_BUFFERING не реализована локальными файловыми системами и завершится сбоем с ошибкой ERROR_INVALID_FUNCTION. Выдача кода управления IOCTL_LMR_DISABLE_LOCAL_BUFFERING в дескрипторах удаленного каталога завершится ошибкой ERROR_NOT_SUPPORTED.
См. также раздел