OpenFileById 함수(winbase.h)
지정된 식별자와 일치하는 파일을 엽니다.
구문
HANDLE OpenFileById(
[in] HANDLE hVolumeHint,
[in] LPFILE_ID_DESCRIPTOR lpFileId,
[in] DWORD dwDesiredAccess,
[in] DWORD dwShareMode,
[in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
[in] DWORD dwFlagsAndAttributes
);
매개 변수
[in] hVolumeHint
열려는 파일이 저장되는 볼륨 또는 공유의 모든 파일에 대한 핸들입니다.
[in] lpFileId
열 파일을 식별하는 FILE_ID_DESCRIPTOR 대한 포인터입니다.
[in] dwDesiredAccess
개체에 대한 액세스 권한입니다. 액세스는 읽기, 쓰기 또는 둘 다 사용할 수 있습니다.
자세한 내용은 파일 보안 및 액세스 권한을 참조하세요. 열린 핸들이 있는 열린 요청에 지정된 공유 모드와 충돌하는 액세스 모드를 요청할 수 없습니다.
이 매개 변수가 0인 경우 애플리케이션은 디바이스에 액세스하지 않고 파일 및 디바이스 특성을 쿼리할 수 있습니다. 이는 애플리케이션이 플로피 디스크 드라이브의 크기와 드라이브에 플로피를 요구하지 않고 지원하는 형식을 결정하는 데 유용합니다. 읽기 또는 쓰기 액세스를 위해 파일 또는 디렉터리를 열지 않고 파일 또는 디렉터리의 존재를 테스트하는 데 사용할 수도 있습니다.
[in] dwShareMode
읽기, 쓰기, 둘 다 또는 없음일 수 있는 개체의 공유 모드입니다.
열려 있는 핸들이 있는 열린 요청에 지정된 액세스 모드와 충돌하는 공유 모드를 요청할 수 없습니다. 이는 다음 공유 위반(ERROR_SHARING_VIOLATION)을 초래하기 때문입니다. 자세한 내용은 파일 만들기 및 열기를 참조하세요.
이 매개 변수가 0이고 OpenFileById 가 성공하면 개체를 공유할 수 없으며 핸들을 닫을 때까지 다시 열 수 없습니다. 자세한 내용은 이 항목의 ‘주의’ 섹션을 참조하세요.
공유 옵션은 개체에 대한 핸들을 닫을 때까지 계속 적용됩니다.
다른 프로세스에서 개체가 열려 있는 동안 프로세스에서 개체를 공유할 수 있도록 하려면 다음 값 중 하나 이상의 조합을 사용하여 개체 열기를 요청할 수 있는 액세스 모드를 지정합니다.
[in, optional] lpSecurityAttributes
예약되어 있습니다.
[in] dwFlagsAndAttributes
파일 플래그입니다.
OpenFileById가 파일을 열면 파일 플래그를 기존 파일 특성과 결합하고 제공된 파일 특성을 무시합니다. 이 매개 변수에는 다음 플래그의 조합이 포함될 수 있습니다.
값 | 의미 |
---|---|
|
백업 또는 복원 작업을 위해 파일이 열리고 있습니다. 시스템은 프로세스에 SE_BACKUP_NAME 및SE_RESTORE_NAME 권한이 있는 경우 호출 프로세스가 파일 보안 검사를 재정의하도록 합니다. 자세한 내용은 토큰의 권한 변경을 참조하세요.
디렉터리에 대한 핸들을 가져오려면 이 플래그를 설정해야 합니다. 디렉터리 핸들은 파일 핸들 대신 일부 함수에 전달할 수 있습니다. 자세한 내용은 디렉터리 핸들을 참조하세요. |
|
시스템에서 시스템 캐싱 없이 파일을 엽니다. 이 플래그는 하드 디스크 캐싱에 영향을 주지 않습니다. FILE_FLAG_OVERLAPPED 결합하면 I/O가 메모리 관리자의 동기 작업에 의존하지 않으므로 플래그는 최대 비동기 성능을 제공합니다. 그러나 데이터가 캐시에 저장되지 않으므로 일부 I/O 작업에는 더 많은 시간이 소요됩니다. 또한 파일 메타데이터는 여전히 캐시될 수 있습니다. 메타데이터를 디스크로 플러시하려면 FlushFileBuffers 함수를 사용합니다.
애플리케이션은 FILE_FLAG_NO_BUFFERING 열린 파일로 작업할 때 특정 요구 사항을 충족해야 합니다.
애플리케이션은 GetDiskFreeSpace 함수를 호출하여 볼륨 섹터 크기를 결정할 수 있습니다. |
|
파일 데이터는 요청되지만 원격 스토리지에 계속 있어야 합니다. 로컬 스토리지로 다시 전송해서는 안 됩니다. 이 플래그는 원격 스토리지 시스템에서 사용하기 위한 것입니다. |
|
이 플래그를 사용하면 정상적인 재분석 지점 처리가 발생하지 않으며 OpenFileById 가 재분석 지점을 열려고 시도합니다. 파일을 열면 재분석 지점을 제어하는 필터가 작동하는지 여부에 관계없이 파일 핸들이 반환됩니다. 이 플래그는 CREATE_ALWAYS 플래그와 함께 사용할 수 없습니다. 파일이 재분석 지점이 아닌 경우 이 플래그는 무시됩니다. |
|
비동기 I/O를 위해 파일을 열거나 만듭니다. 작업이 완료되면 OVERLAPPED 구조체의 호출에 지정된 이벤트가 신호 상태로 설정됩니다. 반환 ERROR_IO_PENDING 처리하는 데 상당한 시간이 걸리는 작업입니다.
이 플래그를 지정하면 파일을 동시 읽기 및 쓰기 작업에 사용할 수 있습니다. 시스템에서 파일 포인터를 유지 관리하지 않으므로 파일 위치를 OVERLAPPED 구조의 읽기 및 쓰기 함수에 전달하거나 파일 포인터를 업데이트해야 합니다. 이 플래그를 지정하지 않으면 읽기 및 쓰기 함수에 대한 호출이 OVERLAPPED 구조를 지정하더라도 I/O 작업이 직렬화됩니다. |
|
파일에 임의로 액세스합니다. 시스템에서는 이 필드를 힌트로 사용하여 파일 캐싱을 최적화할 수 있습니다. |
|
처음부터 끝까지 순차적으로 파일에 액세스합니다. 시스템에서는 이 필드를 힌트로 사용하여 파일 캐싱을 최적화할 수 있습니다. 애플리케이션이 임의 액세스를 위해 파일 포인터를 이동하는 경우 최적의 캐싱이 발생하지 않을 수 있습니다. 그러나 올바른 작업은 여전히 보장됩니다.
이 플래그를 지정 순차적 액세스를 사용 하 여 큰 파일을 읽는 애플리케이션의 성능을 향상 시킬 수 있습니다. 성능 향상을 훨씬 더 큰 파일을 주로 순차적으로 읽을 하지만 작은 범위의 바이트를 건너뛰는 경우에 따라 애플리케이션에 대 한 눈에 띄는 될 수 있습니다. |
|
시스템은 중간 캐시를 통해 쓰고 디스크로 직접 이동합니다.
시스템 캐싱이 적용되도록 FILE_FLAG_NO_BUFFERING 지정하지 않으면 데이터가 시스템 캐시에 기록되지만 지연 없이 디스크로 플러시됩니다. 시스템 캐싱이 적용되지 않도록 FILE_FLAG_NO_BUFFERING 지정한 경우 시스템 캐시를 거치지 않고 데이터가 디스크로 즉시 플러시됩니다. 또한 운영 체제는 영구 미디어에 대한 하드 디스크 캐시 쓰기를 요청합니다. 그러나 모든 하드웨어가 이 쓰기 기능을 지원하는 것은 아닙니다. |
반환 값
이 함수가 성공적으로 실행되면 지정된 파일에 대해 열린 핸들이 반환되고
함수가 실패하는 경우 반환 값은 INVALID_HANDLE_VALUE입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
설명
CloseHandle 함수를 사용하여 OpenFileById가 반환하는 개체 핸들을 닫습니다.
DeleteFile에 대한 이전 호출의 결과로 삭제 보류 중인 파일에서 OpenFileById를 호출하면 함수가 실패합니다. 운영 체제는 파일에 대한 모든 핸들을 닫을 때까지 파일 삭제를 지연합니다. GetLastError는ERROR_ACCESS_DENIED 반환합니다.
Windows 8 및 Windows Server 2012에서 이 함수는 다음 기술을 통해 지원됩니다.
기술 | 지원됨 |
---|---|
SMB(서버 메시지 블록) 3.0 프로토콜 | No |
SMB 3.0 TFO(투명 장애 조치(failover)) | No |
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 | No |
CsvFS(클러스터 공유 볼륨 파일 시스템) | 예 |
ReFS(Resilient File System) | 예 |
요구 사항
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | winbase.h(Windows.h 포함) |
라이브러리 | Kernel32.lib; Windows Server 2003 및 Windows XP의 FileExtd.lib |
DLL | Kernel32.dll |
재배포 가능 파일 | Windows Server 2003 및 Windows XP의 Windows SDK. |