Compartir a través de


Función ReOpenFile (winbase.h)

Vuelve a abrir el objeto de sistema de archivos especificado con diferentes derechos de acceso, modo de uso compartido y marcas.

Sintaxis

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

Parámetros

[in] hOriginalFile

Identificador del objeto que se va a volver a abrir. La función CreateFile debe haber creado el objeto .

[in] dwDesiredAccess

Acceso necesario al objeto . Para obtener una lista de valores, consulte Seguridad de archivos y derechos de acceso. No se puede solicitar un modo de acceso que entre en conflicto con el modo de uso compartido especificado en una solicitud abierta anterior cuyo identificador sigue abierto.

Si este parámetro es cero (0), la aplicación puede consultar los atributos del dispositivo sin tener acceso al dispositivo. Esto es útil si una aplicación quiere determinar el tamaño de una unidad de disco disquete y los formatos que admite sin necesidad de un disquete en la unidad.

[in] dwShareMode

Modo de uso compartido del objeto. No se puede solicitar un modo de uso compartido que entre en conflicto con el modo de acceso especificado en una solicitud abierta anterior cuyo identificador sigue abierto.

Si este parámetro es cero (0) y CreateFile se realiza correctamente, el objeto no se puede compartir y no se puede volver a abrir hasta que se cierre el identificador.

Para permitir que otros procesos compartan el objeto mientras el proceso lo tiene abierto, use una combinación de uno o varios de los siguientes valores para especificar el tipo de acceso que pueden solicitar al abrir el objeto. Estas opciones de uso compartido permanecen en vigor hasta que se cierra el identificador del objeto.

Value Significado
FILE_SHARE_DELETE
0x00000004
Habilita las operaciones abiertas posteriores en el objeto para solicitar el acceso de eliminación. De lo contrario, otros procesos no pueden abrir el objeto si solicitan acceso de eliminación.

Si el objeto ya se ha abierto con acceso de eliminación, el modo de uso compartido debe incluir esta marca.

FILE_SHARE_READ
0x00000001
Habilita las operaciones abiertas posteriores en el objeto para solicitar acceso de lectura. De lo contrario, otros procesos no pueden abrir el objeto si solicitan acceso de lectura.

Si el objeto ya se ha abierto con acceso de lectura, el modo de uso compartido debe incluir esta marca.

FILE_SHARE_WRITE
0x00000002
Habilita las operaciones abiertas posteriores en el objeto para solicitar acceso de escritura. De lo contrario, otros procesos no pueden abrir el objeto si solicitan acceso de escritura.

Si el objeto ya se ha abierto con acceso de escritura, el modo de uso compartido debe incluir esta marca.

[in] dwFlagsAndAttributes

Marcas de archivo. Este parámetro puede ser uno o más de los siguientes valores.

Value Significado
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
Indica que el archivo se está abriendo o creando para una operación de copia de seguridad o restauración. El sistema garantiza que el proceso de llamada invalida las comprobaciones de seguridad de archivos, siempre que tenga los privilegios SE_BACKUP_NAME y SE_RESTORE_NAME . Para obtener más información, consulte Cambio de privilegios en un token.

También puede establecer esta marca para obtener un identificador en un directorio. Donde se indica, se puede pasar un identificador de directorio a algunas funciones en lugar de un identificador de archivo.

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
Indica que el sistema operativo es eliminar el archivo inmediatamente después de que se hayan cerrado todos sus identificadores, no solo el identificador especificado, sino también cualquier otro identificador abierto o duplicado.

Las solicitudes abiertas posteriores para el archivo producen un error, a menos que se use FILE_SHARE_DELETE .

FILE_FLAG_NO_BUFFERING
0x20000000
Indica al sistema que abra el archivo sin almacenamiento en búfer intermedio ni almacenamiento en caché. Cuando se combina con FILE_FLAG_OVERLAPPED, la marca proporciona un rendimiento asincrónico máximo, ya que la E/S no se basa en las operaciones sincrónicas del administrador de memoria. Sin embargo, algunas operaciones de E/S tardan más, ya que los datos no se mantienen en la memoria caché.

Una aplicación debe cumplir requisitos específicos al trabajar con archivos abiertos con FILE_FLAG_NO_BUFFERING:

  • El acceso a archivos debe comenzar en desplazamientos de bytes dentro del archivo que son múltiplo enteros del tamaño del sector del volumen.
  • El acceso a archivos debe ser para el número de bytes que son múltiples enteros del tamaño del sector del volumen. Por ejemplo, si el tamaño del sector es de 512 bytes, una aplicación puede solicitar lecturas y escrituras de 512, 1024, 1536 o 2048 bytes, pero no de 335, 981 o 7171 bytes.
  • Las direcciones de búfer para las operaciones de lectura y escritura deben estar alineadas por sectores (alineadas en direcciones en memoria que son múltiplos enteros del tamaño del sector del volumen). Dependiendo del disco, es posible que este requisito no se aplique.
Una manera de alinear los búferes en múltiplos enteros del tamaño del sector de volumen es usar VirtualAlloc para asignar los búferes. Asigna memoria alineada en direcciones que son múltiplos enteros del tamaño de página de memoria del sistema operativo. Dado que tanto los tamaños de página de memoria como de sector de volumen son potencias de 2, esta memoria también se alinea en direcciones que son múltiplos enteros de un tamaño de sector de volumen. Las páginas de memoria tienen un tamaño de 4-8 KB; los sectores son de 512 bytes (discos duros) o 2048 bytes (CD) y, por lo tanto, los sectores de volumen nunca pueden ser mayores que las páginas de memoria.

