다음을 통해 공유


mmioOpen 함수(mmiscapi.h)

mmioOpen 함수는 버퍼링되지 않거나 버퍼링된 I/O에 대한 파일을 엽니다. 파일을 만듭니다. 파일을 삭제합니다. 또는 파일이 있는지 확인합니다. 파일은 표준 파일, 메모리 파일 또는 사용자 지정 스토리지 시스템의 요소일 수 있습니다. mmioOpen에서 반환된 핸들은 표준 파일 핸들이 아닙니다. 멀티미디어 파일 I/O 함수 이외의 파일 I/O 함수에는 사용하지 마세요.

참고 이 함수는 더 이상 사용되지 않습니다. 애플리케이션은 CreateFile 을 호출하여 파일을 만들거나 열어야 합니다.
 

구문

HMMIO mmioOpen(
  LPSTR      pszFileName,
  LPMMIOINFO pmmioinfo,
  DWORD      fdwOpen
);

매개 변수

pszFileName

파일 이름을 포함하는 버퍼에 대한 포인터입니다. 파일을 열도록 I/O 프로시저가 지정되지 않은 경우 파일 이름은 다음과 같이 파일을 여는 방법을 결정합니다.

  • 파일 이름에 더하기 기호(+)가 없으면 표준 파일의 이름(즉, 형식이 HMMIO가 아닌 파일)으로 간주됩니다.
  • 파일 이름이 EXAMPLE 형식이면 입니다. EXT+ABC 확장명은 파일에서 I/O를 수행하기 위해 호출되는 설치된 I/O 프로시저를 식별하는 것으로 간주됩니다. 자세한 내용은 mmioInstallIOProc을 참조하세요.
  • 파일 이름이 NULL이고 I/O 프로시저가 지정되지 않은 경우 MMIOINFO 구조체의 adwInfo 멤버는 현재 열려 있는 파일의 표준(비 HMMIO) 파일 핸들로 간주됩니다.
종결 NULL 문자를 포함하여 파일 이름은 128자 이상이어야 합니다.

메모리 파일을 열 때 szFilenameNULL로 설정합니다.

pmmioinfo

mmioOpen에서 사용하는 추가 매개 변수를 포함하는 MMIOINFO 구조체에 대한 포인터입니다. 메모리 파일을 열거나 버퍼링된 I/O에 대한 버퍼 크기를 지정하거나 제거된 I/O 프로시저를 지정하여 파일을 열지 않는 한 이 매개 변수는 NULL이어야 합니다. 이 매개 변수가 NULL이 아닌 경우 참조하는 MMIOINFO 구조체의 사용되지 않는 모든 멤버를 예약 멤버를 포함하여 0으로 설정해야 합니다.

fdwOpen

열린 작업에 대한 플래그입니다. MMIO_READ, MMIO_WRITE 및 MMIO_READWRITE 플래그는 상호 배타적입니다. 하나만 지정해야 합니다. MMIO_COMPAT, MMIO_EXCLUSIVE, MMIO_DENYWRITE, MMIO_DENYREAD 및 MMIO_DENYNONE 플래그는 파일 공유 플래그입니다. 다음 값이 정의됩니다.

