С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 27

Работа с диском WIN API DeviceIoControl

22.12.2022, 14:02. Показов 2520. Ответов 8

Студворк — интернет-сервис помощи студентам
Вот само задание
1)Количество байтов в секторе своего диска получить с помощью функции WIN API DeviceIoControl
2)Прочитать MBR (LBA0), GPT-заголовок (LBA1) своего жесткого диска и сохранить в файле.
Работать с физическим устройством, читать сектор. Процедуры чтения и записи должны быть написаны на ассемблере.
Открыть физический или логический диск с помощью CreateFile() с именами устройств
\\.\PhysicalDriveN -для физического диска
где N — 0, 1, 2 и т. д., соответствующее каждому из физических дисков в системе.
\\.\X: - для логического диске
где X: — буква раздела жесткого диска, дисковода гибких дисков или компакт-диска.
3)Вывести полученные данные на экран в шестнадцатеричном виде
Вот реализация
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
.686
.MODEL          FLAT, C
 
OPTION casemap: none
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
 
include \masm32\include\windows.inc
 
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
 
 
 
.DATA
    diskName                                DB              "\\.\PHYSICALDRIVE0", 0
    fileName                                DB              "C:\Users\L-PC\Desktop\Sector.txt", 0
    diskHandle                              DWORD           0
    fileHandle                              DWORD           0
    maxBytesAllowed                         DWORD           1024
    bytesWritten                            DWORD           0
    buffer                                  DB              1024 DUP(0)
 
.CODE       
    main PROC
        PUSH    0                           ; No template file needed               diskHandle = CreateFileA(&diskName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)
        PUSH    80h                         ; == FILE_ATTRIBUTE_NORMAL
        PUSH    3                           ; == OPEN_EXISTING
        PUSH    NULL                        ; No security attributes required
        PUSH    3                           ; == FILE_SHARE_READ | FILE_SHARE_WRITE
        PUSH    080000000h                  ; == GENERIC_READ
        PUSH    OFFSET diskName             ; Disk name
        CALL    CreateFileA                 ; Making a handler
        MOV     diskHandle, eax             ; and saving it
 
        PUSH    0                           ; No async data buffer specified        ReadFile(diskHandle, *buffer, maxBytesAllowed, *bytesWritten, NULL)
        PUSH    OFFSET bytesWritten         ; Bytes actually read
        PUSH    maxBytesAllowed             ; Bytes TO read
        PUSH    OFFSET buffer               ; Data buffer
        PUSH    diskHandle                  ; Disk handle
        CALL    ReadFile                    ; Reading
 
        PUSH    diskHandle                  ; Closing handle                        CloseHandle(diskHandle)
        CALL    CloseHandle                 ; after usage
 
        COMMENT @
            PUSH    0                           ; No template file needed               diskHandle = CreateFileA(*diskName, GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)
            PUSH    80h                         ; FILE_ATTRIBUTE_NORMAL
            PUSH    OPEN_ALWAYS                 ; Open existing file
            PUSH    NULL                        ; No security
            PUSH    0                           ; No share mode
            PUSH    GENERIC_WRITE               ; Common writing mode
            PUSH    OFFSET diskName             ; Disk name
            CALL    CreateFileA                 ; Making a handler for writing
            MOV     diskHandle, eax             ; Storing it
 
            PUSH    0                           ; (Reserved value)                      WriteFile(fileHandle, *fileHandle, maxBytesAllowed, *bytesWritten, NULL)
            PUSH    OFFSET bytesWritten         ; Bytes actually written
            PUSH    maxBytesAllowed             ; Max bytes allowed to write
            PUSH    OFFSET buffer               ; Data buffer
            PUSH    fileHandle                  ; From file
            CALL    WriteFile                   ; Writing data
 
            PUSH    fileHandle                  ; Closing handle                        CloseHandle(fileHandle)
            CALL    CloseHandle                 ; after usage
        @
 
        PUSH    0                           ; Exiting program                       ExitProcess(0)
        CALL    ExitProcess                 ; with success code '0'
    main ENDP
    end main
