관리 메뉴

ㄴrㅎnㅂrㄹrㄱi

CreateFile(A) 본문

API 관련/Win32 API 함수

CreateFile(A)

님투 2007. 11. 8. 22:41
반응형

CreateFile(A)

파일, 디렉토리, 물리 디스크, 볼륨, 콘솔 버퍼, 테이프 드라이브, 통신 자원, 메일 슬롯, 파이프의 몇개의 오브젝트를 작성 또는 오픈해, 그 오브젝트에 액세스 하기 위해서 필요한 오브젝트 핸들을 돌려줍니다.

Windows 95/98/Me: 이 함수를 사용해 디렉토리, 물리 디스크, 볼륨을 오픈할 수 없습니다.

HANDLE CreateFileA(
    PCTSTR pszFileName,          // 파일명
    DWORD  dwAccess,             // 액세스 지정
    DWORD  dwShare,              // 공유 방법
    PSECURITY_ATTRIBUTES psa,    // 시큐러티 속성
    DWORD  dwCreateDisposition,  // 동작 지정
    DWORD  dwFlagsAndAttributes, // 플래그와 속성
    HANDLE hTemplate             // 템플릿 파일
);

KERNEL32.DLL

인수

pszFileName

작성 또는 오픈하는 오브젝트의 이름을 나타내는 문자열의 주소를 지정합니다.

패스명을 지정하는 경우는, 최대 문자수는260 (MAX_PATH) 문자입니다.

ANSI판의 함수에서는, 이 문자열은 최대260 (MAX_PATH) 문자에 제한됩니다.Unicode판 함수(CreateFileW함수)를 사용해, 패스명의 전에 "\\?\" 프레픽스를 붙이는 것으로, 최대32,767문자의 긴 문자열을 지정할 수 있습니다.

Windows 95/98/Me: 이 문자열은 최대260 (MAX_PATH) 문자가 아니면 안됩니다.

dwAccess

오브젝트에의 액세스권의 종류를 지정합니다.이하의 값의 편성으로 지정합니다.

0x00000000

디바이스에의 액세스를 행하는 일 없이, 디바이스의 속성을 문의합니다.예를 들면, 후롭피디크스드라이브의 사이즈나 서포트되는 포맷의 결정을, 드라이브안의 후롭피디크스에 액세스 하는 일 없이 결정할 수 있습니다.또, 파일이나 디렉토리가 존재할지를 확인하게도 사용할 수 있습니다.

0x40000000 (GENERIC_WRITE)

기입 액세스입니다.데이터의 기입과 파일 포인터의 이동을 할 수 있습니다.읽고 쓰기 액세스를 하려면 ,GENERIC_READ(와)과 조합해 지정합니다.

0x80000000 (GENERIC_READ)

독해 액세스입니다.데이터의 독해와 파일 포인터의 이동을 할 수 있습니다.

dwShare

오브젝트의 공유 모드를 지정합니다.벌써 오픈되고 있는 핸들로 지정된 액세스 공유 모드와 경합 하는 공유 모드를 요구할 수 없습니다.

이하의 값의 언젠가, 또는 조합으로 지정합니다.이러한 공유 옵션의 효과는, 돌려주어진 핸들이 클로우즈 될 때까지 지속합니다.

0x00000000

다른 값이 지정되지 않는 경우는, 오브젝트는 공유되지 않습니다.핸들을 클로우즈 하지 않는 한, 이 이후의 이 오브젝트에의 오픈 조작은 실패합니다.

0x00000001 (FILE_SHARE_READ)

후속의 오픈 조작으로 읽어내 액세스가 요구되었을 경우, 그 오픈을 허가합니다.

벌써 읽어내 액세스 요구와 함께 오픈되고 있는 오브젝트를 오픈 경우에는, 이 플래그가 포함되지 않으면 오픈 조작은 실패합니다.

0x00000002 (FILE_SHARE_WRITE)

