Прямой доступ к диску
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.140] |
|
|
Правила раздела Visual Basic: Общие вопросы
FAQ Сайта
FAQ Раздела
Кладовка
Наши Исходники
API-Guide
Поиск по Разделу
MSDN Library Online
Google| Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
Прямой доступ к диску
|
Сообщ.
#16
,
|
|
|
|
Цитата Velin @ Хм.А что помогать? Прототипы функций у тебя есть? Описания? Ну вообще, если хочеш, давай в асю<203-529-473>, поболтаем. Нет к сожалению у меня нет ни деклараций функций, ни типов. Т.е. по работе с файлами через Zw функйии вообще ничего нет. 2 ALXR У меня твой код показывает серийник 0000 - 0100 - это явно не серийник =( |
|
Сообщ.
#17
,
|
|
|
|
Цитата SCINER @ Цитата Velin @ Хм.А что помогать? Прототипы функций у тебя есть? Описания? Ну вообще, если хочеш, давай в асю<203-529-473>, поболтаем. Нет к сожалению у меня нет ни деклараций функций, ни типов. Т.е. по работе с файлами через Zw функйии вообще ничего нет. 2 ALXR У меня твой код показывает серийник 0000 - 0100 - это явно не серийник =( Ах, ну да, забыл дополнить. Этот адрес ФС-зависимый. На дисках с FAT32 у меня возвращается верный серийный номер, а на NTFS то же самое 0000 - 0100. В NTFS он лежит по адресу 48h. Вот, работающий на NTFS код: ![]() ![]() 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("\\.\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, 73, 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 2Velin: а) то что хранится у скинера в переменной MBR это никакая не MBR(он сам это сказал) - увы и ах, но это все-таки MBR. В этом вопросе, по-видимому, Вы не очень компетенты и поэтому воздержитесь от резких высказываний. б) И как следствие, приведенное вами "доказательство" наличия в MBR серийного номера не верно - доказательство (без кавычек!) выше. |
|
Сообщ.
#18
,
|
|
|
|
Цитата Говорить это не черное а белое это конечно весьма аргументированно. увы и ах, но это все-таки MBR. Цитата Кажеться, я где то уже описывал свойство некоторых людей выдавать свое невежество за невежество других.В этом вопросе, по-видимому, Вы не очень компетенты ------ 2SCINER, я не знаю, какие прототипы у Zw-функций в um(вероятно, такие же), но в km прототип такой: ![]() ![]() NTSTATUS ZwCreateFile( OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength ); NTSTATUS ZwOpenFile( OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG ShareAccess, IN ULONG OpenOptions ); |
|
Сообщ.
#19
,
|
|
|
|
Цитата Velin @ Цитата Говорить это не черное а белое это конечно весьма аргументированно. увы и ах, но это все-таки MBR. Цитата Кажеться, я где то уже описывал свойство некоторых людей выдавать свое невежество за невежество других.В этом вопросе, по-видимому, Вы не очень компетенты 1. Я считаю, что выше приведенный мною код вполне аргументирует мое высказывание. Сделайте резервную копию MBR с помощью какой-либо программы по работе с жесткими дисками и сравните полученные данные. 2. "Стрелки переводить" - не хорошо. В последнем Вашем сообщении не вижу ничего, что противоречит предыдущему моему сообщению, однако Вы продолжаете "гнуть" свое. Чье же здесь невежество? Кстати, номер <203-529-473> не найден. Я бы хотел пообщаться с Вами в icq. |
|
Сообщ.
#20
,
|
|
|
|
2SCINER: У тебя объявления NtCreateFile есть? Где ты ее будеш использовать?
2ALXR:Тогда дай свой, если не найден. А что противоречит - ты в своем коде читаеш header логического диска, видиш там серийный номер. Так? А потом вдруг утверждаеш, что серийный номер хранится в MBR |
|
Сообщ.
#21
,
|
|
|
|
Основные недостатки:
ALXR, в твоем коде вылазит месаг бокс и пишет что мол такой-то такой-то серийный номер устройства... Так какого устройства? Если жесткача, то какого? если их ДВА в системе и где второй серийник? Velin!!! ALXR!!! Развели тут спор! для чего вам приват?! спорьте там Добавлено Опять форум глючит |
|
Сообщ.
#22
,
|
|
|
|
Цитата Не устройства, а логического диска. Из кода лекго понять, что это серийный номер диска C. такой-то такой-то серийный номер устройства. |
|
Сообщ.
#23
,
|
|
|
|
а чем ZwQueryDirectoryFile не утраивает? |
|
Сообщ.
#24
,
|
|
|
|
Цитата Алиса @ а чем ZwQueryDirectoryFile не утраивает? устроит, если примерчиком поделишься или почитать чего нить подкинешь по теме |
|
Сообщ.
#25
,
|
|
|
|
в архиве простой пример перечисления без FindFile...
но на счет скрытия ZwQueryDirectoryFile надо перехватывать (хорошо бы на уровне системы в r0). здесь VB не катит:( блин, файл не цепляется. архив тебе в мыло ушел. |
|
Сообщ.
#26
,
|
|
|
|
Цитата Алиса @ в архиве простой пример перечисления без FindFile... но на счет скрытия ZwQueryDirectoryFile надо перехватывать (хорошо бы на уровне системы в r0). здесь VB не катит:( блин, файл не цепляется. архив тебе в мыло ушел. Спасибо, будем посмотреть. А зачем перехватывать, я просто хотел нарушить немного структуру файла, чтобы его вообще не видели никто кроме меня. |
|
Сообщ.
#27
,
|
|
|
|
Цитата А вас не беспокоит, что в один прекрасный момент драйвер файловой системы то же "не увидит" Ваш файл и запишет на его место что-нибудь еще? А зачем перехватывать, я просто хотел нарушить немного структуру файла, чтобы его вообще не видели никто кроме меня. |
|
Сообщ.
#28
,
|
|
|
|
Цитата Velin @ Цитата А вас не беспокоит, что в один прекрасный момент драйвер файловой системы то же "не увидит" Ваш файл и запишет на его место что-нибудь еще?А зачем перехватывать, я просто хотел нарушить немного структуру файла, чтобы его вообще не видели никто кроме меня. Но Windows не запишет в занятый сектор. А файл ведь можно уместить и просто в частично занятом секторе. |
|
Сообщ.
#29
,
|
|
|
|
Цитата Ну вообщето, ячейки для файлов в ФС называются кластерами. Как раз записать в частично занятый сектор Windows может запрасто. Проблема в том, что checkdisk может увидеть файл, запись о котором есть в ФС, но которого нету не в одной папке. И как Вы думаете, что он с ним сделает? Но Windows не запишет в занятый сектор |
|
Сообщ.
#30
,
|
|
|
|
Цитата И как Вы думаете, что он с ним сделает? ни чего!! такой метод применяеться при очистке оглавления. т.е. очистке таблицы файлов. просто файловая система может подумать что на этом месте пусто и записать туда новые данные. помоему такая фишка вообше на NTFS не получиться. SCINER, а ты выдел где ни нить такую реализацию?? |