RS232 CreateFile()

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