Definindo um nome de dispositivo MS-DOS

Um nome de dispositivo MS-DOS é uma junção que aponta para o caminho de um dispositivo MS-DOS. Essas junções compõem o namespace do dispositivo MS-DOS. Chame as funções DefineDosDevice e SetVolumeMountPoint para criar e modificar essas junções. DeleteVolumeMountPoint exclui uma junção criada por SetVolumeMountPoint e DefineDosDevice exclui junções criadas por ele.

Depois que um nome de dispositivo MS-DOS é definido, ele permanece visível para todos os processos.

  • Todos os dispositivos MS-DOS são identificados pelo Windows por meio de uma ID de autenticação. Uma ID de autenticação é o LUID (identificador local exclusivo) associado a cada sessão de logon quando criada.
  • A visibilidade de um nome de dispositivo MS-DOS é categorizada como global ou local e é definida como tal por sua inclusão nos namespaces Global MS-DOS Device e Local MS-DOS Device. O conteúdo dos dispositivos MS-DOS no namespace Global pode ser acessado por todos os usuários, e o conteúdo dos dispositivos MS-DOS no namespace Local só pode ser acessado pelo usuário cujo token de acesso contém a AuthenticationID associada a esse namespace de dispositivo MS-DOS local.

Vários namespaces locais do dispositivo MS-DOS e apenas um namespace global do dispositivo MS-DOS podem existir ao mesmo tempo e em um computador.

Observe que somente os processos em execução no contexto localSystem podem chamar DefineDosDevice para criar um dispositivo MS-DOS no namespace global do dispositivo MS-DOS. Além disso, o namespace do dispositivo MS-DOS local correspondente a uma AuthenticationID específica é excluído quando a última referência a essa AuthenticationID é removida.

Quando seu código consulta um nome de dispositivo MS-DOS existente chamando QueryDosDevice, ele primeiro pesquisa o namespace local do dispositivo MS-DOS. Se ele não for encontrado lá, a função pesquisará o namespace global do dispositivo MS-DOS. Quando o código consulta todos os nomes de dispositivo MS-DOS existentes por meio dessa função, a lista de nomes retornados depende se ela está em execução no contexto LocalSystem. Nesse caso, somente os nomes de dispositivo MS-DOS incluídos no namespace global do dispositivo MS-DOS serão retornados. Caso contrário, uma concatenação dos nomes de dispositivo nos namespaces global e local do dispositivo MS-DOS será retornada. Se houver um nome de dispositivo em ambos os namespaces, QueryDosDevice retornará a entrada no namespace Do dispositivo MS-DOS local. Isso também se aplica à lista de todos os nomes de dispositivo MS-DOS retornados por GetLogicalDrives e GetLogicalDriveStrings.

Observe que o seguinte cenário pode ocorrer:

  1. O usuário A, que não está em execução no contexto localSystem, cria um nome de dispositivo no namespace do dispositivo MS-DOS local correspondente e esse nome de dispositivo não existe no namespace global do dispositivo MS-DOS.
  2. O usuário B, que está em execução no contexto localSystem, cria o mesmo nome de dispositivo no namespace Global do dispositivo MS-DOS.

Nesse cenário, o Usuário A não terá acesso ao nome do dispositivo no namespace global do dispositivo MS-DOS até que ele remova ou renomeie o nome do dispositivo em seu namespace de Dispositivo MS-DOS Local. Para reduzir a probabilidade desse cenário ocorrer, as letras da unidade MS-DOS devem ser alocadas no namespace global do dispositivo MS-DOS começando com C: e terminando com Z:. Essa sequência deve ser invertida para a alocação de letras da unidade MS-DOS no namespace local do dispositivo MS-DOS.

Se você não estiver executando dentro do contexto localSystem, DefineDosDevice não permitirá que você defina um nome de dispositivo no namespace do dispositivo MS-DOS local se esse nome de dispositivo já existir em seus namespaces de dispositivo MS-DOS local ou global. Chame QueryDosDevice antes de chamar DefineDosDevice para determinar se o nome do dispositivo que você pretende definir existe nos namespaces do dispositivo MS-DOS.

Nomenclatura de arquivos, caminhos e namespaces