Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parGringolet Portier Modifié depuis plus de 10 années
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.