Condividi tramite


Funzione ReOpenFile (winbase.h)

Riapri l'oggetto file system specificato con diritti di accesso diversi, modalità di condivisione e flag.

Sintassi

HANDLE ReOpenFile(
  [in] HANDLE hOriginalFile,
  [in] DWORD  dwDesiredAccess,
  [in] DWORD  dwShareMode,
  [in] DWORD  dwFlagsAndAttributes
);

Parametri

[in] hOriginalFile

Handle per l'oggetto da riaprire. L'oggetto deve essere stato creato dalla funzione CreateFile .

[in] dwDesiredAccess

Accesso obbligatorio all'oggetto. Per un elenco di valori, vedere Sicurezza file e diritti di accesso. Non è possibile richiedere una modalità di accesso in conflitto con la modalità di condivisione specificata in una richiesta aperta precedente il cui handle è ancora aperto.

Se questo parametro è zero (0), l'applicazione può eseguire query sugli attributi del dispositivo senza accedere al dispositivo. Questo è utile se un'applicazione vuole determinare le dimensioni di un'unità disco floppy e i formati supportati senza richiedere un floppy nell'unità.

[in] dwShareMode

Modalità di condivisione dell'oggetto. Non è possibile richiedere una modalità di condivisione in conflitto con la modalità di accesso specificata in una richiesta aperta precedente il cui handle è ancora aperto.

Se questo parametro è zero (0) e CreateFile ha esito positivo, l'oggetto non può essere condiviso e non può essere aperto di nuovo finché l'handle non viene chiuso.

Per consentire ad altri processi di condividere l'oggetto durante l'apertura del processo, usare una combinazione di uno o più dei valori seguenti per specificare il tipo di accesso che possono richiedere quando aprono l'oggetto. Queste opzioni di condivisione rimangono effettive finché non si chiude l'handle all'oggetto.

Valore Significato
FILE_SHARE_DELETE
0x00000004
Abilita le operazioni aperte successive sull'oggetto per richiedere l'accesso eliminato. In caso contrario, altri processi non possono aprire l'oggetto se richiedono l'accesso.

Se l'oggetto è già stato aperto con l'accesso all'eliminazione, la modalità di condivisione deve includere questo flag.

FILE_SHARE_READ
0x00000001
Abilita le operazioni aperte successive sull'oggetto per richiedere l'accesso in lettura. In caso contrario, altri processi non possono aprire l'oggetto se richiedono l'accesso in lettura.

Se l'oggetto è già stato aperto con l'accesso in lettura, la modalità di condivisione deve includere questo flag.

FILE_SHARE_WRITE
0x00000002
Abilita le operazioni aperte successive sull'oggetto per richiedere l'accesso in scrittura. In caso contrario, altri processi non possono aprire l'oggetto se richiedono l'accesso in scrittura.

Se l'oggetto è già stato aperto con l'accesso in scrittura, la modalità di condivisione deve includere questo flag.

[in] dwFlagsAndAttributes

Flag di file. Questo parametro può essere uno o più dei valori seguenti.

Valore Significato
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
Indica che il file viene aperto o creato per un'operazione di backup o ripristino. Il sistema garantisce che il processo chiamante esegue l'override dei controlli di sicurezza dei file, purché disponga dei privilegi di SE_BACKUP_NAME e SE_RESTORE_NAME . Per altre informazioni, vedere Modifica dei privilegi in un token.

È anche possibile impostare questo flag per ottenere un handle su una directory. Se indicato, un handle di directory può essere passato ad alcune funzioni al posto di un handle di file.

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
Indica che il sistema operativo deve eliminare il file immediatamente dopo che tutti i relativi handle sono stati chiusi, non solo l'handle specificato, ma anche qualsiasi altro handle aperto o duplicato.

Le richieste aperte successive per il file non riescono, a meno che non venga usato FILE_SHARE_DELETE .

FILE_FLAG_NO_BUFFERING
0x20000000
Indica al sistema di aprire il file senza buffer intermedio o memorizzazione nella cache. Se combinato con FILE_FLAG_OVERLAPPED, il flag offre prestazioni asincrone massime, perché l'I/O non si basa sulle operazioni sincrone della gestione memoria. Tuttavia, alcune operazioni di I/O richiedono più tempo, perché i dati non vengono mantenuti nella cache.

Un'applicazione deve soddisfare requisiti specifici quando si aprono i file aperti con FILE_FLAG_NO_BUFFERING:

  • L'accesso ai file deve iniziare a offset di byte all'interno del file che sono numeri interi delle dimensioni del settore del volume.
  • L'accesso ai file deve essere per i numeri di byte interi delle dimensioni del settore del volume. Ad esempio, se la dimensione del settore è pari a 512 byte, un'applicazione può richiedere letture e scritture di 512, 1024, 1536 o 2048 byte, ma non di 335, 981 o 7171 byte.
  • Gli indirizzi del buffer per le operazioni di lettura e scrittura devono essere allineati al settore (allineati agli indirizzi in memoria che sono multipli interi delle dimensioni del settore del volume). A seconda del disco, questo requisito potrebbe non essere applicato.
Un modo per allineare i buffer su più interi delle dimensioni del settore del volume consiste nell'usare VirtualAlloc per allocare i buffer. Alloca memoria allineata agli indirizzi che sono numeri interi delle dimensioni della pagina della memoria del sistema operativo. Poiché entrambe le dimensioni della pagina della memoria e del settore del volume sono poteri pari a 2, questa memoria è allineata anche agli indirizzi che sono interi multipli di dimensioni del settore del volume. Le pagine di memoria sono di dimensioni pari a 4-8 KB; i settori sono 512 byte (dischi rigidi) o 2048 byte (CD) e quindi i settori del volume non possono mai essere più grandi delle pagine di memoria.

