Compartilhar via


Definindo nomes de instância WMI

Uma instância de um bloco WMI contém dados fornecidos por um determinado dispositivo físico ou componente de software. Assim como o GUID de um bloco identifica exclusivamente o bloco, o nome de uma instância identifica exclusivamente essa instância de um bloco. Os aplicativos cliente WMI usam nomes de instância para associar as informações retornadas em um bloco de dados ao dispositivo ou componente que forneceu os dados. O WMI usa nomes de instância para determinar para qual dispositivo uma solicitação deve ser enviada. É altamente recomendável que os drivers usem seu PDO ao definir nomes de instância.

Um driver pode definir nomes de instância para um bloco de duas maneiras:

  • O driver passa uma lista de nomes de instância estática para o WMI quando registra o bloco.

    Depois que o bloco for registrado, o driver e o WMI especificam um nome de instância por seu índice nessa lista. Os nomes de instância estática podem ser baseados na ID da instância do dispositivo do PDO de um driver ou em um nome base definido pelo driver; ou o driver pode definir uma lista de cadeias de caracteres de nome de instância. Os nomes de instância estática persistem até que o driver os altere explicitamente reregistrar o bloco.

  • O driver gera nomes de instância dinâmica à medida que as instâncias são criadas.

    O driver indica que ele gerará nomes de instância dinâmica para um bloco quando registrar o bloco. Depois que o bloco for registrado, o driver e o WMI passarão nomes de instância dinâmica como cadeias de caracteres no buffer em Parameters.WMI.Buffer.

Um driver deve gerar nomes de instância dinâmica somente se o número de instâncias ou nomes de instância de um bloco de dados for alterado com frequência no runtime. Por exemplo, um driver pode usar IDs de processo ou endereços IP de conexões TCP/IP como nomes de instância. Esses nomes de instância devem ser dinâmicos; se eles fossem estáticos, o driver incorreria em uma sobrecarga considerável porque teria que chamar IoWMIRegistrationControl para atualizar o número e os nomes das instâncias sempre que ocorresse uma alteração.

Na maioria dos casos, os nomes de instância estática são preferíveis aos nomes de instância dinâmica pelos seguintes motivos:

  • Os nomes de instância estática melhoram o desempenho de um driver porque o driver não precisa retornar cadeias de caracteres de nome de instância em resposta a solicitações WMI, como deve ser para nomes de instância dinâmica.

  • O WMI pode detectar colisões de nome de instância estática no registro e modificar automaticamente os nomes de instância, se necessário, para que todos os nomes de instância sejam exclusivos para um determinado bloco, independentemente de quantos drivers registrarem o bloco.

    O WMI não pode detectar colisões de nome de instância para nomes de instância dinâmica, portanto, o driver é responsável por gerar nomes exclusivos usando IoWMIAllocateInstanceIds.

  • Um driver pode usar as rotinas da Biblioteca WMI para manipular IRPs para um bloco que usa nomes de instância estática, desde que os nomes sejam baseados no PDO do driver ou em um nome base definido pelo driver.

    Um driver não pode usar rotinas da Biblioteca WMI para manipular IRPs para um bloco de dados que usa nomes de instância dinâmica.

Um driver indica se um bloco usa nomes de instância estáticos ou dinâmicos e o tipo de nomes de instância estáticos, definindo ou limpando WMIREG_FLAG_XXX na estrutura WMIREGGUID ou WMIGUIDREGINFO que ele passa para wmi quando registra o bloco. Para obter mais informações, consulte Registrando-se como um provedor de dados WMI.