Share via


ReOpenFile 함수(winbase.h)

액세스 권한, 공유 모드 및 플래그가 다른 지정된 파일 시스템 개체를 다시 엽니다.

구문

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

매개 변수

[in] hOriginalFile

다시 열 개체에 대한 핸들입니다. 개체는 CreateFile 함수에 의해 만들어졌어야 합니다.

[in] dwDesiredAccess

개체에 필요한 액세스 권한입니다. 값 목록은 파일 보안 및 액세스 권한을 참조하세요. 핸들이 아직 열려 있는 이전 열린 요청에 지정된 공유 모드와 충돌하는 액세스 모드를 요청할 수 없습니다.

이 매개 변수가 0인 경우 애플리케이션은 디바이스에 액세스하지 않고 디바이스 특성을 쿼리할 수 있습니다. 이는 애플리케이션이 플로피 디스크 드라이브의 크기와 드라이브에 플로피를 요구하지 않고 지원되는 형식을 확인하려는 경우에 유용합니다.

[in] dwShareMode

개체의 공유 모드입니다. 핸들이 아직 열려 있는 이전의 열린 요청에 지정된 액세스 모드와 충돌하는 공유 모드를 요청할 수 없습니다.

이 매개 변수가 0이고 CreateFile 이 성공하면 개체를 공유할 수 없으며 핸들을 닫을 때까지 다시 열 수 없습니다.

프로세스가 열려 있는 동안 다른 프로세스에서 개체를 공유할 수 있도록 하려면 다음 값 중 하나 이상을 조합하여 개체를 열 때 요청할 수 있는 액세스 유형을 지정합니다. 이러한 공유 옵션은 개체에 대한 핸들을 닫을 때까지 계속 적용됩니다.

의미
FILE_SHARE_DELETE
0x00000004
개체에 대한 후속 열기 작업을 사용하여 삭제 액세스를 요청할 수 있습니다. 그렇지 않으면 다른 프로세스에서 삭제 액세스를 요청하는 경우 개체를 열 수 없습니다.

개체가 삭제 액세스 권한으로 이미 열려 있는 경우 공유 모드에 이 플래그가 포함되어야 합니다.

FILE_SHARE_READ
0x00000001
개체에 대한 후속 열기 작업을 사용하여 읽기 액세스를 요청할 수 있습니다. 그렇지 않으면 다른 프로세스에서 읽기 액세스를 요청하는 경우 개체를 열 수 없습니다.

개체가 읽기 권한으로 이미 열려 있는 경우 공유 모드에 이 플래그가 포함되어야 합니다.

FILE_SHARE_WRITE
0x00000002
개체에 대한 후속 열기 작업을 사용하여 쓰기 액세스를 요청할 수 있습니다. 그렇지 않으면 다른 프로세스에서 쓰기 액세스를 요청하는 경우 개체를 열 수 없습니다.

쓰기 액세스 권한이 있는 개체가 이미 열려 있는 경우 공유 모드에 이 플래그가 포함되어야 합니다.

[in] dwFlagsAndAttributes

파일 플래그입니다. 이 매개 변수는 다음 값 중 하나 이상일 수 있습니다.

의미
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
백업 또는 복원 작업을 위해 파일을 열거나 만들고 있음을 나타냅니다. 시스템은 SE_BACKUP_NAME 및SE_RESTORE_NAME 권한이 있는 경우 호출 프로세스가 파일 보안 검사를 재정의하도록 합니다. 자세한 내용은 토큰의 권한 변경을 참조하세요.

이 플래그를 설정하여 디렉터리에 대한 핸들을 가져올 수도 있습니다. 표시된 경우 디렉터리 핸들을 파일 핸들 대신 일부 함수에 전달할 수 있습니다.

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
운영 체제가 지정된 핸들뿐만 아니라 열려 있거나 중복된 다른 핸들뿐만 아니라 모든 핸들이 닫힌 직후에 파일을 삭제하는 것임을 나타냅니다.

FILE_SHARE_DELETE 사용되지 않는 한 파일에 대한 후속 열린 요청이 실패합니다.

