Compartilhar via


Test Cases for the Interrupt IOCTLs Test (User Mode)

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

A seguinte tabela mostra os casos testar para a interrupção IOCTLs de teste (modo de usuário). Observe o seguinte pontos:

  • Os testes alocação e versão podem executar em qualquer imagem. Esses testes devem ser assinado para que eles tenham baixo nível acessar para as rotinas IOCTL interrupção.
  • Intervalos de IRQ são usados em toda a codificar. Os intervalos usar como padrão atualmente são definidos de 0 a 1024. Para alguns dos testes, o intervalo de IRQ pode ser definido pelos argumentos linha de comando. Todos os intervalos de IRQ são inclusive, a menos que especificado caso contrário.
  • Os IOCTLs só devem ser chamado no modo kernel. Em modo de usuário, o kernel deve evitar a codificar OAL mesmo seja chamado. É a testar executar em modo de usuário para confirmar que nenhum dos completo de chamadas com êxito.
  • A codificar testar IOCTL tem várias verificações internas que confirme que os dados corretos são retornados. Os dois importantes:
    • SYSINTRs válidos: SYSINTRs válidos devem estar entre [0, 72]. Nada é um erro.
    • Número de livre SYSINTRs antes e depois de testar: Os testes são projetados para deixar o sistema no estado que eles encontrado-la no. Isso pode ser confirmado, comparando o número de livre SYSINTRs antes e depois de testar. Isso ajuda a capturar erros dois sobre os testes e erros nas rotinas próprios.
  • Dado as demandas dos clientes diferentes e as restrições impostas pelo kernel vs. modo usuário, a tabela função tux enumera todas as combinações possíveis necessárias para testar completamente as IOCTLs. Como alguns das rotinas Init precisar acessar modo kernel, eles não podem ser executar de modo de usuário. Portanto, permitindo que cada entrada tabela função seja poderia executar do modo de usuário assunto de usuário para confuso mensagens. Além disso, isso seria difícil de codificar e manter, desde alguns rotinas Init chamar funções muitos níveis profundo. Por denotando determinados casos testar como "modo de usuário" e outras pessoas como "modo kernel", o usuário pode escolher e escolher baseado de como os testes são executar.
  • "estendido estrutura sinalizador" Permite que os sinalizadores OAL_INTR_ * para especificar mais ações para os IOCTLs.
  • Desde o controle rotinas interrupção comportamento sistema essenciais, trashed tabelas que mapa (n.); mapear (v.) que as IRQs para SYSINTRs geralmente levam a instabilidade no sistema e falhas. Isso significa que o usuário pedantic poderia executar cada maiúsculas e minúsculas testar individualmente. Em vez disso, esses testes executar em duas passagens em CETK: modo kernel e modo usuário (eles exigem diferentes Command lines). Uma falha na testar normalmente irá interromper todos os outros. Isso precisa ser observado para qualquer pessoa olhando resultados CETK.
Testar maiúsculas e minúsculas Descrição

500

IOCTL_HAL_REQUEST_SYSINTR: Entrada inválida (estrutura sinalizador estendido) - argumentos não concluídas

Intervalo de IRQ: Linha de comando ou usar como padrão

Verifica o seguinte:

  • NULL em ambos os o buffer no e buf.
  • de entrada tamanho dos dois DWORDS (neste maiúsculas e minúsculas não IRQs foram fornecidas)

510

IOCTL_HAL_REQUEST_SYSINTR: Entrada inválida (estrutura sinalizador estendido) - tamanhos de entrada inválido

Intervalo de IRQ: Comando ou usar como padrão

Estrutura de entrada deve ser DWORDS, portanto, Comprimento muito sempre ser um múltiplo de quatro. Furthemore, ele deve ser sempre > DWORDS 2, ou 8 bytes. Confirme isso até um 32 bytes arbitrário.

520

IOCTL_HAL_REQUEST_SYSINTR: Entrada inválida-tamanho

Intervalo de IRQ: Linha de comando ou usar como padrão

Confirme que nada, exceto para 4 bytes causa uma falha.

530

IOCTL_HAL_REQUEST_SYSINTR: Sinalizadores incorretos

Intervalo de IRQ: Linha de comando ou usar como padrão

Funciona de teste de 0 a 256, ignorando o válido sinalizadores (OAL_INTR_TRANSLATE, OAL_INTR_STATIC, OAL_INTR_DYNAMIC, OAL_INTR_FORCE_STATIC).

540

550

Teste maiúsculas e minúsculas 540: IOCTL_HAL_REQUEST_SYSINTR: Out-Size incorreto (estrutura sinalizador estendido)

Teste maiúsculas e minúsculas 550: IOCTL_HAL_REQUEST_SYSINTR: Out-Size incorreto

Intervalo de IRQ: Linha de comando ou usar como padrão

Qualquer tamanho menor que 4 bytes causa falha.

Observe que apenas 4 bytes é necessária para saída. Se dado mais, o IOCTL apenas ignora-lo.

600

IOCTL_HAL_RELEASE_SYSINTR: Tamanho de entrada incorreto

Intervalo de IRQ: Linha de comando ou usar como padrão

Confirme que diferente de 4 bytes causa um erro.

