IOCTL_LMR_DISABLE_LOCAL_BUFFERING codice di controllo

Il codice di controllo IOCTL_LMR_DISABLE_LOCAL_BUFFERING disabilita la memorizzazione nella cache in memoria sul lato client locale dei dati durante la lettura o la scrittura di dati in un file remoto. Si tratta di un codice di controllo definito internamente non disponibile in un'intestazione pubblica.

Nonostante la convenzione di denominazione, questo codice di controllo viene definito con un tipo di dispositivo di FILE_DEVICE_NETWORK_FILE_SYSTEM, rendendolo un codice DI CONTROLLO FILE SYSTEM (MDFTL) anziché un codice IOCTL (Device I/O Control). È necessario inviarlo usando NtFsControlFile anziché DeviceIoControl. Il codice di controllo e i parametri sono documentati di seguito usando la convenzione DeviceIoControl per riferimento.

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

Parameters

hDevice [in]

Handle per il file remoto. Per ottenere questo handle, chiamare la funzione CreateFile .

dwIoControlCode [in]

Codice di controllo per l'operazione. Usare il valore 0x140390 per questa operazione.

lpInBuffer

Non usato, deve essere NULL.

nInBufferSize [in]

Dimensioni del buffer di input, in byte. Deve essere zero.

lpOutBuffer [out]

Non usato, deve essere NULL.

nOutBufferSize [in]

Dimensioni del buffer di output, in byte. Deve essere zero.

lpBytesReturned [out]

Puntatore a una variabile che riceve le dimensioni dei dati archiviati nel buffer di output, in byte.

Se il buffer di output è troppo piccolo, la chiamata ha esito negativo, la funzione GetLastError restituisce ERROR_INSUFFICIENT_BUFFER e lpBytesReturned è zero.

Se il parametro lpOverlapped è NULL, lpBytesReturned non può essere NULL. Anche quando un'operazione non restituisce dati di output e il parametro lpOutBuffer è NULL, DeviceIoControl usa lpBytesReturned. Dopo un'operazione di questo tipo, il valore di lpBytesReturned è privo di significato.

Se lpOverlapped non è NULL, lpBytesReturned può essere NULL. Se lpOverlapped non è NULL e l'operazione restituisce dati, lpBytesReturned non ha significato fino al completamento dell'operazione sovrapposta. Per recuperare il numero di byte restituiti, chiamare la funzione GetOverlappedResult . Se il parametro hDevice è associato a una porta di completamento I/O, è possibile recuperare il numero di byte restituiti chiamando la funzione GetQueuedCompletionStatus .

lpOverlapped [in]

Puntatore a una struttura OVERLAPPED .

Se il parametro hDevice è stato aperto senza specificare FILE_FLAG_OVERLAPPED, lpOverlapped viene ignorato.

Se hDevice è stato aperto con il flag FILE_FLAG_OVERLAPPED , l'operazione viene eseguita come operazione sovrapposta (asincrona). In questo caso, lpOverlapped deve puntare a una struttura OVERLAPPED valida che contiene un handle per un oggetto evento. In caso contrario, la funzione ha esito negativo in modi imprevedibili.

Per le operazioni sovrapposte, DeviceIoControl restituisce immediatamente e l'oggetto evento viene segnalato al termine dell'operazione. In caso contrario, la funzione non restituisce fino al completamento dell'operazione o fino a quando non si verifica un errore.

Valore restituito

La chiamata a DeviceIoControl con questo codice di controllo restituirà sempre un errore perché si tratta di un valore DI TIPO FSCTL, non di un IOCTL. Usare invece NtFsControlFile . NtFsControlFile restituisce un valore NTSTATUS ; STATUS_SUCCESS indica che l'operazione è stata completata correttamente.

Remarks

Il codice di controllo IOCTL_LMR_DISABLE_LOCAL_BUFFERING viene definito internamente dal sistema come 0x140390 e non in un file di intestazione pubblica. Viene usato dalle applicazioni speciali per disabilitare la memorizzazione nella cache dei dati sul lato client locale durante la lettura o la scrittura di dati in un file remoto. Dopo la disabilitazione del buffer locale, l'impostazione rimane attiva finché tutti gli handle aperti al file non vengono chiusi e il redirector pulisce le relative strutture di dati interne.

Le applicazioni per utilizzo generico non devono usare IOCTL_LMR_DISABLE_LOCAL_BUFFERING, perché possono comportare un traffico di rete eccessivo e una perdita di prestazioni associata. Il codice di controllo IOCTL_LMR_DISABLE_LOCAL_BUFFERING deve essere usato solo in applicazioni specializzate che spostano grandi quantità di dati in rete durante il tentativo di massimizzare l'uso della larghezza di banda di rete. Ad esempio, le funzioni CopyFile e CopyFileEx usano IOCTL_LMR_DISABLE_LOCAL_BUFFERING per migliorare le prestazioni di copia di file di grandi dimensioni.

IOCTL_LMR_DISABLE_LOCAL_BUFFERING non è implementato dai file system locali e avrà esito negativo con l'errore ERROR_INVALID_FUNCTION. L'emissione del codice di controllo di IOCTL_LMR_DISABLE_LOCAL_BUFFERING negli handle di directory remoti avrà esito negativo con l'errore ERROR_NOT_SUPPORTED.

Vedere anche

NtFsControlFile

Deviceiocontrol