MS-DOS 디바이스 이름 정의
MS-DOS 디바이스 이름은 MS-DOS 디바이스의 경로를 가리키는 연결 지점입니다. 이러한 연결 지점이 MS-DOS 디바이스 네임스페이스를 구성합니다. DefineDosDevice 및 SetVolumeMountPoint 함수를 호출하여 이러한 연결 지점을 만들고 수정합니다. DeleteVolumeMountPoint는 SetVolumeMountPoint에서 만든 연결 지점을 삭제하고 DefineDosDevice는 자신이 연결 지점을 삭제합니다.
MS-DOS 디바이스 이름이 정의되면 모든 프로세스에서 계속 표시됩니다.
- 모든 MS-DOS 디바이스는 인증 ID를 통해 Windows에서 식별됩니다. 인증 ID는 만들 때 각 로그온 세션과 연결된 LUID(로컬 고유 식별자)입니다.
- MS-DOS 디바이스 이름의 표시 유형은 전역 또는 로컬로 분류되며 전역 MS-DOS 디바이스 및 로컬 MS-DOS 디바이스 네임스페이스에 포함하여 정의됩니다. 전역 네임스페이스에 있는 MS-DOS 디바이스의 콘텐츠는 모든 사용자가 액세스할 수 있으며 로컬 네임스페이스에 있는 MS-DOS 디바이스의 콘텐츠는 해당 로컬 MS-DOS 디바이스 네임스페이스와 연결된 AuthenticationID를 포함하는 액세스 토큰의 사용자만 액세스할 수 있습니다.
여러 로컬 MS-DOS 디바이스 네임스페이스와 하나의 전역 MS-DOS 디바이스 네임스페이스만 한 번에 한 컴퓨터에 존재할 수 있습니다.
LocalSystem 컨텍스트에서 실행되는 프로세스만 DefineDosDevice를 호출하여 전역 MS-DOS 디바이스 네임스페이스에 MS-DOS 디바이스를 만들 수 있습니다. 또한 특정 AuthenticationID에 해당하는 로컬 MS-DOS 디바이스 네임스페이스는 해당 AuthenticationID에 대한 마지막 참조가 제거될 때 삭제됩니다.
코드에서 QueryDosDevice를 호출하여 기존 MS-DOS 디바이스 이름을 쿼리하는 경우 먼저 로컬 MS-DOS 디바이스 네임스페이스를 검색합니다. 찾을 수 없는 경우 함수는 전역 MS-DOS 디바이스 네임스페이스를 검색합니다. 코드가 이 함수를 통해 기존의 모든 MS-DOS 디바이스 이름을 쿼리하는 경우 반환되는 이름 목록은 LocalSystem 컨텍스트에서 실행 중인지 여부에 따라 달라집니다. 실행 중인 경우에는 전역 MS-DOS 디바이스 네임스페이스에 포함된 MS-DOS 디바이스 이름만 반환됩니다. 실행 중이 아닌 경우에는 전역 및 로컬 MS-DOS 디바이스 네임스페이스의 디바이스 이름 연결이 반환됩니다. 두 네임스페이스에 디바이스 이름이 있으면 QueryDosDevice가 로컬 MS-DOS 디바이스 네임스페이스의 항목을 반환합니다. 이는 GetLogicalDrives 및 GetLogicalDriveStrings에서 반환된 모든 MS-DOS 디바이스 이름 목록에도 적용됩니다.
다음과 같은 시나리오가 발생할 수 있습니다.
- LocalSystem 컨텍스트 내에서 실행되지 않는 사용자 A는 해당 로컬 MS-DOS 디바이스 네임스페이스에 디바이스 이름을 만들며, 해당 디바이스 이름은 전역 MS-DOS 디바이스 네임스페이스에 존재하지 않습니다.
- LocalSystem 컨텍스트 내에서 실행되는 사용자 B는 전역 MS-DOS 디바이스 네임스페이스에 동일한 디바이스 이름을 만듭니다.
이 시나리오에서 사용자 A는 로컬 MS-DOS 디바이스 네임스페이스에서 디바이스 이름을 제거하거나 이름을 바꿀 때까지 전역 MS-DOS 디바이스 네임스페이스의 디바이스 이름에 액세스할 수 없습니다. 이 시나리오가 발생할 가능성을 줄이려면 MS-DOS 드라이브 문자를 C:로 시작하고 Z:로 끝나는 전역 MS-DOS 디바이스 네임스페이스에 할당해야 합니다. 로컬 MS-DOS 디바이스 네임스페이스에서는 이 순서를 반대로 하여 MS-DOS 드라이브 문자 할당합니다.
LocalSystem 컨텍스트 내에서 실행되지 않는 경우 DefineDosDevice는 로컬 또는 전역 MS-DOS 디바이스 네임스페이스에 디바이스 이름이 이미 있으면 로컬 MS-DOS 디바이스 네임스페이스에서 해당 디바이스 이름을 정의할 수 없습니다. DefineDosDevice를 호출하기 전에 QueryDosDevice를 호출하여 정의하려는 디바이스 이름이 MS-DOS 디바이스 네임스페이스에 있는지 여부를 확인합니다.
관련 항목