Автор работы: Пользователь скрыл имя, 28 Апреля 2013 в 23:02, курсовая работа
Драйвер (от англ. driver) - это компьютерная программа, с помощью которой другая программа (обычно, операционная система) получает доступ к аппаратному обеспечению стандартным образом.
1. Теоретические сведения 4
1.1. Разработка драйверов ядра Windows 4
1.2. Драйверы виртуальных устройств Windows. 11
1.3. Доступ к существующим драйверам из приложений пользовательского режима 21
2. Выполнение курсовой работы 27
2.1. Шаг 1 27
Листинг Kurs_test.cpp 27
Листинг beeper.sys 28
2.2. Шаг 2 30
Листинг shablon.c 30
Листинг курсовая2.cpp 32
2.3. Шаг 3 34
Листинг курсовая.cpp 34
2.4. Шаг 4 35
3. Работа приложения 38
return ((int)bResult);
}
1) Объединить всю
Заключительный комплекс должен выглядеть следующим образом:
- Наш драйвер встраивается в систему и загружается на этапе загрузки Windows.
- Приложение запрашивает
у драйвера необходимую (
2) Оформить пояснительную
записку, в которой должны
#include "stdafx.h"
#include "windows.h"
#include "stdlib.h"
#define IOCTL_GET CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS + FILE_WRITE_ACCESS)
BOOL GetPartitionNumber(PARTITION_
{
HANDLE hDevice; // дескриптор проверяемого устройства
BOOL bResult; // флажок результата
DWORD junk;
hDevice = CreateFile(TEXT("\\\\.\\c:"),
GENERIC_READ | GENERIC_WRITE, // доступ к устройству
FILE_SHARE_READ |FILE_SHARE_WRITE, // режим совместного использования
NULL,
OPEN_EXISTING,
0,
NULL);
if (hDevice == INVALID_HANDLE_VALUE){
printf("CreateFile() failed!\n");
return (FALSE);
}
bResult = DeviceIoControl(hDevice,
IOCTL_DISK_GET_PARTITION_INFO_
NULL,
0,
pex, sizeof(*pex),
&junk,
(LPOVERLAPPED) NULL); // синхронизация ввода/вывода (I/O)
CloseHandle(hDevice);
return (bResult);
}
int _tmain(int argc, _TCHAR* argv[]){
SC_HANDLE hSCManager;
SC_HANDLE hService;
char acDriverPath[256];
HANDLE hDevice;
BOOL DevControl;
DWORD dwBytesReturned;
LPVOID adwInBuffer, adwOutBuffer;
char stroka[7];
PARTITION_INFORMATION_EX pex; // структура устройства
BOOL bResult;
hDevice = CreateFile("\\\\.\\sldevGet",
if (hDevice != 0){
DevControl
= DeviceIoControl(hDevice,IOCTL_
if ((DevControl != 0)&&(dwBytesReturned != 0)){
wsprintf((LPSTR) stroka, "%X", adwOutBuffer);//запись строки в буфер (adwOutBuffer --> stroka)
if (stroka =="00000100") MessageBox(NULL,"Found 1.44 Mb","Yermakov FDD scaner",MB_OK);
else MessageBox(NULL,"Not found","Yermakov FDD scaner",MB_OK);
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
if (hSCManager!=0){
GetFullPathName("beeper.sys",s
// Регистрация музыканта в таблицах SCM
hService=CreateService(
SERVICE_START+DELETE,SERVICE_
SERVICE_ERROR_IGNORE,
if (hService!=0){
StartService(hService, 0, NULL);
DeleteService(hService);
CloseServiceHandle(hService);
}else MessageBox(NULL,"Can't register driver",NULL,MB_ICONSTOP);
CloseServiceHandle(hSCManager)
}else MessageBox(NULL,"Can't connect to SCManager",NULL, MB_ICONSTOP);
}else MessageBox(NULL,"Can't send control code",NULL,MB_OK);
CloseHandle(hDevice);
}else MessageBox(NULL, "Dev is not present", NULL, MB_ICONSTOP);
bResult = GetPartitionNumber (&pex);
if (bResult){ printf("PartitionNumber = %d\n", pex.PartitionNumber );
}else{ printf ("GetPartitionNumber() failed. Error %d.\n", GetLastError());}
system("PAUSE");
return ((int)bResult);
}
Рисунок 3.1. Драйвер из шага 2
Рисунок 3.2. Драйвер из шага 3