Especificando o acesso exclusivo a objetos de dispositivo

Se o acesso exclusivo a um dispositivo estiver habilitado, apenas um identificador para o dispositivo poderá ser aberto por vez. Para que o gerenciador de E/S imponha o acesso exclusivo ao dispositivo, a propriedade exclusiva deve ser definida para o objeto de dispositivo nomeado na pilha do dispositivo.

Para uma pilha de dispositivos WDM que tem um PDO e um FDO, a propriedade exclusiva pode ser definida somente pelo arquivo INF, usando uma diretiva INF AddReg. O PDO é o objeto nomeado na pilha, mas o driver de barramento (não o driver de função em si) cria o PDO, em nome do driver de função. A única maneira de direcionar o driver de barramento para definir o sinalizador exclusivo para o PDO é pelos arquivos INF da classe ou do dispositivo. (A chamada para a rotina IoCreateDevice cria o FDO; definir o sinalizador exclusivo para o FDO não tem efeito.)

Os drivers cujos objetos de dispositivo não estão empilhados, como drivers e dispositivos não WDM que operam no modo bruto, podem usar a rotina IoCreateDeviceSecure para definir a propriedade exclusiva para seu objeto de dispositivo nomeado.

O gerenciador de E/S impõe a exclusividade por nome em objetos de dispositivo nomeados, independentemente do nome à direita. Por exemplo, suponha que o objeto de dispositivo tenha o nome "\Device\DeviceName". Em seguida, o gerenciador de E/S impõe a exclusividade de uma solicitação para abrir "\Device\DeviceName\Filename1" seguido por "\Device\DeviceName\Filename2". Se dois objetos na pilha de dispositivos forem nomeados (o que não é recomendado), o gerenciador de E/S permitirá que um único identificador seja aberto para cada objeto. Nessa situação, os drivers devem impor a exclusividade dentro de suas DRIVER_DISPATCH funções de retorno de chamada. O gerenciador de E/S também não impõe exclusividade para aberturas em relação a outro identificador de arquivo. Para obter mais informações sobre solicitações de abertura de arquivo no namespace do dispositivo, consulte Controlando o acesso ao namespace do dispositivo.