Programming/Windows&C#

[Windows/WinAPI] CreateFile()

JMob 2013. 10. 14. 22:06
728x90
반응형

CreateFile(

LPCTSTR lpFileName,                                                 ------①

DWORD dwDesiredAccess,                                          -------②

DWORD dwShareMode,                                                 ------③

LPSECURITY_ATTRIBUTES pSecurityAttributes,                -----④

DWORD dwCreationDisposition,                                     -------⑤

DWORD dwFlagsAndAttributes,                                     --------⑥

HANDLE hTemplateFile                                                -------⑦

);


함수 설명 : 

WindowsAPI함수 중에서 파일을 생성하는 가장 기본적인 함수이다. 또한 단지 파일을 생성하는 것뿐만 아니라 기존의 파일을 열수도 있으며 각종 오브젝트를 생성하고 열 수도 있다.

- 파이프

- 메일슬롯

- COM 포트 등의 통신 장치

- 디스크장치

- 콘솔

- 디렉토리

성공할경우 파일의 핸들을 리턴한다. 때문에 사용을 다 한 후에는 CloseHandle()로 핸들을 닫아 주어야한다.


①  IpFileName : 

생성하고자 하는 파일(또는 오브젝트)의 이름을 지정한다. 파일으 이름은 최대 MAX_PATH의 길이로 지정 가능할수 있다. 경로로 완전경로를 줄거나 상대경로로도 줄 수 있다.



② dwDesiredAccess :

파일에 대한 액세스 권한을 지정한다. 생성하거나 연 파일로 어떤 작업을 할 것인가에 따라 적절한 엑세스 권할을 지정한다.


Flag 

 설명

 0

 오브젝트에 대한 쿼리만 엑세스 요청한다. 이 권한으로 장치를 열 경우 실제로 장치를 엑세스 하지 않고도 장치의 특성을 조사할 수 있다.

Ex) 오브젝트의 타입, 용량, 등등....

 GENERIC_READ

 읽기 위한 용도로 파일을 연다. 이 엑세스 권한으로 열 경우에는 파일을 읽기만 가능하다.

 GENERIC_WRITE

 쓰기 위한 용도로 파일을 연다. 이 엑세스 권한으로 열 경우에는 오직 쓰기만 가능하다

 GENERIC_READ | 
GENERIC_WRITE

 이 경우에는 읽기와 쓰기가 모두 가능하다.


등등 더 많은 종류의 플래그가 있지만 생략한다.


③ dwShareMode :

파일의 공유 모드를 지정한다. 공유 모드란 파일이 열려저 있는 상태에서 다른 프로세스가 또 이 파일을 오픈할 때 이를 허가 할 것인지 아닌지를 정한다. 만약 다른 프로세스에서 읽을수 없도록 하고싶다면 공유 모드를 지정하지 않아야 한다.


 Flag 

 설명

 FILE_SHARE_READ

 다른 프로세스가 읽기 엑세스 요청을 했을때 허가한다.

 FILE_SHARE_WRITE

 다른 프로세스가 쓰기 엑세스 요청을 했을때 허가한다.

 FILE_SHARE_DELETE

 삭제 엑세스 요청을 했을때 허가한다.


④ pSecurityAttributes : 

파일의 보안 속성을 지정하는 SECURITY_ATTRIBUTES 구조체 포인터이다. 차일드 프로세스로 핸들을 상속할 수 있는지 없는지가 결정된다. NULL일 경우에는 상속이 불가능하다.



⑤ dwCreationDisposition :

파일의 유무를 체크하고 새로 생성할지 말지를 정한다.


flag 

설명 

 CREATE_NEW

 파일을 새로 만든다. 이미 존재하면 에러 반환.

 CREATE_ALWAYS

 항상 파일을 새로 만든다. 이미 존재할경우 새로 덮어쓴다.

 OPEN_EXISTING

이미 존재하는 파일을 연다. 없을경우 에러를 반환한다. 파일이 아닌 장치를 열때는 이 플래그를 사용해야한다. 

 OPEN_ALWAYS

무조건 파일을 연다. 파일이 없을경우 새로 만든후 파일을 연다. 파일이 없어도 에러를 반환하지 않는다.

TRUNCATE_EXISTUNG 

파일을 연 후 크기를 0으로 만든다. 즉 파일을 다시 작성하고자 할때에 이 권한으로 열어야 한다. 



⑥ dwFlagsAndAttributes 

: 생성할 파일의 속성 또는 기타 오브젝트의 속정을 지정한다. 파일의 속성은 플래그 조합을 사용할 수 있다.


 flag

 설명

 FILE_ATTRIBUTE_ARCHIVE

 기록 속성을 설정한다. 기록 속성으로는 백업, 리스토어 프로그램에 의해 사용되며 파일이 백업되어야 함을 알라는 flag이다.

 FILE_ATTRIBUTE_ENCRYPTED

파일을 암호화한다. 디렉토리의 경우에는 이후에 생기는 파일과 서브디렉토리를 암호화 한다. 시스템 파일에는 적용되지 않음. 

 FILE_ATTRIBUTE_HIDDEN

 숨김 파일로 생성한다. 숨김 파일은 통상적으로는 목록에 나타나지 않는다.

 FILE_ATTRIBUTE_NORMAL

아무런 속성이 없는 파일을 만든다. 이 플래그는 단독으로 사용될때만 유용하다. 

 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED

컨텐트 인덱싱 서비스에 대해 인덱스 되지 않는다. 

 FILE_ATTRIBUTE_OFFLINE

데이터가 오프라인 상태이며 즉시 사용할수 있는 상태가 아니다. 이속성은 원격 저장소에 의해 사용됨으로 응용프로그램에는 사용해서는 안된다. 

 FILE_ATTRIBUTE_READONLY

읽기 전용의 파일로 생성한다. 

 FILE_ATTRIBUTE_SYSTEM

 시스탬 파일로 생성한다. 운영체제에 의해 배타적으로 사용되는 파일이다.

 FILE_ATTRIBUTE_TEMPORARY

임시 파일로 생성한다. 임시 파일은 디스크로 곡바로 입출력을 행하지 않고 가급적이면 메모리상에서 읽고 쓰기 때문에 일반 파일보다 속도가 빠르다. 다 사용한 후에는 반드시 삭제하여야 한다. 


파일 속성과 함께 다음 플래그들도 같이 지정할 수 있다.




 flag

설명

 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_SEMANTICS

백업, 리스토어를 위해 파일을 연다. 이경우 시스템은 보안을 무시한다.

 FILE_FLAG_POSIX_SEMANTICS

파일을 POSIX 규칙대로 엑세스한다. 파일명은 대소문자를 구분하며 대소문자만 다른 같은 파일명을 엑세스할 수 있다. 


⑦ hTemplateFile :

생성될 파일의 속성을 제공할 템플릿이다. 보통은 NULL이다.





참고 : sone.kr

728x90
반응형