• Nenhum resultado encontrado

Device Drivers. Comunicação entre Aplicação e o Device Driver

N/A
N/A
Protected

Academic year: 2021

Share "Device Drivers. Comunicação entre Aplicação e o Device Driver"

Copied!
23
0
0

Texto

(1)

Device Drivers

Comunicação entre Aplicação e o Device

(2)

Device Driver

z Um Device Driver implementa a

comunicação entre a Aplicação e o Hardware (dispositivo)

z Existem vários tipos de Device Driver que dependem fundamentalmente do tipo de dispositivo e do modo de comunicação entre o Driver e a aplicação e o dispositivo.

(3)

Aplicações Win32 Subsistema Device Drivers Gestão I/O Hardware Camada de Abstracção de hardware Win 32 API Modo do Utilizador Modo Kernel

IRP I/O Request Packet

Chamadas HAL

Operações especificas da Plataforma

(4)

Device Driver

z Um driver é um ficheiro executável

z Tem extensão .sys

z Tem a estrutura de qualquer programa executável (.exe) de 32 bits

z Como qualquer programa usa um conjunto de rotinas, dinâmicas ou estáticas mas principalmente (Kernel.dll)

z Não tem como ponto de entrada uma rotina main()

z Disponibiliza um conjunto de rotinas que podem ser chamadas pelo sistema.

(5)

Comunicação entre o aplicativo e

o device driver

São utilizadas as funções padrão (API) do Kernel32.dll:

CreateFileCloseHandleDeviceIoControl

Adicionalmente poderão também ser usadas as funções:

WriteFileReadFile

(6)

CreateFile

z Permite abrir a comunicação entre o dispositivo e aplicação

– Um processo pode abrir mais que uma

comunicação com o dispositivo

– Processos diferentes podem abrir diferentes

comunicações com o dispositivo

– Também é possível a exclusividade no acesso ao

(7)

CreateFile

CreateFile é uma API do win32 definida em Kernel32.dll

[DllImport(“Kernel32.dll”, CharSet=CharSet.Auto, SetLastError=true)] public static extern int CreateFile(String lpfilename, int

dwDesiredAccess, int dwShareMode, IntPtr lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int htemplateFile)

(8)

CreateFile

z Devolve um identificador manipulador para ser usado com outras rotinas da API (CloseHandle e DeviceIoControl)

z Lpfilename – nome do ficheiro do Driver a ser usado para criar a aplicação entre a aplicação e o Driver, tem um formato especifico “\\.\NomeFicheiro”, em C fica “\\\\.\\NomeFicheiro”

(9)

CreateFile

z dwDesiredAccess – estabelece as

condições de acesso, o valor 0 permite utilizar o dispositivo sem alterar.

Tipicamente:

GENERIC_READ | GENERIC_WRITE GENERIC_READ= 0x80000000

(10)

CreateFile

z dwShareMode - Especifica o modo como o

ficheiro pode ser compartilhado. Tipicamente:

FILE_SHARE_READ | FILE_SHARE_WRITE

FILE_SHARE_READ=0x00000001 FILE_SHARE_WRITE=0x00000002

(11)

CreateFile

z lpSecurityAttributes – Contêm os atributos de segurança, pode ser NULL

z dwCreationDisposition – Condição de abertura da ligação, devera ser

OPEN_EXISTING OPEN_EXISTING=3

(12)

CreateFile

z dwFlagsAndAttributes – Flags e atributos da ligação deve ser colocado a 0.

z htemplateFile – Identificador manipulador para ficheiro temporário, deve ser colocado a NULL

(13)

CreateFile

Exemplo da utilização de CreateFile