의미
MMIO_ALLOCBUF 버퍼링된 I/O에 대한 파일을 엽니다. 기본 버퍼 크기(8K, MMIO_DEFAULTBUFFER 정의됨)보다 크거나 작은 버퍼를 할당하려면 MMIOINFO 구조체의 cchBuffer 멤버를 원하는 버퍼 크기로 설정합니다. cchBuffer가 0이면 기본 버퍼 크기가 사용됩니다. 고유한 I/O 버퍼를 제공하는 경우 이 플래그를 사용하면 안 됩니다.
MMIO_COMPAT 호환성 모드로 파일을 열어 지정된 컴퓨터의 모든 프로세스가 파일을 횟수만큼 열 수 있도록 합니다. 다른 공유 모드를 사용하여 파일을 연 경우 mmioOpen이 실패합니다.
MMIO_CREATE 새 파일을 만듭니다. 파일이 이미 있는 경우 길이가 0으로 잘립니다. 메모리 파일의 경우 이 플래그는 파일의 끝이 처음에 버퍼의 시작 부분에 있음을 나타냅니다.
MMIO_DELETE 파일을 삭제합니다. 이 플래그를 지정하면 szFilenameNULL이 아니어야 합니다. 파일이 성공적으로 삭제된 경우 반환 값은 TRUE ( HMMIO로 캐스팅)이거나 그렇지 않으면 FALSE 입니다. 삭제된 파일에 대해 mmioClose 함수를 호출하지 마세요. 이 플래그를 지정하면 파일을 여는 다른 모든 플래그는 무시됩니다.
MMIO_DENYNONE 파일에 대한 다른 프로세스 읽기 또는 쓰기 액세스를 거부하지 않고 파일을 엽니다. 파일이 다른 프로세스에 의해 호환 모드로 열려 있으면 mmioOpen이 실패합니다.
MMIO_DENYREAD 파일을 열고 다른 프로세스에서 파일에 대한 읽기 권한을 거부합니다. 파일이 호환 모드로 열려 있거나 다른 프로세스의 읽기 액세스를 위해 열려 있는 경우 mmioOpen이 실패합니다.
MMIO_DENYWRITE 파일을 열고 파일에 대한 다른 프로세스 쓰기 액세스를 거부합니다. 파일이 호환 모드로 열려 있거나 다른 프로세스의 쓰기 액세스를 위해 열려 있는 경우 mmioOpen이 실패합니다.
MMIO_EXCLUSIVE 파일을 열고 파일에 대한 읽기 및 쓰기 권한을 다른 프로세스에서 거부합니다. 파일이 읽기 또는 쓰기 액세스를 위해 다른 모드로 열려 있는 경우 현재 프로세스에서도 mmioOpen 이 실패합니다.
MMIO_EXIST 지정된 파일이 있는지 여부를 확인하고 szFilename에 지정된 경로에서 정규화된 파일 이름을 만듭니다. 정규화에 성공하고 파일이 있는 경우 반환 값은 TRUE ( HMMIO로 캐스팅)이며, 그렇지 않으면 FALSE 입니다. 파일이 열리지 않고 함수가 유효한 멀티미디어 파일 I/O 파일 핸들을 반환하지 않으므로 파일을 닫으려고 시도하지 않습니다.
참고 애플리케이션은 대신 GetFileAttributes 또는 GetFileAttributesEx를 호출해야 합니다.
 
MMIO_GETTEMP 필요에 따라 szFilename 에 전달된 매개 변수를 사용하여 임시 파일 이름을 만듭니다. 예를 들어 "C:F"를 지정하여 문자 "F"로 시작하여 C 드라이브에 있는 임시 파일을 만들 수 있습니다. 결과 파일 이름은 szFilename이 가리키는 버퍼에 복사됩니다. 버퍼는 128자 이상을 보유할 수 있을 만큼 커야 합니다.

임시 파일 이름을 성공적으로 만든 경우 반환 값은 MMSYSERR_NOERROR ( HMMIO로 캐스팅)됩니다. 그렇지 않으면 반환 값이 MMIOERR_FILENOTFOUND . 파일이 열리지 않고 함수가 유효한 멀티미디어 파일 I/O 파일 핸들을 반환하지 않으므로 파일을 닫으려고 시도하지 않습니다. 이 플래그는 다른 모든 플래그를 재정의합니다.

참고 대신 애플리케이션에서 GetTempFileName 을 호출해야 합니다.
 
MMIO_PARSE szFilename에 지정된 경로에서 정규화된 파일 이름을 만듭니다. 정규화된 이름은 szFilename이 가리키는 버퍼에 복사됩니다. 버퍼는 128자 이상을 보유할 수 있을 만큼 커야 합니다.

함수가 성공하면 반환 값은 TRUE ( HMMIO로 캐스팅)입니다. 그렇지 않으면 반환 값이 FALSE입니다. 파일이 열리지 않고 함수가 유효한 멀티미디어 파일 I/O 파일 핸들을 반환하지 않으므로 파일을 닫으려고 시도하지 않습니다. 이 플래그를 지정하면 파일을 여는 모든 플래그가 무시됩니다.

참고 애플리케이션은 대신 GetFullPathName 을 호출해야 합니다.
 
MMIO_READ 읽기 전용으로 파일을 엽니다. MMIO_WRITE 및 MMIO_READWRITE 지정되지 않은 경우 기본값입니다.
MMIO_READWRITE 읽기 및 쓰기용 파일을 엽니다.
MMIO_WRITE 쓰려는 경우에만 파일을 엽니다.

반환 값

열린 파일의 핸들을 반환합니다. 파일을 열 수 없는 경우 반환 값은 NULL입니다. lpmmioinfoNULL이 아닌 경우 MMIOINFO 구조체의 wErrorRet 멤버에는 다음 오류 값 중 하나가 포함됩니다.