후속의 오픈 조작으로 써 액세스가 요구되었을 경우, 그 오픈을 허가합니다.

벌써 써 액세스 요구와 함께 오픈되고 있는 오브젝트를 오픈 경우에는, 이 플래그가 포함되지 않으면 오픈 조작은 실패합니다.

0x00000004 (FILE_SHARE_DELETE)

후속의 오픈 조작으로 삭제 액세스가 요구되었을 경우, 그 오픈을 허가합니다.

벌써 삭제 액세스 요구와 함께 오픈되고 있는 오브젝트를 오픈 경우에는, 이 플래그가 포함되지 않으면 오픈 조작은 실패합니다.

Windows 95/98/Me: 이 플래그는 서포트되지 않습니다.

psa

취득한 핸들의 child process에의 계승을 허가할지를 결정한다 SECURITY_ATTRIBUTES구조체에의 포인터를 지정합니다.0 (NULL) (을)를 지정하면, 핸들은 계승되지 않습니다.

이 구조체의lpSecurityDescriptor멤버로 시큐러티 기술자를 설정합니다.이 멤버에0 (NULL) (을)를 지정하면 디폴트의 시큐러티 기술자가 사용됩니다.파일이나 디렉토리에 대한 디폴트의 시큐러티 기술자의 액세스 콘트롤 리스트 (Access Control List; ACL) (은)는, 친디렉토리로부터 계승됩니다.이 파라미터가 효과를 가지기 위해서는, 대상의 파일 시스템이 파일·디렉토리의 시큐러티를 서포트하고 있을 필요가 있습니다.벌써 존재하는 파일에 대해서는, 이 시큐러티 기술자의 지정은 무시됩니다.

dwCreateDisposition

파일이 존재할 때, 또는 존재하지 않을 때의 각각의 동작을 지정합니다.다음의 값의 어느쪽이든을 지정합니다.

1 (CREATE_NEW)

새로운 파일을 작성합니다.지정 파일이 벌써 존재하고 있는 경우, 함수는 실패합니다.

2 (CREATE_ALWAYS)

새로운 파일을 작성합니다.지정 파일이 벌써 존재하고 있는 경우, 그 파일은 덧쓰기됩니다.이 때, 기존의 속성은 클리어 되어 지정된 파일 속성 및FILE_ATTRIBUTE_ARCHIVE하지만 설정됩니다만, 지정된 시큐러티 기술자는 설정되지 않습니다.

3 (OPEN_EXISTING)

파일을 오픈합니다.지정 파일이 존재하고 있지 않는 경우, 함수는 실패합니다.

디바이스상 (콘솔도 포함한다) 그리고 이 함수를 사용하는 경우는, 이 플래그를 지정하지 않으면 안됩니다.

4 (OPEN_ALWAYS)

파일을 오픈합니다.지정 파일이 존재하고 있지 않는 경우, 새로운 파일을 작성합니다.

5 (TRUNCATE_EXISTING)

파일을 오픈해, 파일의 사이즈를0아르바이트로 합니다.지정 파일이 존재하고 있지 않는 경우, 함수는 실패합니다.dwAccess파라미터로, 적어도GENERIC_WRITE액세스권을 지정하지 않으면 안됩니다.

dwFlagsAndAttributes

파일의 속성 및 플래그를 조합해 지정합니다.

파일의 속성을 이하의 값의 편성으로 지정합니다.이러한 어느 속성도 지정되지 않았던 경우는,FILE_ATTRIBUTE_NORMAL그리고 덧쓰기됩니다.

0x00000001 (FILE_ATTRIBUTE_READONLY)

독해 전용 속성을 가집니다.어플리케이션은, 이 속성을 가지는 파일을 읽어들일 수 있습니다만, 쓰거나 삭제하거나 할 수 없습니다.이 속성을 가지는 디렉토리를 삭제할 수 없습니다.

