Jc/md/lp-01/05Driver élémentaire : corrigé1 Driver élémentaire Émulateur Corrigé

Slides:



Advertisements
Présentations similaires
Génération de plate-forme
Advertisements

Rappels C.
Journées académiques Microsoft 2005
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
Programmation Tcl/Tk Raymond Ripp février 2010 Survol général o Applications et Protocoles o Windows Linux o Disques Processeurs o Passage en mode console.
Programmation Tcl/Tk Raymond Ripp février 2011 Survol général o Applications et Protocoles o Windows Linux o Disques Processeurs o Passage en mode console.
Programmation Tcl/Tk Raymond Ripp janvier 2009
Pour débutant … et autre Raymond Ripp
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Revision.
Jc/md/lp-01/05Communication inter processus1 Communication inter process Présentation.
Driver de port parallèle
Jc/md/lp-01/06Threads1. jc/md/lp-01/06Threads2 Objectif du chapitre Génération dune application avec thread –Création dun thread –Identification dun thread.
jc/md/lp-01/05IT CE4.2 : cours1 Traitement des interruptions Cours.
Jc/md/lp-01/05TTY_IT : présentation1 TTY_IT Présentation.
Jc/md/lp-01/06Applications1 Émulateur. jc/md/lp-01/06Applications2 Objectif du chapitre Génération dapplications –WCE Console Application –WCE Application.
Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation.
Gestion mémoire : présentation
Jc/md/lp-01/05gestion mémoire : corrigé1 Gestion mémoire Corrigé
Jc/md/lp-01/05Communication inter processus corrigé1 Communication inter process Corrigé
Driver UART en polling : présentation
Jc/md/lp-01/06Synchronisation1. jc/md/lp-01/06Synchronisation2 Objectif du chapitre Création dune application ayant plusieurs threads Synchronisations.
Driver de port parallèle
Jc/md/lp-01/06Kernel Tracker1 Debugging Kernel Tracker.
Jc/md/lp-01/05Principe des drivers1 Généralités sur les drivers Présentation.
Jc/md/lp-01/05TTY_IT : corrigé1 TTY_IT Corrigé. jc/md/lp-01/05TTY_IT : corrigé2 Objectif du chapitre Proposer une solution pour les exercices suggérés.
Jc/md/lp-01/05Essai ligne série COM1 : corrigé1 Essai ligne série CEPC Application écho sur COM1 Présentation.
Driver UART en polling : corrigé
Jc/md/lp-01/05Trains_presentation1 Threads et Synchronisation Application train Présentation.
Jc/md/lp-01/05Driver élémentaire : présentation1 Driver élémentaire Émulateur Présentation.
Jc/md/lp-01/05Trains_corrigé1 Threads et Synchronisation Application train Corrigé
FLSI602 Génie Informatique et Réseaux
Points importants de la semaine Les pointeurs. Les chaînes de caractères.
Points importants de la semaine Les caractères. Les chaînes de caractères.
Javascript les spécificités du langage - Partie 2-
Laurent Capelli Solution anti SPAM : Codage adresse mail Comment se protéger des robots chercheurs d'adresse mail éviter les chaînes du type «
Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique.
TRAITEMENT DE STRUCTURES
Un mini-compilateur Introduction à la syntaxe
1 Cours JAVA / Y.Laborde Java : Les FLUX de données Les flux de données introduction les flux binaires les flux binaires de sortie (FBS) les flux binaires.
1 Développement des Applications des Bases de Données Chapitre 6, Sections
Les fichiers binaires en C++
Fichiers et entrées / sorties Sauvegarde des programmes dans des fichiers. Compilation. Lecture et écriture de données dans des fichiers. Formatage des.
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
SEANCE 10 Python Entrée et sortie de fichiers Lycée Louis Vincent Lundi 20 janvier
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Développement des Applications des Bases de Données Chapitre 6, Sections
IFT 6800 Atelier en Technologies d’information
Chapitre 9 Les sous-programmes.
Introduction au Langage C
CSI2520 Le langage Scheme (2) Un langage de programmation fonctionnelle.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
L’essentiel du langage C
Branche Développement Le présent document contient des informations qui sont la propriété de France Télécom. L'acceptation de ce document par son destinataire.
Introduction au langage PHP Licence Pro Cours Internet / Intranet Utilité Historique Exemples Fonctions PHP Classes.
Quelques fonctions utiles en PHP. Chaînes de caractères int eregi ( string pattern, string string [, array ®s] )
1 Fichers Binaires, Accès Direct et Objets. 2 Données binaires. Il s'agit ici de lire et écrire des données binaires par opposition à du texte. Pour ce.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
La notion de type revisitée en POO
8PRO107 Éléments de programmation Les chaînes de caractères.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
CSI2520 Un langage de programmation impérative et concurrente.
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Points importants de la semaine Les caractères.
Fichier=open('monfichier.txt','w') >>> fichier.write('bonjour\n') 8 >>> liste ['le chien', 'le chat', 'le loup'] >>> for s in liste: fichier.write(s+'\n')
Codage Indenter le code Limiter la portée des variables Traiter les erreurs en premier Utiliser le switch au delà de 3 tests en cascades Ne jamais utiliser.
Les flux en C++ Les flux d’entrées sorties Les flux standards.
Coding party Écrire un programme qui élève un nombre au carré Écrire un programme qui teste si un nombre est pair Écrire un programme qui calcule la factorielle.
Garçon - Fille.
Transcription de la présentation:

