La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Jc/md/lp-01/05Driver élémentaire : présentation1 Driver élémentaire Émulateur Présentation.

Présentations similaires


Présentation au sujet: "Jc/md/lp-01/05Driver élémentaire : présentation1 Driver élémentaire Émulateur Présentation."— Transcription de la présentation:

1 jc/md/lp-01/05Driver élémentaire : présentation1 Driver élémentaire Émulateur Présentation

2 jc/md/lp-01/05Driver élémentaire : présentation2 Objectif du chapitre Sous une plate-forme de type Industrial Controler préparer un driver « STR » capable de gérer un buffer en mémoire Écrire une chaîne de caractères en majuscules dans le buffer du driver par STR_Write Lire le buffer par STR_Read Modifier le buffer par des STR_IOControl (par exemple, passage majuscule/minuscule, cryptage) Renvoyer le buffer modifié

3 jc/md/lp-01/05Driver élémentaire : présentation3 Création du driver

4 jc/md/lp-01/05Driver élémentaire : présentation4 FileNew Project or File STRINGS_DRV CHOIX : dll

5 jc/md/lp-01/05Driver élémentaire : présentation5 Choix du projet

6 jc/md/lp-01/05Driver élémentaire : présentation6 Fichiers obtenus

7 jc/md/lp-01/05Driver élémentaire : présentation7 Fonctions du driver On créera les fonctions : STR_Init STR_Deinit STR_Open STR_Close STR_Read STR_Write STR_IOControl

8 jc/md/lp-01/05Driver élémentaire : présentation8 Création du fichier.def

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

10 jc/md/lp-01/05Driver élémentaire : présentation10 PlatformSettings

11 jc/md/lp-01/05Driver élémentaire : présentation11 Structure du driver

12 jc/md/lp-01/05Driver élémentaire : présentation12 En-tête du driver // Fichiers den-têtes.h nécessaires #include… // Buffer de travail (unicode) #define BUFSIZE 256 WCHAR wcBuffer[BUFSIZE];

13 jc/md/lp-01/05Driver élémentaire : présentation13 Définition des IOCTL // Définition des IOCTL #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)

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