FILE_FLAG_NO_BUFFERING
0x20000000
중간 버퍼링이나 캐싱 없이 파일을 열도록 시스템에 지시합니다. FILE_FLAG_OVERLAPPED 결합하면 I/O가 메모리 관리자의 동기 작업에 의존하지 않으므로 플래그는 최대 비동기 성능을 제공합니다. 그러나 데이터가 캐시에 저장되지 않으므로 일부 I/O 작업은 더 오래 걸립니다.

애플리케이션은 FILE_FLAG_NO_BUFFERING 열린 파일로 작업할 때 특정 요구 사항을 충족해야 합니다.

  • 파일 액세스는 볼륨 섹터 크기의 정수 배수인 파일 내의 바이트 오프셋에서 시작해야 합니다.
  • 파일 액세스는 볼륨 섹터 크기의 정수 배수인 바이트 수여야 합니다. 예를 들어 섹터 크기가 512바이트인 경우 애플리케이션은 512, 1024, 1536 또는 2048바이트의 읽기 및 쓰기를 요청할 수 있지만 335, 981 또는 7171 바이트는 요청할 수 없습니다.
  • 읽기 및 쓰기 작업의 버퍼 주소는 섹터 정렬되어야 합니다(볼륨 섹터 크기의 정수 배수인 메모리의 주소에 맞춰 정렬됨). 디스크에 따라 이 요구 사항이 적용되지 않을 수 있습니다.
볼륨 섹터 크기의 정수 배수에 버퍼를 맞추는 한 가지 방법은 VirtualAlloc 을 사용하여 버퍼를 할당하는 것입니다. 운영 체제 메모리 페이지 크기의 정수 배수인 주소에 정렬된 메모리를 할당합니다. 메모리 페이지와 볼륨 섹터 크기는 모두 2의 힘이므로 이 메모리는 볼륨 섹터 크기의 정수 배수인 주소에서도 정렬됩니다. 메모리 페이지의 크기는 4~8KB입니다. 섹터는 512바이트(하드 디스크) 또는 2048바이트(CD)이므로 볼륨 섹터는 메모리 페이지보다 클 수 없습니다.

애플리케이션은 GetDiskFreeSpace 함수를 호출하여 볼륨 섹터 크기를 확인할 수 있습니다.

FILE_FLAG_OPEN_NO_RECALL
0x00100000
파일 데이터가 요청되었지만 원격 스토리지에 계속 상주해야 했음을 나타냅니다. 로컬 스토리지로 다시 전송해서는 안 됩니다. 이 플래그는 원격 스토리지 시스템에서 사용하기 위한 것입니다.
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
이 플래그를 사용하면 정상적인 재분석 지점 처리가 수행되지 않으며 ReOpenFile 에서 재분석 지점을 열려고 시도합니다. 파일을 열면 재분석 지점을 제어하는 필터가 작동하는지 여부에 관계없이 파일 핸들이 반환됩니다. 이 플래그는 CREATE_ALWAYS 플래그와 함께 사용할 수 없습니다. 파일이 재분석 지점이 아니면 이 플래그는 무시됩니다.
FILE_FLAG_OVERLAPPED
0x40000000
반환 ERROR_IO_PENDING 처리하는 데 상당한 시간이 걸리는 작업을 수행하도록 시스템에 개체를 초기화하도록 지시합니다. 작업이 완료되면 지정된 이벤트가 신호 상태로 설정됩니다.

FILE_FLAG_OVERLAPPED 지정할 때 파일 읽기 및 쓰기 함수는 OVERLAPPED 구조를 지정해야 합니다. 즉, FILE_FLAG_OVERLAPPED 지정되면 애플리케이션이 겹치는 읽기 및 쓰기를 수행해야 합니다 .

FILE_FLAG_OVERLAPPED 지정되면 시스템에서 파일 포인터를 유지 관리하지 않습니다. 파일 위치는 lpOverlapped 매개 변수( OVERLAPPED 구조를 가리키는)의 일부로 파일 읽기 및 쓰기 함수에 전달되어야 합니다.

또한 이 플래그를 사용하면 핸들을 사용하여 둘 이상의 작업을 동시에 수행할 수 있습니다(예: 동시 읽기 및 쓰기 작업).