m_hThermUsb = CreateFile( "\\\\.\\ThermUsb0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (m_hThermUsb == INVALID_HANDLE_VALUE) {

// caso em que existe erro na abertura de ficheiro };

(14)

CloseHandle

z Fecha a ligação existente entre a aplicação e o Driver, devolve um valor boleano:

TRUE- se foi bem sucedida

FALSE- se não for bem sucedida

z O processo deverá fechar a ligação com o Driver, mas caso não feche o próprio SO

fechará essa ligação quando o processo terminar.

(15)

CloseHandle

[DllImport(“Kernel32.dll”, CharSet=CharSet.Auto, SetLastError=true)]

public static extern bool CloseHandle(int hHandle)

z hHandle – Identificador manipulador devolvido em CreateFile

Exemplo:

(16)

DeviceIoControl

z A chamada a DeviceIoControl resulta em IRP IO request Packet no Driver, possibilitando a

comunicação entre o Driver e a Aplicação.

z Nem todos os dispositivos usam a função da API

DeviceIoControl para a comunicação como é o caso

dos HID (Dispositivos de Interface Humana) que alternativamente usam a API HID_GetFeature e

(17)

DeviceIoControl

z Realiza a comunicação entre a aplicação e o

Driver

z Devolve TRUE se a operação foi realizada com sucesso, caso contrário devolve FALSE

(18)

DeviceIoControl

DeviceIoControl é uma API do win32 definida em Kernel32.dll

[DllImport(“Kernel32.dll”, CharSet=CharSet.Auto, SetLastError=true)]

public static extern bool DeviceIoControl(int hDevice, int dwIoControlCode, byte[] InBuffer, int nInBufferSize, byte [] OutBuffer, int nOutbufferSize, ref int pBytesReturned, int pOverlapped);

(19)

DeviceIoControl

z hDevice – é o identificador do manipulador, que foi obtido com a função CreateFile

z dwIoControlCode – é um código de controlo indicando o código da operação que se pretende efectuar.

(20)

DeviceIoControl

z InBuffer – Buffer de dados de entrada para o

Driver

z nInBufferSize – Tamanho do buffer de dados de entrada

z OutBuffer – Buffer de dados de saída do

Driver

z nOutbufferSize - Tamanho do buffer de dados de saída

(21)

DeviceIoControl

z pBytesReturned – variavel actualizada pelo

Driver que indica o numero de bytes de

dados devolvido pelo Driver

z pOverlapped – Utilizado em acesso assíncronos deve ser NULL

(22)

DeviceIoControl

LONG GetButtonState(HANDLE hThermUsb) {

ULONG length; // the return length from the driver UCHAR buttonState; // the state of the button

if (!DeviceIoControl( hThermUsb, IOCTL_THERMUSB_GET_BUTTON_STATE, NULL, 0, &buttonState, sizeof(UCHAR), &length, NULL)) { return -1; } if (buttonState) { return 1; } else { return 0; } }

(23)

Exemplo – Termómetro Cypress

MSB LSB MSB LSB

Intensidade do LED Intens. 0x0E estado

Leitura Termómetro - - - 0x0b botao sinal Temp estado

Le Porto - - porto 0x14 - - valor estado

Escreve Porto - Valor porto 0x15 - - - estado

Lê Ram - - End. 0x16 - - valor estado

Escreve RAM valor End. 0x17 - - - estado

Lê ROM - Index NA 0x18 - - valor estado

Exemplo dos argumentos de entrada para o Device Driver do termómetro Cypress

Referências

Documentos relacionados

· Indicações sobre cuidados médicos urgentes e tratamentos especiais necessários Não existe mais nenhuma informação relevante disponível.. 5 Medidas de combate

Foram admitidas as seguintes simplificações, que podem oscilar e assim modificar um determinado valor, para mais ou para menos, e que o interessado em um caso

São Camilo Santana Geral PS/INT PS/INT - - PS/INT PS/INT

Composição específica da ictiofauna na Gamboa do Perequê nos meses amostrados, com as freqüências absolutas observadas em número de exemplares (Obs), porcentagens

O luxuoso Contur design da DORMA abriga a avançada tecnologia eletromagnética do operador CS 80 MAGNEO para portas deslizantes, que opera com baixo consumo de energia..

Potencial = Todos os produtos de mesma CT4 trabalhados pelo ABRADIMEX no canal durante o MATNOV 19;

78 Figura 3.27 Padrão de difração de pós obtido para o complexo ácido nalidíxico:Zn através (a) de síntese por solução, em comparação com os difractogramas

A Heller Energy International é uma empresa espanhola, com um capital humano com uma ampla experiência no setor energético e meio ambiente, que deseja contribuir para melhorar o