Device Manager Security
9/8/2008
Device Manager valida todas as entrada e saída buffers passados para DeviceIoControl.
Para Windows incorporado CE
A validação do buffer de entrada/saída
In Windows Embedded CE 6.0, the kernel performs a full access check on first level buffer pointer parameters. Esta caixa de seleção de acesso elimina a necessidade de validação para ser realizado pela driver de dispositivo. No entanto, um driver deve ainda verificar que o chamador tem acessar a memória corrigida pelo incorporado ponteiros utilizando CeOpenCallerBuffer e CeCloseCallerBuffer. Para obter informações adicionais, consulte o Migrating a Windows Embedded CE Driver to Windows Embedded CE 6.0.**
Para Mobile Windows
A validação do buffer de entrada/saída
Device Manager chama o MapCallerPtr Função para validar todas as entrada e saída buffers passados para DeviceIoControl. Como Device Manager valida esses buffers, individual drivers que usam DeviceIoControl Não é necessário validar sua entrada e saída buffers. O seguinte excerto de código Device Manager mostra quando e como Device Manager valida a entrada e saída buffers.
BOOL DM_DevDeviceIoControl(
fsopendev_t *fsodev,
DWORD dwIoControlCode,
LPVOID lpInBuf,
DWORD nInBufSize,
LPVOID lpOutBuf,
DWORD nOutBufSize,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped)
{
BOOL retval = FALSE;
DWORD dodec = 0;
LPEXCEPTION_POINTERS pep;
lpInBuf = MapCallerPtr(lpInBuf,nInBufSize);
lpOutBuf = MapCallerPtr(lpOutBuf,nOutBufSize);
// End of code excerpt.
}
Imposta Access do chamador com privilégios para determinados dispositivos
Determinadas classes de dispositivos só devem ser acessados por chamadores privilegiados. De exemplo, drivers bloco devem apenas ser diretamente acessados pela sistema de arquivos ou a Power Manager. Alguns drivers implementar plataformas cuja única função é fornecer serviços a outros drivers. Manipulação GPIO e serviços microcontrolador são dois exemplos dessa categoria de dispositivos.
Você pode restringir acessar a individual drivers ou instâncias de um driver por meio de Registro. Device Manager fornece um mecanismo por meio de Registro que restringe acessar a drivers específicos por apenas codificar privilegiado. O mecanismo é a DEVFLAGS_TRUSTEDCALLERONLY Sinalizadores valor que Device Manager lê do dispositivo ativação Registro chaves. Quando DEVFLAGS_TRUSTEDCALLERONLY for definida, Device Manager rejeita tentativas por codificar normal para aberto um identificador para o dispositivo. Device Manager o código de erro ERROR_ACCESS_DENIED define quando ele rejeita uma tentativa aberto um identificador para o dispositivo de codificar normal. Os direitos acessar são verificados quando um identificador é criado. Após acessar direitos são verificados e o identificador é criado, o identificador é considerado válido. Porque o identificador é considerado válido, desempenho não é afetado negativamente devido a verificando permissões cada tempo um driver de dispositivo é acessado.
A seguinte lista mostra algumas coisas para manter em mente ao usar o sinalizador DEVFLAGS_TRUSTEDCALLERONLY:
- Executar um auditar a segurança em qualquer personalizado drivers dispositivo.
- Remova o bit DEVFLAGS_TRUSTEDCALLERONLY do Registro se você desejar para adicionar um IOCTL normal para um driver de dispositivo Windows Mobile. Em seguida, adicionar apropriado chama para PSLGetCallerTrust No vários pontos entrada driver de dispositivo.
- Definir esse sinalizador somente em drivers que legitimamente precisem ser acessado por apenas codificar privilegiado. Use este sinalizador com cuidado e completamente testar quaisquer drivers que usam esse sinalizador.
- Estar ciente das questões compatibilidade com versões anteriores possíveis que podem ocorrer devido a configuração esse sinalizador.