Controlando o acesso ao namespace do dispositivo
No WDM (Modelo de Driver do Windows), cada objeto de dispositivo tem um namespace associado. Os nomes no namespace do dispositivo são caminhos que começam com o nome do dispositivo. Para um dispositivo chamado "\Device\DeviceName", seu namespace consiste em qualquer nome do formulário "\Device\DeviceName\FileName". (Para um sistema de arquivos, FileName é um nome real de um arquivo no sistema de arquivos.)
Um driver WDM recebe solicitações abertas para todos os nomes no namespace do dispositivo. O driver trata uma solicitação aberta para "\Device\DeviceName" como uma abertura do próprio objeto do dispositivo. Se o driver implementar suporte para solicitações abertas no namespace do dispositivo, ele tratará uma solicitação aberta para "\Device\DeviceName\FileName" como uma abertura de um "arquivo" no namespace do objeto do dispositivo (em que a noção de "arquivo" para o dispositivo é determinada pelo driver).
A maioria dos drivers não implementa suporte para operações abertas no namespace do dispositivo, mas todos os drivers devem fornecer verificações de segurança para impedir o acesso não autorizado ao namespace do dispositivo. Por padrão, as verificações de segurança para solicitações de abertura de arquivo no namespace do dispositivo (por exemplo, "\Device\DeviceName\FileName") são deixadas inteiramente para o driver — a ACL do objeto do dispositivo não é verificada pelo sistema operacional.
Se a característica FILE_DEVICE_SECURE_OPEN de um objeto de dispositivo for definida, o sistema aplicará o descritor de segurança do objeto do dispositivo a todas as solicitações de abertura de arquivo no namespace do dispositivo. Os drivers podem definir FILE_DEVICE_SECURE_OPEN quando criam o objeto de dispositivo com IoCreateDevice ou IoCreateDeviceSecure. Para drivers WDM, FILE_DEVICE_SECURE_OPEN também pode ser definido no registro. Ele também pode ser definido no Registro para objetos de dispositivo de drivers não WDM criados por IoCreateDeviceSecure. Para obter mais informações sobre como definir propriedades de objeto do dispositivo, como as características do dispositivo, no registro, consulte Configurando propriedades do objeto do dispositivo no Registro. Para obter mais informações sobre características do dispositivo, consulte Especificando características do dispositivo.
Os drivers para dispositivos que não dão suporte a namespaces devem usar um dos dois métodos para garantir que as solicitações de abertura de arquivo no namespace do dispositivo sejam tratadas corretamente:
Os objetos de dispositivo do driver têm o conjunto de características do dispositivo FILE_DEVICE_SECURE_OPEN. Em seguida, o driver pode tratar qualquer solicitação aberta no namespace do dispositivo como uma solicitação aberta para o objeto do dispositivo.
O driver pode falhar em qualquer solicitação de IRP_MJ_CREATE que especifique um parâmetro IrpSp-FileObject-FileName>> cujo comprimento não é zero. Nesse caso, as solicitações abertas para o dispositivo estão sujeitas à ACL do sistema marcar, enquanto todas as solicitações de abertura de arquivo no namespace do dispositivo são reprovadas pelo driver. (Os drivers que dão suporte a aberturas exclusivas devem usar essa opção.)
Os drivers para dispositivos que dão suporte a namespaces também podem usar dois métodos para proteger solicitações de abertura de arquivo no namespace do dispositivo:
Os objetos de dispositivo do driver têm o conjunto de características do dispositivo FILE_DEVICE_SECURE_OPEN. Isso garante que as configurações de segurança do dispositivo se apliquem uniformemente ao namespace do dispositivo. (O driver é responsável por implementar o suporte para o namespace em sua função de retorno de chamada DRIVER_DISPATCH .)
O driver verifica as ACLs para o nome do arquivo em sua rotina DispatchCreate . (Mesmo nesse caso, o driver deve definir a característica FILE_DEVICE_SECURE_OPEN, a menos que seja aberto no namespace do dispositivo pode ter configurações de segurança mais fracas do que o objeto do dispositivo.)
A característica FILE_DEVICE_SECURE_OPEN é verificada na parte superior da pilha, portanto, os objetos de dispositivo de filtro devem copiar o membro Características do objeto de dispositivo mais baixo após a anexação.