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 : corrigé1 Driver élémentaire Émulateur Corrigé

Présentations similaires


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

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

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

3 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];

4 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)

5 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; }

6 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; }

7 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; }

8 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; }

9 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; }

10 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); }

11 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; }

12 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) {

13 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

14 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

15 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

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

17 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

18 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;

19 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));

20 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; }

21 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; }

22 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; }

23 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; }

24 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 );

25 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; }

26 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);

27 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; }

28 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);

29 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

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

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

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


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

Présentations similaires


Annonces Google