Object-Based
O sistema operacional baseado em Windows NT da Microsoft é baseado em objeto. Vários componentes no executivo definem um ou mais tipos de objeto. Cada componente exporta rotinas de suporte do modo kernel que manipulam instâncias de seus tipos de objeto. Nenhum componente pode acessar diretamente os objetos de outro componente. Para usar objetos de outro componente, um componente deve chamar as rotinas de suporte exportadas.
Esse design permite que o sistema operacional seja portátil e flexível. Por exemplo, é possível que uma versão futura do sistema operacional contenha um componente de kernel recodificado que define os mesmos tipos de objeto, mas com estruturas internas totalmente diferentes. Se essa versão hipotética recodificada do kernel exportar um conjunto de rotinas de suporte com os mesmos nomes e parâmetros que o conjunto existente, as alterações internas não terão efeito sobre a portabilidade de qualquer outro componente executivo no sistema existente.
Da mesma forma, para permanecerem portáteis e configuráveis, os drivers devem se comunicar com o sistema operacional e uns com os outros usando apenas as rotinas de suporte e outras interfaces descritas no WDK.
Assim como o sistema operacional, os drivers também são baseados em objeto. Por exemplo:
Os objetos de arquivo representam a conexão de um aplicativo do modo de usuário com um dispositivo.
Os objetos de dispositivo representam os dispositivos lógicos, virtuais ou físicos de cada driver.
Os objetos driver representam a imagem de carga de cada driver.
O gerenciador de E/S define a estrutura e as interfaces para objetos de arquivo, objetos de dispositivo e objetos de driver.
Como qualquer outro componente executivo, os drivers usam objetos chamando rotinas de suporte do modo kernel que o gerente de E/S e outros componentes do sistema exportam. As rotinas de suporte do modo kernel geralmente têm nomes que identificam o objeto específico que cada rotina manipula e a operação que cada rotina executa nesse objeto. Esses nomes de rotina de suporte têm o seguinte formulário:
PrefixOperationObject
onde
Prefixo Identifica o componente do modo kernel que exporta a rotina de suporte e, geralmente, o componente que definiu o tipo de objeto. A maioria dos prefixos tem duas letras.
Operação Descreve o que é feito com o objeto .
Objeto Identifica o tipo de objeto .
Por exemplo, a rotina IoCreateDevice do gerente de E/S cria um objeto de dispositivo para representar um dispositivo físico, lógico ou virtual como destino de solicitações de E/S.
Um componente do sistema pode exportar rotinas que chamam as rotinas de suporte de outro componente. Isso pode reduzir o número de chamadas que um driver deve fazer. O gerente de E/S, em particular, exporta determinadas rotinas que facilitam o desenvolvimento de drivers. Por exemplo, IoConnectInterruptEx, que os drivers de nível mais baixo chamam para registrar seus ISRs, chama as rotinas de suporte do kernel para objetos de interrupção.
Opacidade do objeto
Alguns objetos definidos pelo sistema são opacos: apenas o componente do sistema definidor está ciente da estrutura interna desse objeto e pode acessar diretamente todos os dados que um objeto contém. O componente do sistema que define uma exportação de objeto opaco dá suporte a rotinas que drivers e outros componentes do modo kernel podem chamar para manipular esse objeto. Os drivers nunca acessam estruturas de objetos opacas diretamente.
Nota Para manter a portabilidade do driver, os drivers devem usar as rotinas de suporte fornecidas pelo sistema para manipular objetos definidos pelo sistema. O componente de definição do sistema pode alterar a estrutura interna de seus tipos de objeto a qualquer momento.