Разработка драйверов под Windows

Автор работы: Пользователь скрыл имя, 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

Содержимое работы - 1 файл

КР_СПО_ЕрмаковNew.doc

— 388.73 Кб (Скачать файл)

return ((int)bResult);

}

    1. Шаг 4

1) Объединить всю функциональность, разработанную на шагах 1-3, в один комплекс программ.

Заключительный комплекс должен выглядеть следующим образом:

- Наш драйвер встраивается  в систему и загружается на  этапе загрузки Windows.

- Приложение запрашивает  у драйвера необходимую (заданную  на этапе 2) информацию, драйвер  передает эту информацию, при  этом также включается динамик  на некоторое время и проигрывается  мелодия (заданная на этапе  1). Затем в приложении производится  запрос к существующему в системе  драйверу (в соответствии с вариантом  к этапу 3). 

2) Оформить пояснительную  записку, в которой должны быть  описаны все 4 этапа, а также  – теоретические сведения для  каждого этапа. 

 

#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_INFORMATION_EX  *pex)

{

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_EX,      // выполняемая операция

                    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",GENERIC_READ+GENERIC_WRITE,0, NULL,OPEN_EXISTING, 0, NULL);

if (hDevice != 0){

        DevControl = DeviceIoControl(hDevice,IOCTL_GET,&adwInBuffer, sizeof(adwInBuffer),&adwOutBuffer,sizeof(adwOutBuffer), &dwBytesReturned,NULL);

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",sizeof acDriverPath,acDriverPath,NULL);

// Регистрация музыканта в таблицах SCM

hService=CreateService(hSCManager,"beeper11","Nice Melody Beeper11",

SERVICE_START+DELETE,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,

SERVICE_ERROR_IGNORE,acDriverPath,NULL,NULL,NULL,NULL,NULL);

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

}

 

  1. Работа приложения

 

Рисунок 3.1. Драйвер из шага 2

Рисунок 3.2. Драйвер из шага 3


Информация о работе Разработка драйверов под Windows