FILE_FLAG_POSIX_SEMANTICS
0x01000000
POSIX 규칙에 따라 파일에 액세스할 것임을 나타냅니다. 여기에는 이러한 명명을 지원하는 파일 시스템에 대해서만 이름이 다른 여러 파일을 허용하는 것이 포함됩니다. 이 플래그로 만든 파일은 MS-DOS 또는 16비트 Windows용으로 작성된 애플리케이션에서 액세스할 수 없으므로 이 옵션을 사용할 때는 주의해야 합니다.
FILE_FLAG_RANDOM_ACCESS
0x10000000
파일이 임의로 액세스됨을 나타냅니다. 시스템에서는 이 필드를 힌트로 사용하여 파일 캐싱을 최적화할 수 있습니다.
FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
파일이 처음부터 끝까지 순차적으로 액세스됨을 나타냅니다. 시스템에서는 이 필드를 힌트로 사용하여 파일 캐싱을 최적화할 수 있습니다. 애플리케이션에서 임의 액세스를 위해 파일 포인터를 이동하는 경우 최적 캐싱이 수행되지 않을 수 있지만 올바른 작업은 보장됩니다.

이 플래그를 지정 순차적 액세스를 사용 하 여 큰 파일을 읽는 애플리케이션의 성능을 향상 시킬 수 있습니다. 성능 향상을 훨씬 더 큰 파일을 주로 순차적으로 읽을 하지만 작은 범위의 바이트를 건너뛰는 경우에 따라 애플리케이션에 대 한 눈에 띄는 될 수 있습니다.

FILE_FLAG_WRITE_THROUGH
0x80000000
시스템에 중간 캐시를 통해 쓰고 디스크로 직접 이동하도록 지시합니다. 시스템은 여전히 쓰기 작업을 캐시할 수 있지만 지연 플러시할 수는 없습니다.
 

핸들이 명명된 파이프의 클라이언트 쪽을 나타내는 경우 dwFlags 매개 변수에는 보안 서비스 품질 정보도 포함될 수 있습니다. 자세한 내용은 가장 수준을 참조하세요. 호출 애플리케이션이 SECURITY_SQOS_PRESENT 플래그를 지정하면 dwFlags 매개 변수에 다음 값 중 하나 이상이 포함될 수 있습니다.

의미
SECURITY_ANONYMOUS
익명 가장 수준에서 클라이언트를 가장합니다.
SECURITY_CONTEXT_TRACKING
보안 추적 모드는 동적입니다. 이 플래그를 지정하지 않으면 보안 추적 모드가 정적입니다.
SECURITY_DELEGATION
위임 가장 수준에서 클라이언트를 가장합니다.
SECURITY_EFFECTIVE_ONLY
클라이언트 보안 컨텍스트의 사용 가능한 측면만 서버에서 사용할 수 있습니다. 이 플래그를 지정하지 않으면 클라이언트 보안 컨텍스트의 모든 측면을 사용할 수 있습니다.

이렇게 하면 클라이언트가 클라이언트를 가장하는 동안 서버에서 사용할 수 있는 그룹 및 권한을 제한할 수 있습니다.

SECURITY_IDENTIFICATION
ID 가장 수준에서 클라이언트를 가장합니다.
SECURITY_IMPERSONATION
가장 가장 수준에서 클라이언트를 가장합니다.

반환 값

함수가 성공하면 반환 값은 지정된 파일에 대한 열린 핸들입니다.

함수가 실패하는 경우 반환 값은 INVALID_HANDLE_VALUE입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

dwFlags 매개 변수는 파일 특성 플래그(FILE_ATTRIBUTE_*)를 포함할 수 없습니다. 이러한 파일은 파일을 만들 때만 지정할 수 있습니다.

Windows 8 및 Windows Server 2012에서 이 함수는 다음 기술을 통해 지원됩니다.

기술 지원됨
SMB(서버 메시지 블록) 3.0 프로토콜
SMB 3.0 TFO(투명 장애 조치(failover))
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0
CsvFS(클러스터 공유 볼륨 파일 시스템)
ReFS(Resilient File System)

요구 사항

   
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winbase.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CreateFile

파일 관리 함수