1 / 32

Driver élémentaire Émulateur

Driver élémentaire Émulateur. Corrigé. DRIVER. Déclarations. #include "stdafx.h"   #include <tchar.h> #include <Pkfuncs.h> // Buffer de travail (unicode) #define BUFSIZE 256 WCHAR wcBuffer[BUFSIZE];. Déclaration des IOControl. #define IOCTL_TOLOWER

umeko
Download Presentation

Driver élémentaire Émulateur

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Driver élémentaireÉmulateur Corrigé Driver élémentaire : corrigé

  2. DRIVER Driver élémentaire : corrigé

  3. Déclarations #include "stdafx.h"   #include <tchar.h> #include <Pkfuncs.h> // Buffer de travail (unicode) #define BUFSIZE 256 WCHAR wcBuffer[BUFSIZE]; Driver é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) Driver élémentaire : corrigé

  5. Point d’entrée du driver BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; } Driver é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; } Driver élémentaire : corrigé

  7. STR_Deinit BOOL STR_Deinit(DWORD hDeviceContext) { RETAILMSG(1,(TEXT("STRINGS:STR_Deinit\n"))); return TRUE; } Driver é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; } Driver élémentaire : corrigé

  9. STR_Close BOOL STR_Close(DWORD hOpenContext) { RETAILMSG(1,(TEXT("STRINGS: STR_Close\n"))); return TRUE; } Driver é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); } Driver é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; } Driver é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) { Driver é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 Driver é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 Driver é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 Driver élémentaire : corrigé

  16. Application Driver élémentaire : corrigé

  17. En-tête de l’application #include "stdafx.h" #include <Pkfuncs.h> #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 Driver é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; Driver é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)); Driver élémentaire : corrigé

  20. Chargement du driver // Chargement du driver avec RegisterDevice(), // Retourne hDevice qui est nul s’il 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; } Driver é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; } Driver élémentaire : corrigé

  22. WRITE // Écriture de la chaîne avec WriteFile(), dwErreur=WriteFile(hStr,pString,(wcslen(pString)+1), &dwWritten,NULL); if (dwErreur == 0) //s’il 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; } Driver é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) //s’il 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; } Driver é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); Driver é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) //s’il 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; } Driver é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); Driver é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) //s’il y a erreur dans l’IOCTL { MessageBox(NULL,_T("Pb CRYPTO:"), _T("StringApp"), MB_OK); // DeregisterDevice et fermeture des Handle DeregisterDevice(hDevice); CloseHandle(hDevice); CloseHandle(hStr); return 0; } Driver é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); Driver élémentaire : corrigé

  29. Fin de l’application // DeregisterDevice et fermeture des handles DeregisterDevice(hDevice); CloseHandle(hDevice); CloseHandle(hStr); return 0; }// WinMain Driver élémentaire : corrigé

  30. Résultat de l’exécution (1) Driver élémentaire : corrigé

  31. Résultat de l’exécution (2) Driver élémentaire : corrigé

  32. Résultat de l’exécution (3) Driver élémentaire : corrigé

More Related