0x00000002 (FILE_ATTRIBUTE_HIDDEN)

은폐 파일 속성을 가집니다.통상의 디렉토리 리스트 출력에는 포함되지 않게 됩니다.

0x00000004 (FILE_ATTRIBUTE_SYSTEM)

시스템 속성을 가집니다. operating system의 일부 혹은 operating system에 의해 사용되는 파일입니다.

0x00000020 (FILE_ATTRIBUTE_ARCHIVE)

archiver 속성을 가집니다.어플리케이션은, 백업이나 수복을 위해서 파일을 마크 하는데 이 속성을 이용합니다.

0x00000080 (FILE_ATTRIBUTE_NORMAL)

다른 어느 속성도 설정되어 있지 않습니다.이 속성 플래그가 단독으로 지정되었을 경우만 유효합니다.

0x00000100 (FILE_ATTRIBUTE_TEMPORARY)

일시 스토리지(일시 기억 영역으로서 이용되고 있는 영역)로서 사용되는 것을 지정합니다.많은 어플리케이션은 파일 핸들을 클로우즈 한 후 곧바로 일시파일을 삭제하므로, 캐시 기억 장치가 이용 가능한 경우는, 캐쉬를 이용합니다.

0x00001000 (FILE_ATTRIBUTE_OFFLINE)

파일의 데이터를 직접 이용할 수 있는 것은 아닌 것을 나타내 보입니다.이 속성은, 파일 데이터가 오프 라인 스토리지에 물리적으로 이동된 것인 것을 나타냅니다.이 속성은 리모트 스토리지(계층 스토리지 관리 소프트웨어)에 의해서 이용됩니다.어플리케이션은 이 속성을 변경해야 하는 것이 아닙니다.

0x00002000 (FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)

파일이 컨텐츠 인덱스 서비스에 의해서 인덱스 붙이지 않을 수 없는 것을 나타내 보입니다.

0x00004000 (FILE_ATTRIBUTE_ENCRYPTED)

암호화 속성을 가집니다.이 속성을 가지는 파일은 데이터가 암호화되고 있는 것을 나타냅니다.이 속성을 가지는 디렉토리는, 이 디렉토리안에 새롭게 작성되는 파일이나 서브 디렉토리가 디폴트로 암호화 속성을 가지는 것을 나타냅니다.

FILE_ATTRIBUTE_SYSTEM플래그가 함께 지정되어 있는 경우는, 이 플래그는 무효가 됩니다.

이하의 옵션 플래그를 편성으로 지정할 수 있습니다.

0x80000000 (FILE_FLAG_WRITE_THROUGH)

캐쉬에 써진 데이터를 그대로 직접 디스크에 쓰도록(듯이) 합니다.

If FILE_FLAG_NO_BUFFERING하지만 함께 지정되어 있는 경우, 시스템 캐쉬가 유효가 되어, 써진 데이터는 시스템 캐쉬에 써져 즉시 디스크에 플래시 됩니다.

If FILE_FLAG_NO_BUFFERING하지만 함께 지정되어 있지 않은 경우, 시스템 캐쉬가 무효가 되기 위해, 써진 데이터는 시스템 캐쉬에 써지는 일 없이, 즉시 디스크에 플래시 됩니다.

0x40000000 (FILE_FLAG_OVERLAPPED)

시간이 걸리는 처리에 대해서 ReadFile함수나 WriteFile함수로ERROR_IO_PENDING확장 에러를 돌려주도록(듯이) 합니다.처리가 종료하면, 이벤트가 시그널 상태로 설정됩니다.

이 플래그를 지정했을 때는,ReadFile함수나WriteFile함수로 OVERLAPPED구조체를 지정하지 않으면 안됩니다.

이 플래그가 지정되면, 파일 포인터가 보관 유지되지 않습니다.파일 입출력 함수를 호출할 때 ,OVERLAPPED구조체에 파일 위치를 포함해 건네주지 않으면 안됩니다.