15 jc/md/lp-01/05Driver élémentaire : présentation15 Driver Init DWORD STR_Init(DWORD dwContext) { DWORD dwRet = 1; RETAILMSG( 1,(TEXT("STRINGS: STR_Init\n"))); // Mise à zéro du buffer avec memset() // TODO return dwRet; }

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

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

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

19 jc/md/lp-01/05Driver élémentaire : présentation19 Driver Read DWORD STR_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count) { // TODO // Copie de wcBuffer dans le buffer dadresse pBuffer avec wcsncpy() // Retour : nombre de caractères lus return dwRet; }

20 jc/md/lp-01/05Driver élémentaire : présentation20 Driver Write DWORD STR_Write(DWORD hOpenContext, LPCVOID pBuffer,DWORD NbOfBytes) { DWORD dwRet = NbOfBytes; // TODO // Copie du buffer dadresse pBuffer dans wcBuffer avec wcsncpy() return dwRet; //nombre de caractères écrits }

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

22 jc/md/lp-01/05Driver élémentaire : présentation22 Driver IOCTL (2) case IOCTL_TOLOWER: // TODO // Mettre dans le buffer dadresse pBufOut le contenu de wcBuffer en minuscule // Chaque lettre en majuscule est transformée en minuscule par ajout de 0x20 à chaque caractère bRet=TRUE; break;

23 jc/md/lp-01/05Driver élémentaire : présentation23 Driver IOCTL (3) case IOCTL_CRYPTO: // TODO // Écrire dans le buffer dadresse pBufOut le contenu de wcBuffer encrypté // On fera un codage fictif en utilisant la fonction rand() modulo 128 bRet=TRUE; break;

24 jc/md/lp-01/05Driver élémentaire : présentation24 Driver IOCTL (4) } // switch *pdwActualOut = dwLenOut; RETAILMSG(1,(TEXT("STRINGS: STR_IOControl\n"))); return bRet; } //STR_IOControl

25 jc/md/lp-01/05Driver élémentaire : présentation25 Génération du driver

26 jc/md/lp-01/05Driver élémentaire : présentation26 Image du noyau avec le driver

27 jc/md/lp-01/05Driver élémentaire : présentation27 Création de lapplication

28 jc/md/lp-01/05Driver élémentaire : présentation28 FileNew Project or File

29 jc/md/lp-01/05Driver élémentaire : présentation29 WCE Application

30 jc/md/lp-01/05Driver élémentaire : présentation30 Type de lapplication

31 jc/md/lp-01/05Driver élémentaire : présentation31 Application obtenue

32 jc/md/lp-01/05Driver élémentaire : présentation32 PlatformSettings

33 jc/md/lp-01/05Driver élémentaire : présentation33 Code de lapplication

34 jc/md/lp-01/05Driver élémentaire : présentation34 Application (1) // TODO // Fichiers den-têtes nécessaires #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)

35 jc/md/lp-01/05Driver élémentaire : présentation35 Application (2) int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // TODO // Définitions et initialisations WCHAR* pString = TEXT("HA QUE COUCOU DANS LA MACHINE");

36 jc/md/lp-01/05Driver élémentaire : présentation36 Application (3) // TODO // Chargement du driver avec RegisterDevice() // Retourne hDevice ou 0 si il y a une erreur if(hDevice == 0) { MessageBox(NULL, _T(" Pb Register: "), _T("StringApp"),MB_OK); return 0; }

37 jc/md/lp-01/05Driver élémentaire : présentation37 Application (4) // TODO // Ouverture du driver avec CreateFile(), // Retourne hString, INVALID_HANDLE_VALUE si erreur if(hString == INVALID_HANDLE_VALUE) { MessageBox(NULL, _T("Pb open"), _T("StringApp"),MB_OK); // TODO // DeregisterDevice et fermeture des handles return 0; }

38 jc/md/lp-01/05Driver élémentaire : présentation38 Application (5) // TODO // Écriture de la chaine avec WriteFile(), // Retourne dwErreur égal à 0 sil y a une erreur if (dwErreur == 0) { // TODO MessageBox(NULL, _T("Pb Write: "), _T("StringApp"),MB_OK); // DeregisterDevice et fermeture des handles return 0; }

39 jc/md/lp-01/05Driver élémentaire : présentation39 Application (6) // TODO // Lecture de la chaine avec ReadFile() // Retourne dwErreur égal à -1 sil y a une erreur if(dwErreur == -1) { MessageBox(NULL, _T("Pb Read: "), _T("StringApp"),MB_OK); // TODO // DeregisterDevice et fermeture des handles return 0; }

40 jc/md/lp-01/05Driver élémentaire : présentation40 Application (7) // TODO // Impression de ce qui a été lu avec MessageBox // Appel de l'IOCTL TOLOWER avec DeviceIoControl() // Retourne dwErreur égal à 0 sil y a une erreur if(dwErreur == 0) { MessageBox(NULL, _T("Pb TOLOWER: "), _T("StringApp"),MB_OK); // TODO // DeregisterDevice et fermeture des handles return 0; }

41 jc/md/lp-01/05Driver élémentaire : présentation41 Application (8) // TODO // Affichage de la chaîne reçue avec MessageBox // Appel de l'IOCTL CRYPTO avec DeviceIoControl() // Retourne dwErreur égal à 0 sil y a une erreur if(dwErreur == 0) { MessageBox(NULL, _T("Pb CRYPTO"), _T("StringApp"),MB_OK); // TODO // DeregisterDevice et fermeture des handles return 0; }

42 jc/md/lp-01/05Driver élémentaire : présentation42 Application (9) // TODO // Affichage de la chaîne cryptée avec MessageBox // DeregisterDevice et fermeture des handles return 0; } // WinMain

43 jc/md/lp-01/05Driver élémentaire : présentation43 Résultat à obtenir (1)

44 jc/md/lp-01/05Driver élémentaire : présentation44 Résultat à obtenir (2)

45 jc/md/lp-01/05Driver élémentaire : présentation45 Résultat à obtenir (3)

46 jc/md/lp-01/05Driver élémentaire : présentation46 Conclusion Les principales fonctions dun driver ont été activée sur un exemple


Télécharger ppt "Jc/md/lp-01/05Driver élémentaire : présentation1 Driver élémentaire Émulateur Présentation."

Présentations similaires


Annonces Google