Condividi tramite


codice di controllo IOCTL_LMR_DISABLE_LOCAL_BUFFERING

Il codice di controllo IOCTL_LMR_DISABLE_LOCAL_BUFFERING disabilita la memorizzazione nella cache dei dati sul lato client locale 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.

Per eseguire questa operazione, chiamare la funzione DeviceIoControl con i parametri seguenti.

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

Parametri

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 in byte del buffer di output. 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 a 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

Se l'operazione viene completata correttamente, DeviceIoControl restituisce un valore diverso da zero.

Se l'operazione ha esito negativo o è in sospeso, DeviceIoControl restituisce zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Osservazioni

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 fino a quando tutti gli handle aperti al file 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, tentando di ottimizzare 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 IOCTL_LMR_DISABLE_LOCAL_BUFFERING negli handle di directory remoti avrà esito negativo con l'errore ERROR_NOT_SUPPORTED.

Vedi anche

Deviceiocontrol