Программирование драйверов Windows


Модификация приложения для тестирования драйвера - часть 2


if ( ! CloseHandle(devHandle) ) { printf("\n Error during CloseHandle: errno %d.\n", GetLastError() ); return -1; } printf("\n\n\n Device LPTPORT0 successfully closed. Normal exit.\n"); return 0; } //========================================================================== // передача и получение данных из CheckIt заглушки: int ReadWrite(HANDLE devHandle) { //========================================== // Передача данных драйверу printf("Writing to LPTPORT0 device...\n");

DWORD bytesReturned, outCount = sizeof(outBuffer); if ( !DeviceIoControl(devHandle, IOCTL_SEND_TO_PORT, outBuffer, outCount, // отправляем в драйвер NULL, 0, // получаем из драйвера &bytesReturned, NULL ) ) { printf("Error during IOCTL_SEND_TO_PORT: errno %d.\n", GetLastError() ); return 11; } printf( "Successfully transferred %d bytes.\n" "Buffer content was: \n", outCount); for (DWORD i=0; i&#60outCount; i++ ) printf("%02X ",outBuffer[i]); //========================================== // Использование созданного события DWORD result = WaitForSingleObject(hEvent,10);

switch(result) { case WAIT_TIMEOUT: printf("\nWait timeout.\n");break; case WAIT_ABANDONED: printf("\nWait WAIT_ABANDONED.\n"); break; default: printf("\nWait default case.\n"); } //========================================== // Получение данных из драйвера printf("\n\nReading from device LPTPORT0...\n"); DWORD bytesRead, inCount = sizeof(inBuffer); if ( !DeviceIoControl(devHandle, IOCTL_SEND_TO_USER, NULL, 0, // отправляем в драйвер inBuffer, inCount, // получаем из драйвера &bytesRead, NULL ) ) { printf("Error during OCTL_SEND_TO_USER: errno %d.\n", GetLastError() ); return 12; } if ( bytesRead != outCount ) { // размер записанных и прочитанных данных не совпадает printf("Error: is to read %d bytes,\n" "but IOCTL_SEND_TO_USER reported %d bytes.\n", outCount, inCount); return 13; } printf("Succesfully read %d bytes.\n Buffer content is: \n", bytesRead); for ( i=0; i&#60bytesRead; i++ ) printf( "%02X ", (UCHAR)inBuffer[i] );




Начало  Назад  Вперед