Jumping Bytes and Hopping Bits
the church of tech
Menu

c++ createfile 예제 August 2, 2019

CreateFile 기능을 사용하여 물리적 디스크 드라이브 또는 볼륨을 열 수 있으며 DeviceIoControl 기능과 함께 사용할 수 있는 DASD(직접 액세스 저장 장치) 핸들을 반환합니다. 이렇게 하면 파티션 테이블과 같은 디스크 메타데이터와 같이 디스크 또는 볼륨에 직접 액세스할 수 있습니다. 그러나 이러한 유형의 액세스는 이 메커니즘을 사용하는 디스크에 잘못 쓰기하면 운영 체제에서 해당 콘텐츠에 액세스할 수 없게 될 수 있으므로 디스크 드라이브 또는 볼륨을 잠재적인 데이터 손실에 노출시됩니다. 데이터 무결성을 보장하려면 DeviceIoControl 및 다른 API가 파일 시스템 핸들이 아닌 직접 액세스 핸들에서 다르게 작동하도록 해야 합니다. 위에서 설명한 것처럼 dwDesiredAccess에 대해 0을 지정하면 응용 프로그램이 실제로 장치에 액세스하지 않고 장치 특성을 쿼리할 수 있습니다. 예를 들어 응용 프로그램이 플로피 디스크 드라이브의 크기와 드라이브에 플로피없이 지원하는 형식을 확인하려는 경우 이러한 유형의 쿼리가 유용합니다. 팁: 이전 WriteFile 예제에서 만든 파일을 사용하여 이 예제를 테스트할 수 있습니다. 실제 드라이브를 여는 예는 DeviceIoControl 호출을 참조하십시오. 볼륨 또는 이동식 미디어 드라이브(예: 플로피 디스크 드라이브 또는 플래시 메모리 썸 드라이브)를 여는 경우 lpFileName 문자열은 다음과 같은 양식이어야 합니다. X:”.

드라이브의 루트 디렉토리를 나타내는 후행 백슬래시()를 사용하지 마십시오. 다음 표에서는 드라이브 문자열의 몇 가지 예를 보여 주실 수 있습니다. bTest값이 False로 나오고 파일이 만들어지지 않습니다. 가능하면 CreateFile을 사용하여 파일을 만들고 내가 잘못하고있는 것을 알려주는 예제를 보여주십시오. Windows NT: CreateFile의 와이드(W) 버전을 호출하고 경로에 “\”를 미리 보류하여 MAX_PATH 문자보다 긴 경로를 사용할 수 있습니다. “\”는 함수에 경로 구문 분석 해제를 알려줍니다. 이렇게 하면 거의 32,000개의 유니코드 문자 길이의 경로를 사용할 수 있습니다. 그러나 경로의 각 구성 요소는 MAX_PATH 문자보다 길수 없습니다. 이 기술을 사용하여 정규화된 경로를 사용해야 합니다. 이는 UNC 이름과도 함께 작동합니다.

“\”는 경로의 일부로 무시됩니다. 예를 들어 “\C:myworldprivate”은 “C:myworldprivate”으로 보이며 “\\unctom_1hotstuffcoolapps”는 “\tom_1hotstuffcoolapps”로 볼 수 있습니다. FILE_FLAG_NO_BUFFERING이 FILE_FLAG_OVERLAPPED와 결합되면 I/O가 메모리 관리자의 동기 작업에 의존하지 않기 때문에 플래그는 최대 비동기 성능을 제공합니다. 그러나 일부 I/O 작업은 데이터가 캐시에 보관되지 않기 때문에 더 많은 시간이 소요됩니다. 또한 파일 메타데이터는 여전히 캐시될 수 있습니다(예: 빈 파일을 만들 때). 메타데이터가 디스크로 플러시되도록 하려면 FlushFileBuffers 기능을 사용합니다. 다음 예제에서는 CreateFile을 사용하여 새 파일을 만들고 작성하기 위해 파일을 열고 WriteFile을 열어 파일에 동기적으로 간단한 문자열을 작성합니다. /* MertG */ /* 참조에서 제공하는 샘플 코드: */ /* 이 페이지, http://stackoverflow.com/questions/4288031/createfile-in-kernel32-dll-does-not-allow-me-to-open-a-physical-disk */ //사용 지시문 필요: System.IO 사용; System.Runtime.InteropServices를 사용 하 여; 사용 마이크로 소프트.Win32.SafeHandles; CreateFile 함수 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx 이 핸들에서 후속 I/O 작업이 완료되면 OVERLAPPED 구조에 지정된 이벤트가 신호된 상태로 설정됩니다.

. lpSecurityAttributes 매개 변수는 무시 되며 NULL로 설정 해야 합니다. 이 매개 변수에는 파일 또는 장치 캐싱 동작, 액세스 모드 및 기타 특수 목적 플래그를 제어하기 위한 플래그(FILE_FLAG_)의 조합도 포함될 수 있습니다. 이러한 값은 모든 FILE_ATTRIBUTE_ 값과 결합됩니다. 새 암호화된 파일을 열 때 파일은 상위 디렉터리에서 임의 액세스 제어 목록을 상속합니다.

Categories: Uncategorized