Este IOCTL não passa nenhuma saída. Nesta maiúsculas e minúsculas a codificar deveria ser completamente ignorar Valores de saída, incluem lpBytesReturned.

1000

Livres SYSINTRs que não devem ser liberados

Qualquer SYSINTR menor que 8 ou maior do que 71 não é válido. Liberar esses deve resultar em FALSE o IOCTL e nenhuma alteração no sistema. Este testar tenta versão desses SYSINTRs. Desde liberando ~ 2 ^ 32 interrupções leva um longo tempo, nós ocorrência os valores mais prováveis:

  • [0, 7]
  • [72, 256]
  • Limites de potências de dois (mais/menos 1)
  • (-256, -1] (incluir SYSINTR_UNDEFINED =-1)
  • Os valores SYSINTR 10.000 aleatório entre [72, 0xffff_ffff]

12000

12100

12200

Teste maiúsculas e minúsculas 12000: Alocações de IRQ única: Única alocação padrão de IRQ

Teste maiúsculas e minúsculas 12100: Alocações de IRQ única: Única alocação estática de IRQ

Teste maiúsculas e minúsculas 12200: Alocações de IRQ única: Dinâmico IRQ único alocação

Intervalo de IRQ: Linha de comando ou usar como padrão

Há alocações podem ser feitas de modo de usuário. Versões desses testes modo usuário falhará se qualquer alocações são bem-sucedido. Desde que todos os casos devem falhar, é necessário exercício todos os valores possíveis de IRQ. Não há nenhum "no intervalo" testar, uma vez que este é um subconjunto do intervalo de usar como padrão.

14000

14100

14200

Teste maiúsculas e minúsculas 14000: Várias alocações de IRQ: Alocação estática IRQ MULT

Teste maiúsculas e minúsculas 14100: Várias alocações de IRQ: Alocação dinâmica de IRQ MULT

Teste maiúsculas e minúsculas 14200: Várias alocações de IRQ: Alocação force-estático IRQ MULT

Intervalo de IRQ: Linha de comando ou usar como padrão

Nesses casos testar aleatoriamente gerar um conjunto de IRQs para um determinado chamar. As IRQs provenientes de intervalo de IRQ (consulte a discussão abaixo). O número de IRQs passados para o IOCTL varia de 1 para o número máximo permitido no sistema, conforme determinado pela testar. A testar tenta 100 alocações diferentes para cada número de IRQs.

No modo de usuário, nenhuma das alocações de deve ter êxito. Somente o intervalo usar como padrão for oferecido, desde que o linha de comando oferece um subconjunto dos quais deve transmitir

20010

IOCTL_HAL_REQUEST_IRQ: Verificações de parâmetro incorreto: Tamanho de entrada incorreto

Intervalo de IRQ: Linha de comando ou usar como padrão

Confirmar que qualquer tamanho não = sizeof (DEVICE_LOCATION) causa uma falha.

20020

IOCTL_HAL_REQUEST_IRQ: Verificações de parâmetro incorreto: Tamanho Incorreto de saída

Intervalo de IRQ: Linha de comando ou usar como padrão

Este IOCTL suporta múltiplo IRQs na saída.

Entradas incorretas consistem outputBufSize < 4 bytes. A codificar testar usa aleatório valores para o de entrada estruturas, que infelizmente não fornece cobertura ideal, desde que esses aleatório valores falhará mesmo assim.

30100

30200

IOCTL_HAL_REQUEST_IRQ: Solicitação aleatória

IOCTL_HAL_REQUEST_IRQ: Usuário especificados parâmetros

Intervalo de IRQ: Linha de comando ou usar como padrão

IOCTL_HAL_REQUEST_IRQ é usado para codificar determinados DEVICE_LOCATION valores para determinados IRQs na plataforma. Isso parece ser usado apenas em PCI e serial kitl.

A entrada é uma estrutura DEVICE_LOCATION. Os campos essa estrutura são comparados com valores cased especiais na OAL. O valor de retorno é um IRQ.

A entrada espaço é muito grande. Cada plataforma parece usar campos diferentes e possuem diferentes valores para esses campos. Além disso, o intervalo constantes all over o mapa (n.); mapear (v.). Nós não pôr qualquer intervalo neles.

A "Solicitação aleatória" testar seleciona aleatoriamente valores para os campos de estrutura de DEVICE_LOCATION. A meta não é para localizar um conjunto de valores que trabalho com o IOCTL; Em vez disso, ele é tentar causar um falhar/violação de acesso memória enviando em incorreto entrada.

O "usuário especificados parâmetros" testar permite que o usuário para transmitir os valores para o ioctl. Esses valores não necessariamente fazer causar o IOCTL seja bem-sucedida. Este testar sempre passa, pois a testar não tem nenhuma idéia que o usuário espera acontecer com estes argumentos.

Para executar o segundo testar, chamar a testar com argumentos testar:

-Dispositivo Fixar LogicalLoc BusNumber IfcType

Observe que a estrutura DEVICE_LOCATION também possui um valor PhysicalLoc. Este é um PVOID e é reservado para uso futuro, portanto, é definir a zero por nosso testar.

Em modo de usuário, este testar nunca deve êxito. Ambos testar falhará se o IOCTL nunca for bem-sucedido ao executar no modo de usuário.

See Also

Other Resources

Interrupt IOCTLs Test (User Mode)