Una aplicación puede determinar un tamaño de sector de volumen llamando a la función GetDiskFreeSpace .

FILE_FLAG_OPEN_NO_RECALL
0x00100000
Indica que se solicitan los datos del archivo, pero debe seguir residiendo en el almacenamiento remoto. No se debe transportar de vuelta al almacenamiento local. Esta marca está pensada para su uso por parte de los sistemas de almacenamiento remoto.
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
Cuando se usa esta marca, no se produce el procesamiento normal del punto de reanálisis y ReOpenFile intenta abrir el punto de reanálisis. Cuando se abre un archivo, se devuelve un identificador de archivo, independientemente de si el filtro que controla el punto de reanálisis está operativo. Esta marca no se puede usar con la marca CREATE_ALWAYS . Si el archivo no es un punto de reanálisis, se omite esta marca.
FILE_FLAG_OVERLAPPED
0x40000000
Indica al sistema que inicialice el objeto para que las operaciones que tarden mucho tiempo en procesar la devolución ERROR_IO_PENDING. Una vez finalizada la operación, el evento especificado se establece en el estado señalado.

Al especificar FILE_FLAG_OVERLAPPED, las funciones de lectura y escritura de archivos deben especificar una estructura SUPERPUESTA . Es decir, cuando se especifica FILE_FLAG_OVERLAPPED , una aplicación debe realizar lectura y escritura superpuestas.

Cuando se especifica FILE_FLAG_OVERLAPPED , el sistema no mantiene el puntero de archivo. La posición del archivo debe pasarse como parte del parámetro lpOverlapped (que apunta a una estructura SUPERPUESTA ) a las funciones de lectura y escritura del archivo.

Esta marca también permite que varias operaciones se realicen simultáneamente con el identificador (por ejemplo, una operación simultánea de lectura y escritura).

FILE_FLAG_POSIX_SEMANTICS
0x01000000
Indica que se va a tener acceso al archivo según las reglas POSIX. Esto incluye permitir varios archivos con nombres, que solo difieren en el caso de los sistemas de archivos que admiten este nombre. Use cuidado al usar esta opción porque las aplicaciones escritas para MS-DOS o Windows de 16 bits pueden no tener acceso a los archivos creados con esta marca.
FILE_FLAG_RANDOM_ACCESS
0x10000000
Indica que el acceso al archivo se realiza aleatoriamente. El sistema puede considerar que esto es una sugerencia para optimizar el almacenamiento en caché del archivo.
FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
Indica que el acceso al archivo debe ser secuencial de principio a fin. El sistema puede considerar que esto es una sugerencia para optimizar el almacenamiento en caché del archivo. Si una aplicación mueve el puntero de archivo para obtener acceso aleatorio, puede que no se produzca un almacenamiento en caché óptimo; no obstante, la operación correcta sigue garantizada.

Especificar esta marca puede aumentar el rendimiento de las aplicaciones que leen archivos grandes mediante el acceso secuencial. Las ganancias de rendimiento pueden ser aún más notables para las aplicaciones que leen archivos grandes principalmente secuencialmente, pero en ocasiones omiten intervalos pequeños de bytes.

FILE_FLAG_WRITE_THROUGH
0x80000000
Indica al sistema que escriba a través de cualquier caché intermedia y vaya directamente al disco. El sistema todavía puede almacenar en caché las operaciones de escritura, pero no puede vaciarlas de forma diferida.
 

Si el identificador representa el lado cliente de una canalización con nombre, el parámetro dwFlags también puede contener información de calidad de servicio de seguridad. Para obtener más información, vea Niveles de suplantación. Cuando la aplicación que realiza la llamada especifica la marca SECURITY_SQOS_PRESENT , el parámetro dwFlags puede contener uno o varios de los valores siguientes.

Valor Significado
SECURITY_ANONYMOUS
Suplantar al cliente en el nivel de suplantación anónima.
SECURITY_CONTEXT_TRACKING
El modo de seguimiento de seguridad es dinámico. Si no se especifica esta marca, el modo de seguimiento de seguridad es estático.
SECURITY_DELEGATION
Suplantar al cliente en el nivel de suplantación de delegación.
SECURITY_EFFECTIVE_ONLY
Solo los aspectos habilitados del contexto de seguridad de cliente están disponibles para el servidor. Si no especifica esta marca, todos los aspectos del contexto de seguridad de cliente están disponibles.

Esto permite al cliente limitar los grupos y privilegios que un servidor puede usar al suplantar al cliente.

SECURITY_IDENTIFICATION
Suplantar al cliente en el nivel de suplantación de identificación.
SECURITY_IMPERSONATION
Suplantar al cliente en el nivel de suplantación.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un identificador abierto para el archivo especificado.

Si se produce un error en la función, el valor devuelto es INVALID_HANDLE_VALUE. Para obtener información de error extendida, llame a GetLastError.

Comentarios

El parámetro dwFlags no puede contener ninguna de las marcas de atributo de archivo (FILE_ATTRIBUTE_*). Solo se pueden especificar cuando se crea el archivo.

En Windows 8 y Windows Server 2012, esta función es compatible con las tecnologías siguientes.

Tecnología Compatible
Protocolo Bloque de mensajes del servidor (SMB) 3.0
Conmutación por error transparente (TFO) de SMB 3.0
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO)
Sistema de archivos de Volumen compartido de clúster (CsvFS)
Sistema de archivos resistente a errores (ReFS)

Requisitos

   
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winbase.h (incluya Windows.h)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

CreateFile

Funciones de administración de archivos