Modalità di apertura named pipe
Il server pipe specifica le modalità di accesso, sovrapposizione e scrittura tramite pipe nel parametro dwOpenMode della funzione CreateNamedPipe . I client pipe possono specificare queste modalità aperte per i relativi handle di pipe usando la funzione CreateFile .
Modalità di accesso
L'impostazione della modalità di accesso tramite pipe equivale a specificare l'accesso in lettura o scrittura associato agli handle del server pipe. La tabella seguente illustra il diritto di accesso generico equivalente per ogni modalità di accesso che è possibile specificare con CreateNamedPipe.
Modalità di accesso | Diritto di accesso generico equivalente |
---|---|
PIPE_ACCESS_INBOUND | GENERIC_READ |
PIPE_ACCESS_OUTBOUND | GENERIC_WRITE |
PIPE_ACCESS_DUPLEX | GENERIC_READ | GENERIC_WRITE |
Se il server pipe crea una pipe con PIPE_ACCESS_INBOUND, la pipe è di sola lettura per il server pipe e di sola scrittura per il client pipe. Se il server pipe crea una pipe con PIPE_ACCESS_OUTBOUND, la pipe è di sola scrittura per il server pipe e di sola lettura per il client pipe. Una pipe creata con PIPE_ACCESS_DUPLEX è di lettura/scrittura sia per il server di pipe che per il client della pipe.
I client di pipe che usano CreateFile per connettersi a una named pipe devono specificare un diritto di accesso nel parametro dwDesiredAccess compatibile con la modalità di accesso specificata dal server pipe. Ad esempio, un client deve specificare GENERIC_READ l'accesso per aprire un handle per una pipe creata dal server di pipe con PIPE_ACCESS_OUTBOUND. Le modalità di accesso devono essere uguali per tutte le istanze di una pipe.
Per leggere gli attributi della pipe, ad esempio la modalità di lettura o la modalità di blocco, l'handle pipe deve avere il diritto di accesso FILE_READ_ATTRIBUTES; per scrivere gli attributi della pipe, l'handle della pipe deve avere il diritto di accesso FILE_WRITE_ATTRIBUTES. Questi diritti di accesso possono essere combinati con il diritto di accesso generico appropriato per la pipe: GENERIC_READ con FILE_WRITE_ATTRIBUTES per una pipe di sola lettura o GENERIC_WRITE con FILE_READ_ATTRIBUTES per una pipe di sola scrittura. La limitazione dei diritti di accesso in questo modo garantisce una migliore sicurezza per la pipe.
Modalità sovrapposta
In modalità sovrapposta, le funzioni che eseguono operazioni di lettura, scrittura e connessione lunghe possono restituire immediatamente. In questo modo il thread può eseguire altre operazioni durante l'esecuzione in background di un'operazione dispendiosa in termini di tempo. Per specificare la modalità sovrapposta, usare il flag FILE_FLAG_OVERLAPPED. Per altre informazioni, vedere Input e output sincroni e sovrapposti.
La funzione CreateFile consente al client pipe di impostare la modalità sovrapposta (FILE_FLAG_OVERLAPPED) per i relativi handle di pipe usando il parametro dwFlagsAndAttributes .
modalità Write-Through
Specificare la modalità write-through con FILE_FLAG_WRITE_THROUGH. Questa modalità influisce solo sulle operazioni di scrittura nelle pipe di tipo byte tra i client pipe e i server pipe in computer diversi. In modalità write-through, le funzioni che scrivono in una named pipe non restituiscono finché i dati non vengono trasmessi attraverso la rete e nel buffer della pipe nel computer remoto. La modalità write-through è utile per le applicazioni che richiedono la sincronizzazione per ogni operazione di scrittura.
Se la modalità write-through non è abilitata, il sistema migliora l'efficienza delle operazioni di rete memorizzando nel buffer i dati fino a quando non è trascorso un numero minimo di byte o fino a quando non è trascorso un periodo di tempo massimo. Il buffering consente al sistema di combinare più operazioni di scrittura in una singola trasmissione di rete. Ciò significa che un'operazione di scrittura può essere completata correttamente dopo che il sistema inserisce i dati nel buffer in uscita, ma prima che il sistema li trasmetta attraverso la rete.
La funzione CreateFile consente al client pipe di impostare la modalità write-through (FILE_FLAG_WRITE_THROUGH) per i relativi handle di pipe usando il parametro dwFlagsAndAttributes . La modalità write-through di un handle pipe non può essere modificata dopo la creazione dell'handle di pipe. La modalità write-through può essere diversa per gli handle server e client nella stessa istanza della pipe.
Un client pipe può usare la funzione SetNamedPipeHandleState per controllare il numero di byte e il periodo di timeout prima della trasmissione per una pipe su cui è disabilitata la modalità write-through. Per una pipe di sola lettura, l'handle della pipe deve essere aperto con i diritti di accesso GENERIC_READ e FILE_WRITE_ATTRIBUTES.