jc/md/lp-01/05Driver élémentaire : corrigé1 Driver élémentaire Émulateur Corrigé

jc/md/lp-01/05Driver élémentaire : corrigé2 DRIVER

jc/md/lp-01/05Driver élémentaire : corrigé3 Déclarations #include "stdafx.h" #include // Buffer de travail (unicode) #define BUFSIZE 256 WCHAR wcBuffer[BUFSIZE];

jc/md/lp-01/05Driver élémentaire : corrigé4 Déclaration des IOControl #define IOCTL_TOLOWER \ CTL_CODE(FILE_DEVICE_UNKNOWN,2048,\ METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_CRYPTO \ CTL_CODE(FILE_DEVICE_UNKNOWN,2049,\ METHOD_BUFFERED,FILE_ANY_ACCESS)

jc/md/lp-01/05Driver élémentaire : corrigé5 Point dentrée du driver BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; }

jc/md/lp-01/05Driver élémentaire : corrigé6 STR_Init DWORD STR_Init(DWORD dwContext) { DWORD dwRet = 1; RETAILMSG (1,(TEXT("STRINGS: STR_Init\n"))); // Mise à zéro du buffer memset(wcBuffer,0, (BUFSIZE * sizeof(WCHAR))); return dwRet; }

jc/md/lp-01/05Driver élémentaire : corrigé7 STR_Deinit BOOL STR_Deinit(DWORD hDeviceContext) { RETAILMSG (1,(TEXT("STRINGS: STR_Deinit\n"))); return TRUE; }

jc/md/lp-01/05Driver élémentaire : corrigé8 STR_Open DWORD STR_Open(DWORD hDeviceContext, DWORD AccessCode,DWORD ShareMode) { DWORD dwRet = 1; RETAILMSG (1,(TEXT("STRINGS: STR_Open\n"))); return dwRet; }

jc/md/lp-01/05Driver élémentaire : corrigé9 STR_Close BOOL STR_Close(DWORD hOpenContext) { RETAILMSG (1,(TEXT("STRINGS: STR_Close\n"))); return TRUE; }

jc/md/lp-01/05Driver élémentaire : corrigé10 STR_Read DWORD STR_Read(DWORD hOpenContext,LPVOID pBuffer, DWORD dwCount) { RETAILMSG(1,(TEXT("STRINGS: STR_Read\n"))); //copie de la chaîne. wcsncpy((LPWSTR)pBuffer,wcBuffer,dwCount); //retour : nombre de caractères lus return wcslen((LPWSTR)pBuffer); }

jc/md/lp-01/05Driver élémentaire : corrigé11 STR_Write DWORD STR_Write(DWORD hOpenContext, LPCVOID pSourceBytes,DWORD NbOfBytes) { DWORD dwRet = NbOfBytes; // Écriture de la chaîne wcsncpy(wcBuffer, (LPWSTR)pSourceBytes, dwRet); // Retour : nombre de caractères écrits return dwRet; }

jc/md/lp-01/05Driver élémentaire : corrigé12 STR_IOControl (1) BOOL STR_IOControl(DWORD hOpenContext, DWORD dwCode, PWCHAR pBufIn, DWORD dwLenIn, PWCHAR pBufOut, DWORD dwLenOut, PDWORD pdwActualOut) { BOOL bRet; DWORD i; switch(dwCode) {

jc/md/lp-01/05Driver élémentaire : corrigé13 STR_IOControl (2) case IOCTL_TOLOWER: for(i = 0; i<dwLenOut; i++) pBufOut[i] = wcBuffer[i] + 0x20; bRet= TRUE; break; case IOCTL_CRYPTO: for(i = 0; i<dwLenOut; i++) pBufOut[i]=wcBuffer[i]+(WCHAR)rand()%128; bRet= TRUE; break; } //switch

jc/md/lp-01/05Driver élémentaire : corrigé14 STR_IOControl (3) //l IOControl de décryptage est à votre charge !!! *pdwActualOut = dwLenOut; RETAILMSG(1,(TEXT("STRINGS: STR_IOControl\n"))); return bRet; } //STR_IOControl

jc/md/lp-01/05Driver élémentaire : corrigé15 STRINGS_DRV.def LIBRARY STRINGS_DRV EXPORTS STR_Init STR_Deinit STR_Open STR_Close STR_Read STR_Write STR_IOControl

jc/md/lp-01/05Driver élémentaire : corrigé16 Application

jc/md/lp-01/05Driver élémentaire : corrigé17 En-tête de lapplication #include "stdafx.h" #include #define IOCTL_TOLOWER CTL_CODE(\ FILE_DEVICE_UNKNOWN,2048,\ METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_CRYPTO CTL_CODE(\ FILE_DEVICE_UNKNOWN,2049,\ METHOD_BUFFERED,FILE_ANY_ACCESS) #define BUFFER_SIZE 256

jc/md/lp-01/05Driver élémentaire : corrigé18 Déclarations int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { HANDLE hDevice,hStr; DWORD dwNb,dwErreur; DWORD dwWritten = 0; DWORD dwBytesRead = BUFFER_SIZE;

jc/md/lp-01/05Driver élémentaire : corrigé19 Déclarations et initialisation des buffers WCHAR r_ch[BUFFER_SIZE]; WCHAR io_ch[BUFFER_SIZE]; WCHAR* pString = TEXT("HA QUE COUCOU DANS LA MACHINE"); memset(&r_ch,'\0', BUFFER_SIZE * sizeof(WCHAR)); memset(&io_ch,'\0',BUFFER_SIZE * sizeof(WCHAR));

jc/md/lp-01/05Driver élémentaire : corrigé20 Chargement du driver // Chargement du driver avec RegisterDevice(), // Retourne hDevice qui est nul sil y a une erreur hDevice=RegisterDevice( TEXT("STR"),1,TEXT("STRINGS_DRV.dll"),NULL); if (hDevice == 0) { MessageBox(NULL,_T("Pb Register"), _T("StringApp"),MB_OK); return 0; }

jc/md/lp-01/05Driver élémentaire : corrigé21 Open // Ouverture du driver avec CreateFile() hStr = CreateFile(TEXT("STR1:"),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0); if(INVALID_HANDLE_VALUE == hStr) { MessageBox(NULL,_T(" Pb Open"), _T("StringApp"),MB_OK); // DeregisterDevice et fermeture des Handle DeregisterDevice(hDevice); CloseHandle(hDevice); return 0; }

jc/md/lp-01/05Driver élémentaire : corrigé22 WRITE // Écriture de la chaîne avec WriteFile(), dwErreur=WriteFile(hStr,pString,(wcslen(pString)+1), &dwWritten,NULL); if (dwErreur == 0) //sil y a une erreur { MessageBox(NULL,_T("Pb Write"), _T("StringApp"),MB_OK); // DeregisterDevice et fermeture des Handle DeregisterDevice(hDevice); CloseHandle(hDevice); CloseHandle(hStr); return 0; }

jc/md/lp-01/05Driver élémentaire : corrigé23 Read // Lecture de la chaine avec ReadFile() dwErreur=ReadFile(hStr,r_ch,sizeof(r_ch)/sizeof (WCHAR ),&dwBytesRead, NULL ); if(dwErreur == -1) //sil y a une erreur de lecture { MessageBox (NULL,_T("Pb Read"), _T("StringApp"), MB_OK); // DeregisterDevice et fermeture des handles DeregisterDevice(hDevice); CloseHandle(hDevice); CloseHandle(hStr); return 0; }

jc/md/lp-01/05Driver élémentaire : corrigé24 Affichage de la chaîne reçue // Affichage de ce qui a été lu avec MessageBox MessageBox(NULL,r_ch,TEXT("StringApp"),MB_OK );

jc/md/lp-01/05Driver élémentaire : corrigé25 IOControl TOLOWER // Appel de l'IOCTL TOLOWER avec DeviceIoControl() dwEerreur=DeviceIoControl (hStr,IOCTL_TOLOWER,NULL, NULL,io_ch,(wcslen(pString)+1),&dwNb,NULL); if (dwErreur == 0) //sil y a une erreur dans IOCTL { MessageBox (NULL,_T("Pb Tolower"), _T("StringApp"), MB_OK); // DeregisterDevice et fermeture des handles DeregisterDevice(hDevice); CloseHandle(hDevice); CloseHandle(hStr); return 0; }

jc/md/lp-01/05Driver élémentaire : corrigé26 Affichage de la chaîne modifiée // Affichage de la chaîne modifiée avec MessageBox MessageBox(NULL,io_ch,TEXT("StringApp"),MB_OK);

jc/md/lp-01/05Driver élémentaire : corrigé27 IOControl CRYPTO // Appel de l'IOCTL CRYPTO avec DeviceIoControl() dwErreur=DeviceIoControl (hStr,IOCTL_CRYPTO,NULL, NULL,io_ch,(wcslen(pString)+1),&dwNb,NULL); if (dwErreur == 0) //sil y a erreur dans lIOCTL { MessageBox(NULL,_T("Pb CRYPTO:"), _T("StringApp"), MB_OK); // DeregisterDevice et fermeture des Handle DeregisterDevice(hDevice); CloseHandle(hDevice); CloseHandle(hStr); return 0; }

jc/md/lp-01/05Driver élémentaire : corrigé28 Affichage de la chaîne reçue // Affichage de la chaîne cryptée avec MessageBox MessageBox(NULL,io_ch,TEXT("StringApp"),MB_OK);

jc/md/lp-01/05Driver élémentaire : corrigé29 Fin de lapplication // DeregisterDevice et fermeture des handles DeregisterDevice(hDevice); CloseHandle(hDevice); CloseHandle(hStr); return 0; }// WinMain

jc/md/lp-01/05Driver élémentaire : corrigé30 Résultat de lexécution (1)

jc/md/lp-01/05Driver élémentaire : corrigé31 Résultat de lexécution (2)

jc/md/lp-01/05Driver élémentaire : corrigé32 Résultat de lexécution (3)