Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - IOCTL_DISK_GET_DRIVE_LAYOUT_EX возможно ли на VB6

Ответить
Настройки темы
Win32 API - IOCTL_DISK_GET_DRIVE_LAYOUT_EX возможно ли на VB6

Аватара для sosed213

Пользователь


Сообщения: 86
Благодарности: 19


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Тема изначально была созданна на http://bbs.vbstreets.ru , чтобы увеличить шанс решения проблемы дублирую тему на OSZone

Я пишу прогу что то типо diskpart.exe только с большими возможностями.
Для начала хочу разобраться с большинством функция типа IOCTL_*

Уже научился и разобрался с этими функциями.
IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
IOCTL_STORAGE_GET_DEVICE_NUMBER
IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER
IOCTL_DISK_GET_LENGTH_INFO
IOCTL_DISK_GET_DRIVE_GEOMETRY

Затык начался на этих функциях:
IOCTL_DISK_GET_DRIVE_LAYOUT_EX
IOCTL_DISK_GET_PARTITION_INFO_EX

Точнее проблема в структуре данных DRIVE_LAYOUT_INFORMATION_EX и PARTITION_INFORMATION_EX
Не получается, видимо, ее правильно описать.

Зато если я делаю так, то все успешно:

Код: Выделить весь код
Dim temp(4096) As Byte
If DeviceIoControl(hDrive, IOCTL_DISK_GET_PARTITION_INFO_EX, ByVal 0&, 0, temp(0), 4096, dwOutBytes, ByVal 0&) Then
   MsgBox "Good!"
Else
   MsgBox "Failed!"
End If

так я и понял что проблема в структуре.


Код: Выделить весь код
Private Enum PARTITION_STYLE
   PARTITION_STYLE_MBR = 0
   PARTITION_STYLE_GPT = 1
   PARTITION_STYLE_RAW = 2

Private Type DRIVE_LAYOUT_INFORMATION_MBR
   Signature As Long
End Type

Private Type DRIVE_LAYOUT_INFORMATION_GPT
   DiskId As Long
   StartingUsableOffset As Long
   UsableLength As Long
   MaxPartitionCount As Long
End Type

Private Type PARTITION_INFORMATION_EX
   PartitionStyle As PARTITION_STYLE
   StartingOffset As Long
   PartitionLength As Long
   PartitionNumber As Long
   RewritePartition As Boolean
   Mbr As PARTITION_INFORMATION_MBR
   Gpt As PARTITION_INFORMATION_GPT
End Type

Private Type DRIVE_LAYOUT_INFORMATION_EX
   PartitionStyle As PARTITION_STYLE
   PartitionCount As Long
   Mbr As PARTITION_INFORMATION_MBR
   Gpt As PARTITION_INFORMATION_GPT
   PartitionEntry(1) As PARTITION_INFORMATION_EX
End Type

Скажу сразу, что эта проблема в инете есть, но мало кто этим занимается.
Буду рад если кто поможет.

Если проблему решить не удастся то наверно придется вручную копать и разбирать MBR (читал тут )

-------
Перед тем как задавать вопросы, медленно посчитайте про себя до десяти!!!


Отправлено: 07:14, 21-02-2012

 

Новый участник


Сообщения: 21
Благодарности: 8

Профиль | Отправить PM | Цитировать


Свой string написать можно в полчаса , это обертка для типа array char c перегруженными операциями =, + , -, >=, >, ==, <, <=,etc..
а так называем string , о котором Вы отозвались как о нормальном есть часть STL - Standard Templete Library. Для понимая которой необходимо знать что такое " языковая объектность". При решении данной задачи, о которой было указано в теме , достаточно "процедурной парадигмы" , чтобы не тратить время на освоения мира объектов со всеми вытекающими.

Я останусь на своем мнении и предложу автору топика все же читать Кернигана и Ричи - ибо это авторы языка Си и лучшей книги по Си нет и быть не может.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:18, 29-02-2012 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата alex_03:
Я останусь на своем мнении и предложу автору топика все же читать Кернигана и Ричи - ибо это авторы языка Си и лучшей книги по Си нет и быть не может. »
вообще-то речь идет о с++, но это к слову

Цитата alex_03:
а так называем string , о котором Вы отозвались как о нормальном есть часть STL - Standard Templete Library. »
STL часть стандарта с++, а вот это
Цитата alex_03:
Для понимая которой необходимо знать что такое " языковая объектность". »
не понятно, поясните

Отправлено: 00:00, 01-03-2012 | #12


Новый участник


Сообщения: 21
Благодарности: 8

Профиль | Отправить PM | Цитировать


мы говорим не по теме - оффтоп ,
не хочу развивать тему о языке С++. Для решения поставленной задачи человеку знающему vb необходимо подучить язык си , для этого я указал что читать и что ставить. Чтобы не учиться слишком долго и решить задачу в максимально короткий срок. Программируем не ради программирования , а для написания какого-то софта. И так как при программировании с Windows API с++ не нужен - он будет избыточным , достаточно Си. При желании потом можно расширить свои знания в любое направление. "Языковая объектность" - я так называю ООП.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:08, 01-03-2012 | #13


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата alex_03:
Программируем не ради программирования , а для написания какого-то софта »
+

Отправлено: 00:32, 01-03-2012 | #14


Аватара для sosed213

Пользователь


Сообщения: 86
Благодарности: 19

Профиль | Сайт | Отправить PM | Цитировать


alex_03, будет ли программа откомпилированная в Visual Studio 2010 Express C++ работать в среде PE, без интеграции в PE среду компонентов .NET ?

Просто предполагается что программа должна будет работать без установки, запуском одного exe-файла.

-------
Перед тем как задавать вопросы, медленно посчитайте про себя до десяти!!!


Последний раз редактировалось sosed213, 01-03-2012 в 06:37. Причина: добавление инф.


Отправлено: 06:36, 01-03-2012 | #15


Новый участник


Сообщения: 21
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата sosed213:
alex_03, будет ли программа откомпилированная в Visual Studio 2010 Express C++ работать в среде PE, без интеграции в PE среду компонентов .NET ?
Просто предполагается что программа должна будет работать без установки, запуском одного exe-файла. »

при программировании создавайте обычный проект.

Есть возможность скомпилировать в native код и manage код. Нативный(native) - он же "обычный", это когда компилируется в машинные коды Ваш С++ код. Работать должно везде - по сути. Управляемый(Manage) - это когда код С++ компилируется в промежуточный "байт-код" (CIL , IL , MCIL - по разному называется ) - работает только там этот код где стоит виртуальная машина .net причем той версии (1, 2 ,3 ,4 ) - какой версии код. Вам нужно только писать чистый "си - код" и вызывать чистый "си- код" Windows про net забудьте
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:57, 01-03-2012 | #16


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


выбираете проект win32, в мастере ставите галку пустой проект, в обозревателе решений правой кнопкой мыши на проекте -> добавить, добавляете файл с++
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:59, 01-03-2012 | #17



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - IOCTL_DISK_GET_DRIVE_LAYOUT_EX возможно ли на VB6

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - ListView в VB6 Synthetyic_Man Программирование и базы данных 1 11-05-2010 05:52
Странные глюки VB6 krapar Программирование и базы данных 3 19-04-2006 12:11
Прога в VB6 DevilHaker Программирование и базы данных 2 12-09-2004 03:33
Доступ к FTP из VB6 Iskatell Программирование и базы данных 2 29-05-2004 02:31
ComboBox в VB6 Vitki Программирование и базы данных 1 12-05-2004 10:08




 
Переход