Прямой доступ к диску
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.140] |
|
|
Правила раздела Visual Basic: Общие вопросы
FAQ Сайта
FAQ Раздела
Кладовка
Наши Исходники
API-Guide
Поиск по Разделу
MSDN Library Online
Google| Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
Прямой доступ к диску
|
Сообщ.
#1
,
|
|
|
|
Набросал функцию.
ВОпросик, можно ли таким методом найти и скрыть файл с диска ??? Найти, т.е. по имени, но не функциями FindFirst ... ![]() ![]() Option Explicit Private Const OPEN_EXISTING = 3 Private Const FILE_SHARE_READ = &H1 Private Const FILE_SHARE_WRITE = &H2 Private Const GENERIC_READ = &H80000000 Private Const GENERIC_WRITE = &H40000000 Private Type OVERLAPPED Internal As Long InternalHigh As Long offset As Long OffsetHigh As Long hEvent As Long End Type Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long Private Sub Form_Load() Dim MBR() As Byte Dim OV As OVERLAPPED Dim br As Long Dim hDrive As Long ReDim MBR(0 To 511) 'hDrive = CreateFile("\\.\PHYSICALDRIVE0", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) hDrive = CreateFile("\\.\C:", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) Caption = Err.LastDllError Call SetFilePointer(hDrive, 0, 0, 0) Call ReadFile(hDrive, MBR(0), 512, br, OV) Call CloseHandle(hDrive) Text1.Text = Replace(StrConv(MBR, vbUnicode), vbNullChar, "+") End Sub |
|
Сообщ.
#2
,
|
|
|
|
Читает ли этот код серийник диска ?
Прикреплённый файл HDD_READ.zip (1.98 Кбайт, скачиваний: 107)
|
|
Сообщ.
#3
,
|
|
|
|
Найти то можно, но для этого придется учитывать особенности каждой файловой системы.
А вот скрыть. Это как? написать файл в пустое место? И еще, по твоему в массиве MBR() хранится MBR диска, или почему ту его так назвал? |
|
Сообщ.
#4
,
|
|
|
|
Цитата Velin @ Найти то можно, но для этого придется учитывать особенности каждой файловой системы. А вот скрыть. Это как? написать файл в пустое место? И еще, по твоему в массиве MBR() хранится MBR диска, или почему ту его так назвал? Да просто я сначала MBR туда писал, потом так и осталось название |
|
Сообщ.
#5
,
|
|
|
|
|
Сообщ.
#6
,
|
|
|
|
|
Сообщ.
#7
,
|
|
|
|
у кого нить есть пример использования функций ZwCreateFile или ZwOpenFile
|
|
Сообщ.
#8
,
|
|
|
|
Цитата Zhenya @ Цитата SCINER @ Читает ли этот код серийник диска ? Вот, выдает какую-то муть (xp sp2) в системе ДВА жестких - матер и слэйв. Это не муть, это и есть MBR. 2SCINER: Картинки не грузяццо. |
|
Сообщ.
#9
,
|
|
|
|
Цитата ALXR @ Это не муть, это и есть MBR. Какая МВR? Я про серийник - там пусто! |
|
Сообщ.
#10
,
|
|
|
|
Цитата ALXR @ Цитата Zhenya @ Цитата SCINER @ Читает ли этот код серийник диска ? Вот, выдает какую-то муть (xp sp2) в системе ДВА жестких - матер и слэйв. Это не муть, это и есть MBR. 2SCINER: Картинки не грузяццо. ![]() На работе у меня грузились. Сейчас вот дома смотрю, тоже грузятся. Скорее всего это что-то у тебя. Ну так что, кто нить может помочь с ZwOpenFile ZwCreateFile на VB ? |
|
Сообщ.
#11
,
|
|
|
|
Хм.А что помогать? Прототипы функций у тебя есть? Описания? Ну вообще, если хочеш, давай в асю<203-529-473>, поболтаем.
|
|
Сообщ.
#12
,
|
|
|
|
Цитата Zhenya @ Цитата ALXR @ Это не муть, это и есть MBR. Какая МВR? Я про серийник - там пусто! Серийный номер тома в байтах, а не в виде человеко-понятных символов. См. документацию по MBR. |
|
Сообщ.
#13
,
|
|
|
|
Цитата Сколь это не прикольно, но в данной ситуации эта стандартная фраза звучит довольно комично. Ибо вся документация по MBR заключается в этом обрывке:См. документацию по MBR. ![]() ![]() typedef struct tagMBR { char res[444]; PARTITION partno[4]; DWORD signature; }MBR; И где, тут серийный номер? |
|
Сообщ.
#14
,
|
|
|
|
Цитата Velin @ Цитата Сколь это не прикольно, но в данной ситуации эта стандартная фраза звучит довольно комично. Ибо вся документация по MBR заключается в этом обрывке:См. документацию по MBR. ![]() ![]() typedef struct tagMBR { char res[444]; PARTITION partno[4]; DWORD signature; }MBR; И где, тут серийный номер? Уважаемый Velin, не стоит так скептически относится ко всему сказанному на форуме. Если Вам не удается найти нужные данные, то это не значит, что их там нет. Следующие операции вполне дают исчерпывающую информацию: ![]() ![]() C:\>LABEL C: Том в устройстве C: имеет метку LABEL Серийный номер тома: X1X2-X3X4 Метка тома (11 символов, ENTER - метка не нужна): Удалить текущую метку тома [Y(да)/N(нет)]? n Далее, в данных, возвращаемых с помощью процедуры SCINER'а из первого сообщения, можно найти байты X4, X3, X2, X1 (обращаю внимание, что они идут В ОБРАТНОМ ПОРЯДКЕ, как это обычно принято) по смещению 43h. Следующий код выводит серийный номер тома: ![]() ![]() Option Explicit Private Const OPEN_EXISTING = 3 Private Const FILE_SHARE_READ = &H1 Private Const FILE_SHARE_WRITE = &H2 Private Const GENERIC_READ = &H80000000 Private Const GENERIC_WRITE = &H40000000 Private Type OVERLAPPED Internal As Long InternalHigh As Long offset As Long OffsetHigh As Long hEvent As Long End Type Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long Private Sub Form_Load() Dim MBR() As Byte Dim OV As OVERLAPPED Dim br As Long Dim hDrive As Long, s As String, serial As String ReDim MBR(0 To 511) 'hDrive = CreateFile("\\.\PHYSICALDRIVE0", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) hDrive = CreateFile("\\.\C:", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) Call SetFilePointer(hDrive, 0, 0, 0) Call ReadFile(hDrive, MBR(0), 512, br, OV) Call CloseHandle(hDrive) s = StrConv(MBR, vbUnicode) serial = Mid(s, 68, 4) MsgBox "Серийный номер устройства: " & ClipHex(Mid(serial, 4, 1)) & ClipHex(Mid(serial, 3, 1)) & _ " - " & _ ClipHex(Mid(serial, 2, 1)) & ClipHex(Mid(serial, 1, 1)) End End Sub Function ClipHex(ByVal s As String) As String If s <> "" Then ClipHex = Right("00" & Hex(Asc(Left(s, 1))), 2) End Function PS: Уважаемый Velin, прошу впредь высказываться в темах менее категорично. Это оскорбляет. Спасибо за внимание. |
|
Сообщ.
#15
,
|
|
|
|
Цитата Уважаемый ALXR прошу Вас впредь читать содержимое топика. Это отсеит многие вопросы. Тогда вам станет понятно, чтоPS: Уважаемый Velin, прошу впредь высказываться в темах менее категорично а) то что хранится у скинера в переменной MBR это никакая не MBR(он сам это сказал) б) И как следствие, приведенное вами "доказательство" наличия в MBR серийного номера не верно ![]() Цитата А я и не отношусь. Рекомендую Вам брать пример, скажем с Васи, он хоть и модератор, не считает для себя почему-то оскорбительным, если его поправят. И даже признает, если вдруг нечянно ошибется(привести линк?). А вы почему-то начинаете возмущаться, что вас обижают. Лучше бы доказали, что правы. Уважаемый Velin, не стоит так скептически относится ко всему сказанному на форуме |