Compartilhar via


Criando um objeto device

Um driver monolítico deve criar um objeto de dispositivo para cada dispositivo físico, lógico ou virtual para o qual ele lida com solicitações de E/S. Um driver que não cria um objeto de dispositivo para um dispositivo não recebe nenhum IRPs para o dispositivo.

Em algumas áreas de tecnologia, um minidriver associado a um driver de classe ou driver de porta não precisa criar seus próprios objetos de dispositivo. Em vez disso, o driver de classe ou porta cria o objeto de dispositivo e recebe todos os IRPs para o dispositivo. Em seguida, o driver de classe ou porta usa um método específico do driver para passar a solicitação de E/S para o minidriver. Consulte a documentação da área de tecnologia específica para determinar se a Microsoft fornece um driver de classe ou porta que cria objetos de dispositivo em nome do driver.

Os drivers chamam IoCreateDevice ou IoCreateDeviceSecure para criar seus objetos de dispositivo. Para obter mais informações sobre qual rotina usar, consulte as seções a seguir.

Criando objetos de dispositivo para drivers de filtro e função WDM

Criando objetos de dispositivo para drivers de barramento WDM

Criando objetos de dispositivo para drivers não WDM

Quando o driver cria um objeto de dispositivo, ele fornece as seguintes informações para IoCreateDevice ou IoCreateDeviceSecure:

  • O tamanho da extensão de dispositivo do dispositivo. A extensão do dispositivo é uma área de armazenamento alocada pelo sistema que o driver pode usar para armazenamento específico do dispositivo. Para obter mais informações, consulte Extensões de dispositivo.

  • Uma constante definida pelo sistema, indicando o DeviceType representado pelo objeto do dispositivo. Para obter mais informações, consulte Especificando tipos de dispositivo.

  • Uma ou mais constantes ORed definidas pelo sistema que indicam as características do dispositivo para o dispositivo. Para obter mais informações, consulte Especificando características do dispositivo.

  • Um valor booliano, chamado Exclusive, que especifica se um bit nos Sinalizadores do objeto de dispositivo deve ser definido com DO_EXCLUSIVE, indicando que o driver atende a um dispositivo exclusivo, como um dispositivo de vídeo, serial, paralelo ou de som. Os drivers WDM devem definir Exclusivo como FALSE. Para obter mais informações, consulte Especificando o acesso exclusivo a objetos de dispositivo.

  • Um ponteiro para o objeto de driver para o driver. Uma função WDM ou driver de filtro recebe um ponteiro para seu objeto de driver como um parâmetro para sua rotina AddDevice . Todos os drivers recebem um ponteiro para seu objeto de driver em sua rotina DriverEntry . O sistema usa esse ponteiro para associar o driver ao seu objeto de dispositivo.

  • Um ponteiro opcional para uma cadeia de caracteres Unicode terminada em nulo (DeviceName) nomeando o dispositivo. Os drivers WDM, além dos motoristas de ônibus, não fornecem um nome de dispositivo; Isso ignora os recursos de segurança do gerenciador de PnP. Para obter mais informações, consulte Objetos de dispositivo nomeados.

Se a chamada para IoCreateDevice ou IoCreateDeviceSecure for bem-sucedida, o gerenciador de E/S fornecerá armazenamento para o próprio objeto de dispositivo e para todas as outras estruturas de dados associadas ao objeto do dispositivo, incluindo a extensão do dispositivo, que ele inicializa com zeros.

Criando objetos de dispositivo para drivers de filtro e função WDM

Os drivers WDM, além de drivers de ônibus, chamam IoCreateDevice para criar seus objetos de dispositivo. A maioria dos drivers WDM cria seus objetos de dispositivo de dentro de suas rotinas AddDevice . Alguns drivers, como drivers de disco que devem responder a IOCTLs de layout de unidade, chamam IoCreateDevice de uma rotina de expedição.

A menos que seções específicas do tipo de dispositivo do estado de documentação do WDK (Kit de Driver do Windows) de outra forma, o driver deve criar seus objetos de dispositivo em sua rotina AddDevice . Para obter mais informações, consulte Escrevendo uma rotina AddDevice.

Criando objetos de dispositivo para drivers de barramento WDM

Um driver de barramento WDM cria um PDO quando está enumerando um novo dispositivo em resposta a uma solicitação de IRP_MN_QUERY_DEVICE_RELATIONS , se o tipo de relação for BusRelations.

As regras a seguir determinam se um motorista de ônibus chama IoCreateDevice ou IoCreateDeviceSecure para criar um objeto de dispositivo:

  • Se um dispositivo puder ser usado no modo bruto, ele deverá chamar IoCreateDeviceSecure.

  • Se o dispositivo não for compatível com modo bruto, o driver de barramento poderá usar IoCreateDevice ou IoCreateDeviceSecure. IoCreateDevice pode ser usado quando a segurança do sistema padrão para dispositivos no barramento é adequada; IoCreateDeviceSecure pode ser usado para especificar um descritor de segurança mais rigoroso. Para obter mais informações, consulte Controlando o acesso ao dispositivo.

Criando objetos de dispositivo para drivers não WDM

Um driver não WDM usa IoCreateDevice para criar objetos de dispositivo sem nome e IoCreateDeviceSecure para criar objetos de dispositivo nomeados. Observe que os objetos de dispositivo sem nome de um driver não WDM não são acessíveis no modo de usuário, portanto, o driver geralmente deve criar pelo menos um objeto nomeado.