Un'applicazione può determinare una dimensione del settore del volume chiamando la funzione GetDiskFreeSpace .

FILE_FLAG_OPEN_NO_RECALL
0x00100000
Indica che i dati del file vengono richiesti, ma devono continuare a risiedere nell'archiviazione remota. Non deve essere trasportato nuovamente all'archiviazione locale. Questo flag è destinato all'uso da parte dei sistemi di archiviazione remota.
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
Quando viene usato questo flag, l'elaborazione normale del punto di ripristino non si verifica e ReOpenFile tenta di aprire il punto di ripristino. Quando viene aperto un file, viene restituito un handle di file, indipendentemente dal fatto che il filtro che controlla il punto di ripristino sia operativo. Questo flag non può essere usato con il flag di CREATE_ALWAYS . Se il file non è un punto di correzione, questo flag viene ignorato.
FILE_FLAG_OVERLAPPED
0x40000000
Indica al sistema di inizializzare l'oggetto, in modo che le operazioni che richiedono un tempo significativo per elaborare ERROR_IO_PENDING. Al termine dell'operazione, l'evento specificato viene impostato sullo stato segnalato.

Quando si specifica FILE_FLAG_OVERLAPPED, le funzioni di lettura e scrittura del file devono specificare una struttura OVERLAPPED . Ovvero, quando viene specificato FILE_FLAG_OVERLAPPED , un'applicazione deve eseguire la lettura e la scrittura sovrapposte.

Quando viene specificato FILE_FLAG_OVERLAPPED , il sistema non mantiene il puntatore al file. La posizione del file deve essere passata come parte del parametro lpOverlapped (che punta a una struttura OVERLAPPED ) alle funzioni di lettura e scrittura del file.

Questo flag consente anche l'esecuzione simultanea di più operazioni con l'handle (un'operazione di lettura e scrittura simultanea, ad esempio).

FILE_FLAG_POSIX_SEMANTICS
0x01000000
Indica che il file deve essere accessibile in base alle regole POSIX. Ciò include l'autorizzazione di più file con nomi, diversi solo nel caso, per i file system che supportano tale denominazione. Usare attenzione quando si usa questa opzione perché i file creati con questo flag potrebbero non essere accessibili dalle applicazioni scritte per MS-DOS o Windows a 16 bit.
FILE_FLAG_RANDOM_ACCESS
0x10000000
Indica l'accesso casuale al file. Il sistema può interpretare questa situazione come hint per l'ottimizzazione della memorizzazione del file nella cache.
FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
Indica che l'accesso del file deve avvenire in modo sequenziale dall'inizio alla fine. Il sistema può interpretare questa situazione come hint per l'ottimizzazione della memorizzazione del file nella cache. Se un'applicazione sposta il puntatore a file per l'accesso casuale, la cache potrebbe non essere ottimale ma l'operazione viene comunque garantita.

La specifica di questo flag può migliorare le prestazioni per le applicazioni che leggono file di grandi dimensioni usando l'accesso sequenziale. I miglioramenti delle prestazioni possono essere ancora più evidenti per le applicazioni che leggono file di grandi dimensioni principalmente in sequenza, ma occasionalmente ignorano intervalli di byte ridotti.

FILE_FLAG_WRITE_THROUGH
0x80000000
Indica al sistema di scrivere tramite qualsiasi cache intermedia e passare direttamente al disco. Il sistema può comunque memorizzare nella cache le operazioni di scrittura, ma non è possibile scaricarle in modo differimento.
 

Se l'handle rappresenta il lato client di una named pipe, il parametro dwFlags può contenere anche informazioni sulla qualità del servizio di sicurezza. Per altre informazioni, vedere Livelli di rappresentazione. Quando l'applicazione chiamante specifica il flag SECURITY_SQOS_PRESENT , il parametro dwFlags può contenere uno o più dei valori seguenti.

Valore Significato
SECURITY_ANONYMOUS
Rappresenta il client a livello di rappresentazione anonima.
SECURITY_CONTEXT_TRACKING
La modalità di rilevamento della sicurezza è dinamica. Se questo flag non viene specificato, la modalità di rilevamento della sicurezza è statica.
SECURITY_DELEGATION
Rappresenta il client a livello di rappresentazione delega.
SECURITY_EFFECTIVE_ONLY
Solo gli aspetti abilitati del contesto di sicurezza client sono disponibili per il server. Se non si specifica questo flag, sono disponibili tutti gli aspetti del contesto di sicurezza client.

In questo modo il client può limitare i gruppi e i privilegi che un server può usare durante la rappresentazione del client.

SECURITY_IDENTIFICATION
Rappresenta il client a livello di rappresentazione dell'identificazione.
SECURITY_IMPERSONATION
Rappresenta il client a livello di rappresentazione della rappresentazione.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è un handle aperto per il file specificato.

Se la funzione ha esito negativo, il valore restituito viene INVALID_HANDLE_VALUE. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Il parametro dwFlags non può contenere alcun flag di attributo file (FILE_ATTRIBUTE_*). Questi valori possono essere specificati solo quando viene creato il file.

In Windows 8 e Windows Server 2012 questa funzione è supportata dalle tecnologie seguenti.

Tecnologia Supportato
Protocollo SMB (Server Message Block) 3.0
Failover trasparente SMB 3.0 (TFO)
SMB 3.0 con condivisioni file di scalabilità orizzontale (SO)
File system del volume condiviso cluster (CsvFS)
Resilient File System (ReFS)

Requisiti

   
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winbase.h (include Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

CreateFile

Funzioni di gestione file