CreateFile()

A Code AM·2020년 4월 6일
0

수업(20200212~)

목록 보기
6/12

CreateFile()

-> 파일 핸들을 할당하는 함수이다


CreateFile(
	LPCSTR lpFileName,
    DWORD dwDesiredAccess,
    DWORD dwShareMode,
    LPSECURITY_ATTRIBUTES pSecurityAttrubytes,
    DWORD dwCreationDisposition,
    DWORD dwFlagsAndAttributes,
    HANDLE hTemplateFile );

1. lpFileName

: 생성하고자 하는 파일의 이름 지정. 최대 MAX_PATH의 길이로 지정 가능하다. 경로로 완전 경로나 상대 경로로 줄 수 있다. LPSTR형의 변수를 입력해주거나 _T("Filename.txt")와 같이 직접 적어줄 수 있다.

2. dwDesiredAccess

: 접근 권한. 논리합 연산자 " | "를 이용해서 여러개 적을 수 있다.

0 : 오브젝트에 대한 쿼리만 엑세스 요청. 이 권한으로 장치를 열 경우 실제로 장치를 엑세스하지 않고도 장치의 특성 조사 가능
GENERIC_READ : 읽기 위한 용도로 파일을 연다(파일 읽기만 가능)
GENERIC_WRITE : 쓰기 위한 용도로 파일 연다 (쓰기만 가능)
GENERIC_READ | GENERIC_WRITE : 읽기, 쓰기 모두 가능

3. dwShareMode

: 다른 모드에서 사용 가능 하도록 할 것인지를 지정. 논리합 연산자 사용 가능. 기본적으로 0을 적어준다

FILE_SHARE_READ : 다른 프로세스가 읽기 엑세스 요청했을 때 허가함
FILE_SHARE_WRITE : 다른 프로세스가 쓰기 엑세스 요청했을 때 허가함
FILE_SHARE_DELETE : 삭제 엑세스 요청 했을 때 허가함.

4. lpSecurityAttributes

: 보안에 관련된 구조체 가리키는 값. Chile Process로 핸들을 상속할 수 있는지 없는지가 결정됨. 기본적으로 NULL을 적어준다.

5. dwCreationDisposition

: 파일의 유무 체크 및 새로 생성할 것인가 말 것인가를 정한다.

CREATE_NEW : 파일 새로 만듦. 이미 존재하면 에러 반환
CREATE_ALWAYS : 항상 파일 새로 만듦. 이미 존재할 경우 새로 덮어쓴다
OPEN_EXISTING : 이미 존재하는 파일 연다. 없을 경우 에러 반환. 파일 아닌 장치 열 때는 이 플래그를 사용해야 함.
OPEN_ALWAYS : 무조건 파일 연다. 파일 없을 경우 새로 만든 후 파일 연다. 파일 없어도 에러 반환하지 않는다.
TRUNCATE_EXISTING : 파일 연 후 크기를 0으로 만듦. 즉 파일을 다시 작성하고자 할 때에 이 권한으로 열어야 한다.

6. dwFlagsAndAttributes

: 생성할 파일의 속성 또는 기타 오브젝트의 속성 지정. 파일 속성은 플래그 조합 사용 할 수 있다. 플래그는 총 16개로 이는 파일을 만들 때만 사용되며 기존 파일 열 때는 기존 파일의 플래그를 따른다. 일반적으론 0으로 설정해 주면 된다.

FILE_ATTRIVUTE_ARCHIVE : 기록 속성 설정 (기록 속성 - 백업, 리스토어 프로그램에 의해 사용되며 파일이 백업되어야 함을 알리는 Flag)
FILE_ATTRIVUTE_ENCRYPTED :
파일을 암호화. 디렉토리의 경우에 이후에 생기는 파일과 서브디렉토리를 암호화. 시스템 파일에는 적용 안됨
FILE_ATTRIVUTE_HIDDEN : 숨김 파일로 생성. 통상적으로 목록에 안나타남
FILE_ATTRIVUTE_NORMAL : 아무 속성이 없는 파일 만듦. 이 플래그는 단독으로 사용될 때만 유용
FILE_ATTRIVUTE_NOT_CONTENT_INDEXED : 컨텐트 인덱싱 서비스에 대해 인덱스 안됨
FILE_ATTRIVUTE_OFFLINE : 데이터가 오프라인 상태이며 즉시 사용할 수 있는 상태가 아니다. 이 속성은 원격 저장소에 의해 사용됨으로 응용프로그램에 사용 X
FILE_ATTRIVUTE_READONLY : 읽기 전용 파일로 생성
FILE_ATTRIVUTE_SYSTEM : 시스템 파일로 생성. 운영체제에 의해 배타적으로 사용되는 파일
FILE_ATTRIVUTE_TEMPORARY : 임시 파일로 생성. 임시파일은 디스크로 곧바로 입출력 행하지 않고 가급적이면 메모리 상에서 읽고 쓰기 때문에 일반 파일보다 속도가 빠름. 다 사용한 후에는 '반드시' 삭제.

위 속성과 함께 플래그 지정 가능
FILE_FLAG_WRITE_THROUGH : 개시 사용하지 않고 곧바로 디스크로 입출력 하도록 함
FILE_FLAG_OVERLAPPED : 파일 입출력이 완전히 끝날 때까지 대기하지 않고 곧바로 리턴하는 비동기 입출력 모드로 파일 엶
FILE_FLAG_NO_BUFFERING : 버퍼링이나 캐시를 하지 않음으로써 비동기 효율 극대화. 이 플래그를 사용할 떄 요구조건이 있음
FILE_FLAG_RANDOM_ACCESS : 파일을 랜덤으로 엑세스 한다는 것을 시스템에게 알려줌. 시스템은 캐시를 최적화 할 때 이 정보 사용.
FILE_FLAG_SEQUENTIAL_SCAN : 파일을 순차적으로 엑세스 한다는 것을 시스템에게 알려줌. 시스템은 캐시 최적화에 이 정보를 사용해서 순차 엑세스의 효율을 높일 수 있는 방식으로 캐시 사용. 그러나 이 플래그를 사용하지 않아도 순차적으로 엑세스한다(뭐임...)
FILE_FLAG_DELETE_ON_CLOSE : 파일에 대한 모든 핸들이 닫히면 파일 삭제함
FILE_FLAG_BACKUP_SEMATICS : 백업, 리스토어를 위해 파일 엶. 이 경우 시스템은 보안 무시
FILE_FLAG_POSIX_SEMATICS : 파일을 POSIX 규칙대로 엑세스. 파일명은 대소문자 구분 / 대소문자만 다른 같은 파일명 엑세스 할 수 있음.

7. hTemplateFile

: GENERIC_READ를 지정해서 연 기존 파일 핸들. 파일의 특성들이 저장되므로 동일한 특성들을 가진 새 파일을 만들때 쓰이나 일반적으론 NULL을 넣는다.

profile
배움기록

0개의 댓글