END
Я получаю следующие ошибки
LNK2019 ссылка на неразрешенный внешний символ _CloseHandle в функции _main. masm_3_lab
LNK2019 ссылка на неразрешенный внешний символ _СreateFileA в функции _main. masm_3_lab
LNK2019 ссылка на неразрешенный внешний символ _ExitProcess в функции _main. masm_3_lab
LNK2019 ссылка на неразрешенный внешний символ _ReadFile в функции _main. masm_3_lab

Работаю в учетной записи администратора
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2022, 14:02
Ответы с готовыми решениями:

API DeviceIoControl
В оригинальном коде с примером (рабочий код): WINBASEAPI BOOL WINAPI DeviceIoControl( _In_ HANDLE hDevice, _In_...

Описание API DeviceIoControl
подскажите где взять подробное описание функции DeviceIoControl (тут не далеко была эта тема - дали ссылку, но там пусто)

Работа с win API
Подскажите пожалуйста где и что можно почитать, что бы разобраться что такое API и с чем его едят. Я раньше с API не как не работал.

8
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
22.12.2022, 15:57
Компилируется без ошибок.
Команды компиляции
Windows Batch file
1
2
c:\masm32\bin\ml.exe /Fl /c /coff /X masm_3_lab.asm
c:\masm32\bin\link.exe /SUBSYSTEM:CONSOLE masm_3_lab.obj
Думаю, что ошибку нужно искать в командной строке компиляции, т.к. сам исходник - корректен.
1
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 27
22.12.2022, 18:03  [ТС]
Странно но после вашего решения оно теперь выдает invalid character in file в 1 и 2 строке и line too long в 2 строке , хотя у вас компилиурется
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
22.12.2022, 18:24
Это больше похоже на компиляцию файла в формате Plain text Unicode.
Сохраните в кодировке ANSI или CP1251.
1
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 27
24.12.2022, 10:10  [ТС]
ФедосеевПавел сохранялось и так в ANSI (
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
24.12.2022, 19:38
Чудес не бывает.
Тогда архивируйте исходник и прикрепляйте его к сообщению - при помощи "кнопки" с изображением скрепки.
1
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 27
25.12.2022, 12:23  [ТС]
masm_3_lab.zip прикрепил
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
25.12.2022, 13:31
Лучший ответ Сообщение было отмечено radZZe как решение

Решение

Вы компилируете не 32-разрядной, а 64-разрядной версией ml.
Я не знаю, как настраивать VS для работы с ассемблером, подсказать не могу.

Скачайте masm32 с сайта https://www.masm32.com, запускайте qeditor и из него компилируйте консольное (не GUI) приложение. Или пакетным файлом, что я показал. Возможно, потребуется дополнить пакетный файл командами описания переменных окружения, но до этого нужно дойти.
Можно, конечно, и из VS, но потребуется вручную описывать WinAPI функции - а для изучения ассемблера это лишняя морока.
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6206 / 2441 / 402
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
31.12.2022, 17:28
Цитата Сообщение от radZZe Посмотреть сообщение
1)Количество байтов в секторе своего диска получить с помощью функции WIN API DeviceIoControl
так а где работа через DeviceIoControl(), как указано в названии темы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.12.2022, 17:28
Помогаю со студенческими работами здесь

Работа с клавиатурой win api
case WM_PAINT: hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rect); InvalidateRect(hWnd, NULL, TRUE); hdc =...

WIN API C++ Работа с FAT
Доброго времени суток. У меня задание: Программа просматривает все каталоги в поисках файлов с одинаковым именем, после чего...

WIN API Работа с функциями
И снова я, тут решил попробывать попрограммировать на WINAPI но столкнулся с проблемой в VS2005 Как использовать функции ? допустим ...

Работа с устройством через Win API
Переделываю статичный lib написанный в Builder на си шарп. Код открывает устройство и работает с ним через драйвер. Первую функцию...

Работа с файлами средствами Win API.
Написать программу , которая отображает информацию об используемых файлах и режимах работы с ними в текстовом виде. Добавлено через 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru