"DeviceIoControl error", "Error", 0); 2;
} (hDevice); 0;
}
Розбір прикладу
// 1st part
Оголошуються змінні, необхідні для роботи програми. PARTITION_INFORMATION_EX це структура, яка описує інформацію про розділ жорсткого діска.struct {_STYLE PartitionStyle;// формат раздела_INTEGER StartingOffset;// зміщення початку раздела_INTEGER PartitionLength;// розмір разделаPartitionNumber;// номер разделаRewritePartition;// якщо розділ перезаписуваний то TRUE {_INFORMATION_MBR Mbr ;// додаткова інформація MBR Style раздела_INFORMATION_GPT Gpt;// додаткова інформація GPT Style розділу
};
} PARTITION_INFORMATION_EX;
// 2nd part
У цій частині програми викликається функція CreateFileA для отримання маніпулятора, який записується в змінну hDevice.
// 3rd part
Синхронно викликається функція DeviceIoControl. Їй передаються:
дескриптор пристрою; код IOCTL_DISK_GET_PARTITION_INFO_EX;
покажчик на вхідний буфер, NULL в нашому випадку;
розмір вхідного буфера;
покажчик на вихідний буфер;
розмір вихідного буфера;
покажчик на змінну типу DWORD, в якій буде зберігатися кількість повертаються байтів;
покажчик на структуру OVERLAPPED, яка використовується для асинхронного виклику функції.
Після повернення управління, у разі успішного завершення функції, в структурі PARTITION_INFORMATION_EX зберігається інформація про розділ.
// 4th part
Виробляється аналіз і висновок інформації. Перед поверненням управління операційній системі можна закрити відкриті дескриптори. Це дозволяє зробити функція CloseHandle (__in HANDLE). Якщо дескриптори не закрили, то це зробить операційна система за Вас. br/>
2. Виконання курсової роботи
.1 Крок 1
Завдання: 1. Розробити драйвер ядра з доступом до портів, що виконує дії відповідно до варіанту і здійснює виведення інформації у вікно Debug View (за варіантом), а також додаток, що запускає драйвер.
7Воспроізвесті 7 сигналів однакової тривалості з постійною частотою звучання.
Лістинг Kurs_test.cpp
# include "stdafx.h"
# include "windows.h"
# include "stdlib.h" _tmain (int argc, _TCHAR * argv []) {_HANDLE hSCManager; _HANDLE hService; acDriverPath [256]; = OpenSCManager (NULL, NULL, SC_MANAGER_CREATE_SERVICE); ( hSCManager! = 0...