이 플래그에 의해, 파일에 대해서 복수의 조작을 동시에 실시하는 것이 가능하게 됩니다(예를 들면, 독해·기입 조작을 동시에 실시하는 등).

0x20000000 (FILE_FLAG_NO_BUFFERING)

시스템 캐쉬를 사용하지 않고 파일을 오픈하도록(듯이) 지정합니다.이 플래그는, 하드 디스크 캐쉬에는 영향을 주지 않습니다.FILE_FLAG_OVERLAPPED플래그와 함께 지정되면, 입출력이 MS-DOS메모리 관리 프로그램 의 동기 처리에 의존하지 않기 때문에, 최대의 비동기의 퍼포먼스를 얻을 수 있습니다.다만, 데이터가 캐쉬에 보관되지 않기 때문에, 퍼포먼스가 저하하는 입출력 처리도 있습니다.또, 파일의 메타데이타는 아직 캐쉬될 가능성이 있습니다.메타데이타를 디스크에 플래시 되려면 ,FlushFileBuffers함수를 사용합니다.

이 플래그를 지정했을 때는, 파일 액세스의 개시 오프셋, 파일의 액세스의 아르바이트수, 읽고 쓰기 조작용의 버퍼의 주소를, 볼륨의 섹터 사이즈의 정수배로 하지 않으면 안됩니다.(볼륨의 섹터 사이즈를 요구하려면GetDiskFreeSpace함수를 사용합니다.)

0x10000000 (FILE_FLAG_RANDOM_ACCESS)

파일에 랜덤 억세스 하는 것을 시스템에 나타냅니다.시스템은, 랜덤 억세스용으로 최적화된 파일 캐슁을 실시합니다.

0x08000000 (FILE_FLAG_SEQUENTIAL_SCAN)

파일에 시퀸셜 액세스(최초부터 마지막으로 향해 연속적으로 액세스) 하는 것을 시스템에 나타냅니다.시스템은, 시퀸셜 액세스용으로 최적화된 파일 캐슁을 행합니다.이 플래그를 지정해도, 랜덤 억세스를 할 수 없게 되는 것은 아닙니다.

0x04000000 (FILE_FLAG_DELETE_ON_CLOSE)

그 파일을 가리키는 모든 파일의 핸들이 클로우즈 되었을 때에, 그 파일을 삭제하도록(듯이) 지정합니다.

지정된 파일의 오픈되고 있는 핸들이 벌써 존재하고 있는 경우는, 그 모든 핸들이FILE_SHARE_DELETE공유 모드로 오픈되어 있지 않은 한, 함수 호출은 실패합니다.

이후의 같은 파일에 대한 오픈 요구는,FILE_SHARE_DELETE공유 모드가 지정되지 않는 한 실패합니다.

0x02000000 (FILE_FLAG_BACKUP_SEMANTICS)

백업 또는 복원 조작을 위해서, 파일을 오픈 또는 작성합니다.SE_BACKUP_NAMESE_RESTORE_NAME특권을 가지고 있는 경우에, 호출 프로세스가 파일 시큐러티 체크를 오버라이드(override) 하는 것을 보증합니다.

Windows 95/98/Me: 이 플래그는 서포트되지 않습니다.

0x01000000 (FILE_FLAG_POSIX_SEMANTICS)

POSIX의 규칙에 따라서 파일에 액세스 합니다.이 플래그를 사용해 작성한 파일에는,MS-DOS및16비트Windows어플리케이션에서는 액세스 할 수 없습니다.

0x00200000 (FILE_FLAG_OPEN_REPARSE_POINT)

NTFS파일 시스템의 리파스포인트 기능의 동작을 금지합니다.파일이 열리면, 리파스포인트를 제어하는 필터가 사용 가능할지에 관련되지 않고, 파일 핸들이 돌아갑니다.이 플래그는CREATE_ALWAYS(와)과 함께 지정할 수 없습니다.

