2013. 3. 19. 15:01ㆍ언어/C++
CreateFile() 함수 는 파일을 생성하는 함수이다.
이 함수로 파일의 핸들을 받아온 뒤, 다른 함수들을 이용하여 열기나 쓰기 등을 할 수 있다.
시리얼 통신에서 COM PORT 를 스트림으로 오픈할때 사용 할 수 있다.
CreateFile 로 오픈된 시리얼 포트는 이 함수에서 리턴된 파일 핸들을 이용하여 컨트롤 하게 된다.
이 파일 핸들을 이용해서 데이터를 쓰거나 읽는 것은 직접 UART Buffer에서 데이터를 읽는 것과 동일한 역할을 하게된다.
lpFileName 는 열고자 하는 디바이스 파일 이름 되는데 COM1 , COM2 와 같은 포트이름이 들어간다.
dwDesiredAccess 는 세가지 모드를 조합하여 설정할 수 있으나. 시리얼 통신의 경우 읽고 쓰는것이 가능해야 함으로. GENERIC_READ | GENERIC_WRITE 로 오픈해야 한다.
dwShareMode 는 Device File 의 경우 공유될 수 없으므로 그냥 0 으로 셋팅한다.
lpSecurityAttributes 는 파일의 보안을 설정해 주는 부분으로, Device File 에서는 사용하지 않으므로 NULL 로 셋팅한다.
dwCreationDisposition 는 Device File 은 존재하지 않으면 생성할 수 없으므로 이 부분은 항상 OPEN_EXISTING 으로 셋팅되어야 한다. 그렇지 않으면 오류를 일으키게 됨으로 주의.
dwFlagsAndAttributes 는 Device File 의 경우 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED 로 설정 해 주어야함
hTemplateFile 은 GENERIC_READ 로 Access Mode 를 셋팅하였을 때 템플릿 파일을 제공하는데, 템플릿 파일은 Win NT 에서만 제공되므로 win95 나 win98에서 사용할 경우에는 항상 NULL 로 세팅해야만함
ex)
m_hComm = CreateFile(
m_sPortName // 포트이름 (COM1...)
, GENERIC_READ | GENERIC_WRITE
, 0
, NULL
, OPEN_EXISTING
, FILE_ATTRIBUTE_NOMAL | FILE_FLAG_OVERLAPPED
, NULL);
m_hComm 는 통신 포트 파일 핸들.
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
인수 에 대한 내용은
lpFileName : 파일을 생성하거나 열 경로.
dwDesiredAccess
: 파일을 열거나 쓰기 등을 할 때의 엑세스 권한을 지정.
다음의 값 중 복수로 넣을 수 있다.
GENERIC_ALL 모든 액세스 권한을 가짐.
GENERIC_EXECUTE 실행 권한을 가짐.
GENERIC_READ 읽기 권한을 가짐.
GENERIC_WRITE 쓰기 권한을 가짐.
DELETE 삭제 권한을 가짐.
READ_CONTROL 액세스 제어목록(DACL)이 읽기 권한을 가짐(?)
WRITE_OWNER 사용자가 쓰기 권한을 가짐.
SYNCHRONIZE 동기화 권환을 가짐.
dwShareMode
: 파일 공유모드를 지정. 공유 모드를 지정할 경우 다른 프로세스에서 현재 파일을 엑세스 할 수 없음.
다음의 값 중 하나만 넣을 수 있다.
0 모든 프로세스의 접근을 차단
FILE_SHARE_READ 다른 프로세스의 열기 권한을 허가
FILE_SHARE_WRITE 다른 프로세스의 쓰기 권한을 허가
FILE_SHARE_DELETE 다른 프로세스의 삭제 권한을 허가
lpSecurityAttributes
: SECURITY_ATTRIBUTES 의 구조체 포인터. 보통 NULL 값을 사용.
dwCreationDisposition
: 해당 위치에 파일의 존재 유무에 따른 행동 결정. 보통 OPEN_EXISTING 을 사용.
다음의 값 중 하나만 넣을 수 있다.
CREATE_NEW 파일이 존재하지 않을 경우 새로운 파일을 만듬. 파일이 존재할 경우 ERROR_FILE_EXISTS(80) 를 발생.
CREATE_ALWAYS 항상 새로운 파일을 만듬. 파일이 존재할 경우 새로운 파일로 덮어씌움.
OPEN_EXISTING 파일이 존재할 경우에만 파일을 연다. 파일이 존재하지 않을 경우 ERROR_FILE_NOT_FOUND(2) 를 발생.
OPEN_ALWAYS 무조건 파일을 연다. 파일이 존재하지 않을 경우 새로 파일을 만들고 연다.
TRUNCATE_EXISTING 파일이 존재할 경우 파일을 연 후 크기를 0으로 만듬. 파일이 존재하지 않을 경우 ERROR_FILE_NOT_FOUND(2) 를 발생
dwFlagsAndAttributes
: 생성될 파일의 속성을 지정. 보통 FLIE_ATTRIBUTE_NOMAL 을 사용.
다음의 값 중 복수로 넣을 수 있다.
FILE_ATTRIBUTE_READONLY 파일을 읽기 전용으로 지정.
FILE_ATTRIBUTE_HIDDEN 파일을 숨김으로 지정.
FILE_ATTRIBUTE_SYSTEM 파일을 운영체제 전용으로 지정.
FILE_ATTRIBUTE_ARCHIVE 파일을 보관 가능으로 지정.
FILE_ATTRIBUTE_NORMAL 모든 속성을 지정하지 않음. 다른 값과 중복 사용시 무시됨.
FILE_ATTRIBUTE_TEMPORARY 파일을 임시 파일로 지정.
FILE_ATTRIBUTE_OFFlINE (?)
FILE_ATTRIBUTE_ENCRYPTED 파일이나 폴더를 암호화로 지정.
hTemplateFile
: 생성된 파일에 대한 속성을 제공하는 템플릿. 보통 NULL 값을 사용.
[1차 출처] CreateFile()|작성자 초록색빈폴
'언어 > C++' 카테고리의 다른 글
CQuery (0) | 2013.03.25 |
---|---|
배포된 DLL 내부함수 보기 (0) | 2013.01.08 |
API HOOK 관련 사이트 (0) | 2011.12.09 |
BHO와 어플리케이션 그리고 공유메모리 (0) | 2011.12.05 |
BHO 관련 자료들 (0) | 2011.12.02 |