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


Приложение для тестирования драйвера Example.sys - часть 4


ioctlCode=IOCTL_TOUCH_PORT_378H; if( !DeviceIoControl( hHandle, ioctlCode, NULL, 0, // Input NULL, 0, // Output &BytesReturned, NULL ) ) { printf( "Error in IOCTL_TOUCH_PORT_378H!" ); return(-1); }

// Следующий тест. Получаем 1 байт данных из драйвера. // По окончании данного вызова переменная xdata должна // содержать значение 33: unsigned char xdata = 0x88; ioctlCode=IOCTL_SEND_BYTE_TO_USER; if( !DeviceIoControl( hHandle, ioctlCode, NULL, 0, // Input &xdata, sizeof(xdata),// Output &BytesReturned, NULL ) ) { printf( "Error in IOCTL_SEND_BYTE_TO_USER!" ); return(-1); }

// Вывод диагностического сообщения в консольном окне: printf("IOCTL_SEND_BYTE_TO_USER: BytesReturned=%d xdata=%d", BytesReturned, xdata);

// Выполнение следующего теста в Windows NT приведет к // фатальному сбою операционной системы (намеренно выполненное // падение ОС может быть полезно при изучении, например, // организации crash dump файла и работы с отладчиком). /* ioctlCode=IOCTL_MAKE_SYSTEM_CRASH; if( !DeviceIoControl( hHandle, ioctlCode, NULL, 0, // Input NULL, 0, // Output &BytesReturned, NULL ) ) { printf( "Error in IOCTL_MAKE_SYSTEM_CRASH!" ); return(-1); } */ // Закрываем дескриптор доступа к драйверу: CloseHandle(hHandle);

#ifdef SCM_SERVICE // Останавливаем и удаляем драйвер. Отключаемся от SCM. res = StopDriver (scm, DRIVERNAME ); if(!res) { printf("Cannot stop driver!"); CloseServiceHandle(scm); return -1;

}

res = RemoveDriver (scm, DRIVERNAME ); if(!res) { printf("Cannot remove driver!"); CloseServiceHandle(scm); return -1; }

CloseServiceHandle(scm); #endif

return 0; }

Сообщения намеренно введены на английском языке. Использование кириллицы в консольных приложениях Windows для правильного отображения на экране требует дополнительного преобразования с использованием функции CharToOem.




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



Книжный магазин