반환 코드 설명
MMIOERR_ACCESSDENIED
파일이 보호되며 열 수 없습니다.
MMIOERR_INVALIDFILE
또 다른 오류 조건이 발생했습니다. 이는 오픈 파일 오류의 기본 오류입니다.
MMIOERR_NETWORKERROR
네트워크에서 원격 파일 열기 요청에 응답하지 않습니다.
MMIOERR_PATHNOTFOUND
디렉터리 사양이 잘못되었습니다.
MMIOERR_SHARINGVIOLATION
파일이 다른 애플리케이션에서 사용되고 있으며 사용할 수 없습니다.
MMIOERR_TOOMANYOPENFILES
동시에 열려 있는 파일 수는 최대 수준입니다. 시스템에서 사용 가능한 파일 핸들이 부족합니다.

설명

lpmmioinfoMMIOINFO 구조를 가리키는 경우 다음과 같이 구조체의 멤버를 초기화합니다. 예약 멤버를 포함하여 사용되지 않는 모든 멤버를 0으로 설정해야 합니다.

  • 설치된 I/O 프로시저를 사용하여 파일을 열도록 요청하려면 fccIOProc 을 I/O 프로시저의 4자 코드로 설정하고 pIOProcNULL로 설정합니다.
  • 제거된 I/O 프로시저를 사용하여 파일을 열도록 요청하려면 I/O 프로시저를 가리키도록 IOProc 을 설정하고 fccIOProcNULL로 설정합니다.
  • mmioOpenszFilename에 포함된 파일 이름을 기반으로 파일을 여는 데 사용할 I/O 프로시저를 결정하도록 요청하려면 fccIOProcpIOProcNULL로 설정합니다. MMIOINFO 구조체가 지정되지 않은 경우 기본 동작입니다.
  • 내부적으로 할당되고 관리되는 버퍼를 사용하여 메모리 파일을 열려면 pchBufferNULL로, fccIOProc 을 FOURCC_MEM, cchBuffer 를 버퍼의 초기 크기로 설정하고, adwInfo 를 버퍼의 증분 확장 크기로 설정합니다. 이 메모리 파일은 필요할 때 adwInfo 에 지정된 바이트 수만큼 자동으로 확장됩니다. 처음에 파일의 끝을 버퍼의 시작 부분으로 설정하려면 dwOpenFlags 매개 변수에 대한 MMIO_CREATE 플래그를 지정합니다.
  • 애플리케이션 제공 버퍼를 사용하여 메모리 파일을 열려면 pchBuffer 를 메모리 버퍼를 가리키도록 설정하고, fccIOProc 을 FOURCC_MEM, cchBuffer 를 버퍼의 크기로 설정하고, adwInfo 를 버퍼의 증분 확장 크기로 설정합니다. adwInfo의 확장 크기는 pchBufferGlobalAllocGlobalLock 함수를 호출하여 가져온 포인터인 경우에만 0이 아니어야 합니다. 이 경우 GlobalReAlloc 함수가 호출되어 버퍼를 확장합니다. 즉, pchBuffer 가 로컬 또는 전역 배열 또는 로컬 힙의 메모리 블록을 가리키는 경우 adwInfo 는 0이어야 합니다. 처음에 파일의 끝을 버퍼의 시작 부분으로 설정하려면 dwOpenFlags 매개 변수에 대한 MMIO_CREATE 플래그를 지정합니다. 그렇지 않으면 전체 메모리 블록이 읽을 수 있는 것으로 간주됩니다.
  • 멀티미디어 파일 I/O 서비스와 함께 현재 열려 있는 표준 파일 핸들(즉, HMMIO 형식이 없는 파일 핸들)을 사용하려면 fccIOProc 을 FOURCC_DOS, pchBufferNULL로 설정하고, adwInfo 를 표준 파일 핸들로 설정합니다. 파일 내의 오프셋은 파일의 시작 부분을 기준으로 하며 mmioOpen 이 호출될 때 표준 파일의 위치와 관련이 없습니다. 초기 멀티미디어 파일 I/O 오프셋은 mmioOpen 이 호출될 때 표준 파일의 오프셋과 동일합니다. 표준 파일 핸들을 닫지 않고 멀티미디어 파일 I/O 파일 핸들을 닫려면 MMIO_FHOPEN 플래그를 mmioClose에 전달합니다.
mmioOpen을 사용하여 열린 파일을 닫려면 mmioClose를 호출해야 합니다. 열려 있는 파일은 애플리케이션이 종료되면 자동으로 닫혀 있지 않습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 mmiscapi.h(Mmiscapi.h, Windows.h 포함)
라이브러리 Winmm.lib
DLL Winmm.dll