Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
popzow
1

Floppy LowLevelFormat c DeviceIoControl (IOCTL_DISK_FORMAT_TRACKS)

08.07.2012, 23:45. Показов 865. Ответов 2
Метки нет (Все метки)

может кто- нибуть знает в чем ошибка?
VB.NET
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
<StructLayout(LayoutKind.Sequential)> _
        Public Structure FORMAT_PARAMETERS
            Public MediaType As MEDIA_TYPE
            Public StartCylinderNumber As ULong
            Public EndCylinderNumber As ULong
            Public StartHeadNumber As ULong
            Public EndHeadNumber As ULong
        End Structure
 
        Declare Function DeviceIoControl Lib "kernel32" Alias "DeviceIoControl" _
          ( _
        <[In]()> ByVal hDevice As SafeFileHandle, _
        <[In]()> ByVal dwIoControlCode As IoCtlControlCode, _
        <[In](), [Out]()> ByVal lpInBuffer As IntPtr, _
        <[In]()> ByVal nInBufferSize As UInteger, _
        <[In](), [Out]()> ByVal lpOutBuffer As IntPtr, _
        <[In]()> ByVal nOutBufferSize As UInteger, _
        <[In]()> ByRef lpBytesReturned As UInteger, _
        <[In]()> ByVal lpOverlapped As IntPtr _
        ) As <MarshalAs(UnmanagedType.Bool)> Boolean
 
        Declare Function DeviceIoControl Lib "kernel32" Alias "DeviceIoControl" _
          ( _
        <[In]()> ByVal hDevice As SafeFileHandle, _
        <[In]()> ByVal dwIoControlCode As IoCtlControlCode, _
        <[In](), [Out]()> ByVal lpInBuffer As FORMAT_PARAMETERS, _
        <[In]()> ByVal nInBufferSize As UInteger, _
        <[In](), [Out]()> ByVal lpOutBuffer As IntPtr, _
        <[In]()> ByVal nOutBufferSize As UInteger, _
        <[In]()> ByRef lpBytesReturned As UInteger, _
        <[In]()> ByVal lpOverlapped As IntPtr _
        ) As <MarshalAs(UnmanagedType.Bool)> Boolean
 
Public Shared Function LowLevelFormat(ByVal hDisk As SafeFileHandle, ByVal _
  lpGeometry As DISK_GEOMETRY) As Boolean
            Dim FormatParameters As FORMAT_PARAMETERS
            Dim ReturnedByteCount As Long
 
            Dim IOCTL_DISK_FORMAT_TRACKS As Integer = &H7C018
            Dim FSCTL_LOCK_VOLUME As UInt32 = &H90018
            Dim FSCTL_UNLOCK_VOLUME As UInt32 = &H9001C
 
 
            FormatParameters.MediaType = lpGeometry.MediaType
            FormatParameters.StartCylinderNumber = 0
            FormatParameters.StartHeadNumber = 0
            FormatParameters.EndCylinderNumber = lpGeometry.Cylinders.QuadPart _
              - 1
            FormatParameters.EndHeadNumber = lpGeometry.TracksPerCylinder - 1
 
 
            Dim ptrSize As Integer = Marshal.SizeOf(GetType(FORMAT_PARAMETERS))
            Dim outBuffer As IntPtr = Marshal.AllocHGlobal(ptrSize)
 
 
            DeviceIoControl(hDisk, FSCTL_LOCK_VOLUME, IntPtr.Zero, &H0, _
              IntPtr.Zero, &H0, ReturnedByteCount, IntPtr.Zero)
 
            DeviceIoControl(hDisk, IOCTL_DISK_FORMAT_TRACKS, FormatParameters, _
              Marshal.SizeOf(FormatParameters), outBuffer, ptrSize, _
              ReturnedByteCount, 0)
 
            DeviceIoControl(hDisk, FSCTL_UNLOCK_VOLUME, IntPtr.Zero, &H0, _
              IntPtr.Zero, &H0, ReturnedByteCount, IntPtr.Zero)
 
            Return True
        End Function

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2012, 23:45
Ответы с готовыми решениями:

Функция DeviceIoControl
Мне нужно полное описание функции DeviceIoControl или подскажите книгу, где можно найти ее описание

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

Работа с CreateFile и DeviceIoControl
Здравствуйте! Возникла такая проблема почему не могу сделать постоянную работу программы которая...

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

2
Почетный модератор
Эксперт .NET
8694 / 3646 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
10.07.2012, 13:12 2
popzow, как минимум стоит проверять что возвращает DeviceIoControl, и вызывать GetLastError в случае FALSE, напишите сюда код ошибки и во время какого вызова DeviceIoControl вернула FALSE.

Пока могу предположить что ошибка во втором DeviceIoControl, почитайте внимательно описание выходного буфера и секцию Return Value в MSDN (ptrSize, имхо, маловат будет).

з.ы. у самого floppy нет.
0
popzow
10.07.2012, 20:05 3
Да действительно ошибка в DeviceIoControl, и перед форматированием вызываю (DeviceIoControl с FSCTL_LOCK_VOLUME)и всё срабатывает.
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2012, 20:05

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Некомпелируеца программа на DeviceIoControl
Здраствуйте, помогите пожалуйсто, нашел в нете код, а он некомпелируеца, вот код: #include...

Через DeviceIoControl отправляется не то сообщение
Добрый день, уважаемые форумчане! Такой вопрос: /*заголовки*/ #define TOC_DATA_TRACK ...

Использование функции DeviceIoControl с кодом IOCTL_SCSI_PASS_THROUGH
Всем доброго времени суток. Пытаюсь передать диску скази запрос для чтения памяти, но есть...

Отправка устройству информации через DeviceIoControl
Теперь пытаюсь разобраться с DeviceIoControl. В прошлой программе с помощью...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.