0x00100000 (FILE_FLAG_OPEN_NO_RECALL)

파일이 계속해 리모트 스토리지에 머물도록(듯이) 지정합니다.이것에 의해, 파일이 로컬 스토리지에 옮겨지지 않게 합니다.

이름 파이프의 클라이언트측을 오픈하는 경우는, 시큐러티 퀄리티 오브 서비스 (Security Quality of Service) 정보를 지정할 수 있습니다.호출측 어플리케이션이 이 파라미터에0x00100000 (SECURITY_SQOS_PRESENT) (을)를 동시에 지정해 있는 경우, 이 파라미터에는, 다음의 값의 편성을 지정할 수 있습니다.

0x00000000 (SECURITY_ANONYMOUS)

익명 (Anonymous) 위장 레벨로 클라이언트를 위장합니다.

0x00010000 (SECURITY_IDENTIFICATION)

확인 (Identification) 위장 레벨로 클라이언트를 위장합니다.

0x00020000 (SECURITY_IMPERSONATION)

위장 (Impersonation) 위장 레벨로 클라이언트를 위장합니다.

0x00030000 (SECURITY_DELEGATION)

대리 (Delegation) 위장 레벨로 클라이언트를 위장합니다.

0x00040000 (SECURITY_CONTEXT_TRACKING)

시큐러티 트랙킹 모드가 동적인 것을 지정합니다.이 플래그를 지정하지 않는 경우, 시큐러티 트랙킹 모드는 정적입니다.

0x00080000 (SECURITY_EFFECTIVE_ONLY)

클라이언트의 시큐러티 문맥 가운데, 유효하게 되어 있는 부분만큼을 서버로 이용할 수 있도록 합니다.이 플래그를 지정하지 않는 경우는, 모든 부분을 이용할 수 있습니다.

hTemplate

템플릿 파일에의GENERIC_READ액세스를 가지는 핸들을 지정합니다.템플릿 파일은, 작성한 파일에 대해서, 파일 속성과 확장 속성을 제공합니다.0 (NULL) (을)를 지정할 수 있습니다.

기존의 파일을 오픈하는 경우는, 이 지정은 무시됩니다.

Windows 95/98/Me: 0 (NULL) (을)를 지정하지 않으면 안됩니다.핸들을 지정하면, 함수는 실패합니다.

반환값

함수가 성공하면 지정한 오브젝트의 핸들이 돌아갑니다.

함수가 실패하면-1 (INVALID_HANDLE_VALUE) 하지만 돌아갑니다.확장 에러 정보를 취득하려면 , GetLastError함수를 사용합니다.

dwCreateDisposition파라미터로CREATE_ALWAYS또는OPEN_ALWAYS(을)를 지정하고 있어,pszFileName파라미터로 지정한 파일이 벌써 존재하고 있는 경우에는, (함수가 성공했을 때에도) GetLastError함수는183 (ERROR_ALREADY_EXISTS) (을)를 돌려줍니다.존재하고 있지 않으면0(을)를 돌려줍니다.

해설

오브젝트의 핸들이 불필요하게 되면, CloseHandle함수로 핸들을 클로우즈 하지 않으면 안됩니다.

Windows 2000/XP/Server 2003: 리모트 컴퓨터상의 파일이나 디렉토리를 삭제를 위해서 오픈하려고 할 때,dwDesiredAccessDELETE플래그와 다른 액세스 플래그를 조합해 지정해 있고, 한편, 그 리모트 파일이나 디렉토리가FILE_SHARE_DELETE공유 모드로 오픈되어 있지 않은 경우에는, 공유 위반이 발생합니다.이러한 공유 위반을 피하려면 , 그 파일이나 디렉토리를 오픈할 때에DELETE액세스만을 지정합니다.

NTFS등, 몇개의 파일 시스템에서는, 특정의 파일이나 디렉토리에 대한 압축이나 암호화가 서포트되고 있습니다.그러한 파일 시스템으로 포맷 되고 있는 볼륨상에서는, 새로운 파일은 그 친디렉토리의 압축 또는 암호화 속성을 계승합니다.다만,CreateFile함수를 사용해 파일이나 디렉토리의 압축을 제어할 수 없습니다.

파일

플로피 디스크가 들어가 있지 않은 플로피 드라이브상, 또는CD하지만 들어가 있지 않다CD-ROM드라이브상에 파일을 작성 또는 오픈하려고 하면, 시스템은 메시지 박스를 표시하고, 유저에게 디스크나CD(을)를 삽입하도록(듯이) 요구합니다.메시지 박스가 표시되지 않게 하려면 ,SetErrorMode함수로SEM_FAILCRITICALERRORS(을)를 지정합니다.

Windows 2000/XP/Server 2003: FILE_ATTRIBUTE_HIDDEN속성 또는FILE_ATTRIBUTE_SYSTEM속성을 가지고 있는 기존의 파일을,CREATE_ALWAYSFILE_ATTRIBUTE_NORMAL(을)를 지정해 오픈하면,CreateFile함수는 실패해, GetLastError함수는5 (ERROR_ACCESS_DENIED) (을)를 돌려줍니다.이것을 피하려면 , 기존의 파일과 같은 속성을 지정합니다.

파일을 이름 변경 또는 삭제해, 그 후 곧바로 바탕으로 되돌리는 경우, 시스템은 캐쉬로부터 복원하기 위한 파일 정보를 더듬습니다.캐쉬되고 있는 정보에는, 긴 파일명/짧은 파일명 및 작성 시각이 포함되어 있습니다.

Windows 95/98/Me: 이 기술은 적용되지 않습니다.

동일한 파일을 다중에 오픈하려고 하면, 각각의 호출의 공유 모드 및 액세스 모드에 따라서는, 공유 위반을 일으킬 가능성이 있습니다.

이전의DeleteFile호출에 의해서 삭제 되려고 하고 있는 파일에 대해서CreateFile함수를 호출하면, 함수는 실패해, GetLastError함수는5 (ERROR_ACCESS_DENIED) (을)를 돌려줍니다. operating system는, 모든 핸들이 클로우즈 될 때까지 파일 삭제를 늦춥니다.

디렉토리

어플리케이션은CreateFile함수로 디렉토리를 작성할 수 없습니다.디렉토리의 작성에는CreateDirectory함수 또는CreateDirectoryEx함수를 호출합니다.CreateFile함수에 의한 디렉토리 조작에서는FILE_FLAG_BACKUP_SEMANTICS플래그를 지정할 필요가 있습니다.

FAT또는FAT32볼륨의 defrag를 실행중에CreateFile함수를 사용해 디렉토리를 오픈할 때,MAXIMUM_ALLOWED액세스권을 지정 해서는 안됩니다.지정했을 경우에는, 디렉토리에의 액세스는 거부됩니다.대신에,GENERIC_READ액세스권을 지정합니다.

물리 디스크·볼륨

CreateFile함수를 사용해 물리 디스크 또는 볼륨을 오픈할 수 있습니다.이 함수는,DeviceIoControl함수로 사용할 수 있는 핸들을 돌려줍니다.이것에 의해, 디스크의 파티션 테이블에 액세스 할 수 있습니다.파티션 테이블에의 액세스를 실시하는 경우, 부정한 기입에 의해서 내용에 액세스 할 수 없게 되는 위험성이 수반합니다.호출을 성공시키려면 , 이하의 조건이 필요합니다.

  • 호출측은 관리자 권한을 가지고 있지 않으면 안됩니다.
  • dwCreateDisposition파라미터에는OPEN_EXISTING(을)를 지정하지 않으면 안됩니다.
  • 볼륨이나 플로피 드라이브를 오픈할 경우에는,dwShare파라미터에는FILE_SHARE_WRITE플래그를 지정하지 않으면 안됩니다.

번호x의 물리 드라이브를 오픈하려면 ,pszFileName파라미터의 문자열은“\\.\PHISICALDRIVEx”의 형식에서 지정합니다.하드 디스크 번호는 제로로부터 시작됩니다.이하의 겉(표)는, 물리 디바이스 문자열의 예를 나타내고 있습니다.

문자열 의미
\\.\PHYSICALDRIVE0 최초의 물리 드라이브를 오픈합니다.
\\.\PHYSICALDRIVE2 3번째의 물리 드라이브를 오픈합니다.

드라이브 네임x의 볼륨이나 플로피 드라이브를 오픈하려면 ,pszFileName파라미터의 문자열은“\\.\x:”의 형식에서 지정합니다.이하의 겉(표)는, 드라이브 문자열의 예를 나타내고 있습니다.

문자열 의미
\\.\A: 드라이브A(플로피 드라이브)(을)를 오픈합니다.
\\.\C: 드라이브C(볼륨)(을)를 오픈합니다.

또, 볼륨을 그 볼륨명으로 지정할 수도 있습니다.

파일 시스템에 따라서는, 캐쉬를 무효화하는 옵션을 지정하지 않아도, 볼륨 핸들이 비캐쉬로 오픈될 가능성이 있습니다.모든Microsoft파일 시스템은 볼륨 핸들을 비캐쉬로 오픈되면 상정해야 합니다.파일에 대해서의 비캐쉬I/O의 제약이, 볼륨에 대해서도 적용됩니다.

파일 시스템에 따라서는, 데이터가 비캐쉬의 경우에서도, 버퍼의 얼라이먼트가 요구되지 않을 가능성도 있습니다.그러나, 볼륨 오픈시에 캐쉬를 무효화하는 옵션을 지정했을 경우에는, 볼륨상의 파일 시스템과는 관계없이, 버퍼 얼라이먼트가 강제당합니다.볼륨 핸들을 비캐쉬로 오픈해, 비캐쉬I/O의 제약을 지키는 것이, 모든 파일 시스템상에서 추천 됩니다.

테이프 드라이브

CreateFile함수를 사용해 테이프 드라이브를 오픈할 수 있습니다.번호x의 테이프 드라이브를 오픈하려면 ,pszFileName파라미터의 문자열은“\\.\TAPEx”의 형식에서 지정합니다.예를 들면, 최초의 테이프 드라이브를 오픈하려면 , 문자열“\\.\TAPE0”(을)를 지정합니다.

Windows 95/98/Me: 테이프 드라이브의 오픈은 서포트되지 않습니다.

통신 자원

CreateFile함수를 사용해 시리얼 포트COM1등이 같은 통신 자원을 오픈할 수 있습니다.통신 자원을 오픈하는 경우에는,dwCreateDispositionOPEN_EXISTING(을)를,hTemplate에는0 (NULL) (을)를 각각 지정하지 않으면 안됩니다.독해 액세스, 기입 액세스, 및 읽어내/기입 액세스를 지정할 수 있습니다.또, 오버랩I/O의 목적으로 핸들을 오픈할 수 있습니다.

콘솔

CreateFile함수를 사용해 콘솔 입력 (CONIN$) (을)를 오픈할 수 있습니다.또, 핸들의 계승 또는 복제에 의해서, 프로세스가 오픈된 콘솔 입력의 핸들을 가지고 있는 경우는, 액티브 스크린 버퍼 (CONOUT$) 의 핸들을 작성할 수 있습니다.호출 프로세스는, 계승된 콘솔 혹은AllocConsole함수에 의해 할당할 수 있었던 콘솔에 속하지 않으면 안됩니다.콘솔 핸들 취득을 위한 파라미터는 이하와 같이 됩니다.

pszFileName

콘솔 입력을 지정하는 경우에는CONIN$값을, 콘솔 출력을 지정하는 경우에는CONOUT$값을 사용합니다.

CONIN$값을 지정하면,SetStdHandle함수로 표준 입력 핸들의 리디렉션을 실시하고 있는 경우여도, 콘솔 입력 버퍼의 핸들이 취득됩니다.표준 입력의 핸들을 취득하려면SetStdHandle함수를 사용합니다.

CONOUT$값을 지정하면,SetStdHandle함수로 표준 출력 핸들의 리디렉션을 실시하고 있는 경우여도, 콘솔 출력 버퍼의 핸들이 취득됩니다.표준 출력의 핸들을 취득하려면SetStdHandle함수를 사용합니다.

dwAccess

0xC0000000 (GENERIC_READ|GENERIC_WRITE) (을)를 지정하는 것이 바람직합니다.어느 쪽인지 한편만으로는 액세스가 제한될 가능성이 있습니다.

dwShare

CONIN$(을)를 오픈하는 경우에는,0x00000001 (FILE_SHARE_READ) (을)를 지정하지 않으면 안됩니다.CONOUT$(을)를 오픈하는 경우에는,0x00000002 (FILE_SHARE_WRITE) (을)를 지정하지 않으면 안됩니다.

호출 프로세스가 콘솔을 계승하는 경우, 또는, child process가 콘솔에 액세스 할 수 있도록(듯이) 하는 경우에는,FILE_SHARE_READ|FILE_SHARE_WRITE(을)를 지정하지 않으면 안됩니다.

psa

콘솔을 계승시키는 경우에는, SECURITY_ATTRIBUTES구조체의bInheritHandle멤버에1 (TRUE) (을)를 지정합니다.

dwCreateDisposition

3 (OPEN_EXISTING) (을)를 지정하지 않으면 안됩니다.

dwFlagsAndAttributes

무시됩니다.

hTemplate

무시됩니다.

pszFileNameCON(을)를,dwAccessGENERIC_READ(을)를 지정하면, 입력용에 콘솔 핸들을 오픈합니다.pszFileNameCON(을)를,dwAccessGENERIC_WRITE(을)를 지정하면, 출력용으로 콘솔 핸들을 오픈합니다.pszFileNameCON(을)를,dwAccessGENERIC_READ|GENERIC_WRITE(을)를 지정하면, 함수는 실패합니다.

메일 슬롯

CreateFile함수를 사용해 메일 슬롯의 클라이언트 엔드를 오픈할 때에, 메일 슬롯 서버가CreateMailSlot함수로 로컬 메일 슬롯을 작성하기 전에 메일 슬롯 클라이언트가 그 로컬 메일 슬롯을 오픈하려고 했을 경우, 함수는-1 (INVALID_HANDLE_VALUE) (을)를 돌려줍니다.

파이프

CreateFile함수를 사용해 이름 다해 파이프의 클라이언트 엔드를 오픈할 때에, 함수는 리스닝 상태에 있는 이름 다해 파이프의 모든 인스턴스를 사용합니다.오픈하고 있는 프로세스는, 요구와 같은 수만큼 핸들을 복제할 수 있습니다만, 일단 오픈되면, 다른 클라이언트가 그 이름 다해 파이프의 인스턴스를 오픈할 수 없습니다.파이프가 오픈될 때 지정된 액세스는,CreateNamedPipe함수의dwOpenMode파라미터로 지정되는 액세스와 호환성이 있습니다.

대응 정보

Windows 95 이후 / Windows NT 3.1 이후

반응형

'API 관련 > Win32 API 함수' 카테고리의 다른 글

CreateFont(A)  (0) 2007.11.08
CreateFileMapping(A)  (0) 2007.11.08
CreateEllipticRgn  (0) 2007.11.08
CreateDC(A)  (0) 2007.11.08
CreateCompatibleDC  (0) 2007.11.08
Comments