CreateDirectoryTransactedA 함수(winbase.h)
[Microsoft는 개발자가 애플리케이션의 요구 사항을 달성하기 위해 대체 수단을 활용하는 것이 좋습니다. TxF가 개발된 많은 시나리오는 더 간단하고 쉽게 사용할 수 있는 기술을 통해 달성할 수 있습니다. 또한 이후 버전의 Microsoft Windows에서는 TxF를 사용하지 못할 수도 있습니다. TxF에 대한 자세한 내용과 대안은 트랜잭션 NTFS 사용에 대한 대안을 참조하세요.]
지정된 템플릿 디렉터리의 특성을 사용하여 트랜잭션 작업으로 새 디렉터리를 만듭니다. 기본 파일 시스템에서 파일 및 디렉터리에 대한 보안을 지원하는 경우 함수는 지정된 보안 설명자를 새 디렉터리에 적용합니다. 새 디렉터리에는 지정된 템플릿 디렉터리의 다른 특성이 유지됩니다.
구문
BOOL CreateDirectoryTransactedA(
[in, optional] LPCSTR lpTemplateDirectory,
[in] LPCSTR lpNewDirectory,
[in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
[in] HANDLE hTransaction
);
매개 변수
[in, optional] lpTemplateDirectory
새 디렉터리를 만들 때 템플릿으로 사용할 디렉터리의 경로입니다. 이 매개 변수는 NULL일 수 있습니다.
기본적으로 이름은 MAX_PATH 문자로 제한됩니다. 이 제한을 와이드 문자 32,767자로 확장하려면 경로 앞에 "\\?\"를 추가합니다. 자세한 내용은 파일 이름 지정, 경로 및 네임스페이스를 참조하세요.
팁
Windows 10 버전 1607부터 "\\?\" 앞에 추가하지 않고 MAX_PATH 제한을 제거하도록 옵트인할 수 있습니다. 자세한 내용은 파일, 경로 및 네임스페이스의 "최대 경로 길이 제한" 섹션을 참조하세요.
디렉터리가 로컬 컴퓨터에 있어야 합니다. 그렇지 않으면 함수가 실패하고 마지막 오류 코드가 ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE 설정됩니다.
[in] lpNewDirectory
만들 디렉터리의 경로입니다.
기본적으로 이름은 MAX_PATH 문자로 제한됩니다. 이 제한을 와이드 문자 32,767자로 확장하려면 경로 앞에 "\\?\"를 추가합니다. 자세한 내용은 파일 이름 지정, 경로 및 네임스페이스를 참조하세요.
팁
Windows 10 버전 1607부터 "\\?\" 앞에 추가하지 않고 MAX_PATH 제한을 제거하도록 옵트인할 수 있습니다. 자세한 내용은 파일, 경로 및 네임스페이스의 "최대 경로 길이 제한" 섹션을 참조하세요.
[in, optional] lpSecurityAttributes
SECURITY_ATTRIBUTES 구조체에 대한 포인터입니다. 구조체의 lpSecurityDescriptor 멤버는 새 디렉터리에 대한 보안 설명자를 지정합니다.
lpSecurityAttributes가 NULL이면 디렉터리가 기본 보안 설명자를 가져옵니다. 디렉터리에 대한 기본 보안 설명자의 ACL(액세스 제어 목록)은 부모 디렉터리에서 상속됩니다.
이 매개 변수가 영향을 미치려면 대상 파일 시스템에서 파일 및 디렉터리에 대한 보안을 지원해야 합니다. GetVolumeInformation이 FS_PERSISTENT_ACLS 반환할 때 표시됩니다.
[in] hTransaction
트랜잭션에 대한 핸들입니다. 이 핸들은 CreateTransaction 함수에서 반환됩니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다. 가능한 오류는 다음과 같습니다.
반환 코드 | 설명 |
---|---|
|
지정된 디렉터리가 이미 있습니다. |
|
암호화를 사용하지 않도록 설정된 부모 디렉터리를 사용하여 자식 디렉터리를 만들 수 없습니다. |
|
하나 이상의 중간 디렉터리를 존재하지 않습니다. 이 함수는 경로에 최종 디렉터리만 만듭니다. |
설명
CreateDirectoryTransacted 함수를 사용하면 다른 디렉터리에서 스트림 정보를 상속하는 디렉터리를 만들 수 있습니다. 이 함수는 예를 들어 디렉터리 콘텐츠를 특성으로 올바르게 식별하는 데 필요한 리소스 스트림이 있는 Macintosh 디렉터리를 사용하는 경우에 유용합니다.
NTFS 파일 시스템과 같은 일부 파일 시스템은 개별 파일 및 디렉터리에 대한 압축 또는 암호화를 지원합니다. 이러한 파일 시스템에 대한 형식이 지정된 볼륨에서 새 디렉터리가 부모 디렉터리의 압축 및 암호화 특성을 상속합니다.
암호화를 사용하지 않도록 설정된 부모 디렉터리를 사용하여 자식 디렉터리를 만들려고 하면 이 함수가 ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION 실패합니다.
FILE_FLAG_BACKUP_SEMANTICS 플래그 집합을 사용하여 CreateFileTransacted 함수를 호출하여 디렉터리에 대한 핸들을 가져올 수 있습니다.
Windows 8 및 Windows Server 2012에서 이 함수는 다음 기술을 통해 지원됩니다.
기술 | 지원됨 |
---|---|
SMB(서버 메시지 블록) 3.0 프로토콜 | No |
SMB 3.0 TFO(투명 장애 조치(failover)) | No |
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 | No |
CsvFS(클러스터 공유 볼륨 파일 시스템) | No |
ReFS(Resilient File System) | No |
SMB 3.0은 TxF를 지원하지 않습니다.
참고
winbase.h 헤더는 UNICODE 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 CreateDirectoryTransacted를 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | winbase.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |