На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Прямой доступ к диску
    Набросал функцию.
    ВОпросик, можно ли таким методом найти и скрыть файл с диска ???
    Найти, т.е. по имени, но не функциями FindFirst ...
    ExpandedWrap disabled
      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
      Читает ли этот код серийник диска ?
      Прикреплённый файлПрикреплённый файлHDD_READ.zip (1.98 Кбайт, скачиваний: 107)
        Найти то можно, но для этого придется учитывать особенности каждой файловой системы.
        А вот скрыть. Это как? написать файл в пустое место?
        И еще, по твоему в массиве MBR() хранится MBR диска, или почему ту его так назвал?
          Цитата Velin @
          Найти то можно, но для этого придется учитывать особенности каждой файловой системы.
          А вот скрыть. Это как? написать файл в пустое место?
          И еще, по твоему в массиве MBR() хранится MBR диска, или почему ту его так назвал?

          Да просто я сначала MBR туда писал, потом так и осталось название
            Цитата SCINER @
            Читает ли этот код серийник диска ?

            Вот, выдает какую-то муть (xp sp2)
            в системе ДВА жестких - матер и слэйв.
            Прикреплённая картинка
            Прикреплённая картинка
              а вот что у меня.
              почти то-же самое...
              Прикреплённая картинка
              Прикреплённая картинка
                у кого нить есть пример использования функций ZwCreateFile или ZwOpenFile
                  Цитата Zhenya @
                  Цитата SCINER @
                  Читает ли этот код серийник диска ?

                  Вот, выдает какую-то муть (xp sp2)
                  в системе ДВА жестких - матер и слэйв.

                  Это не муть, это и есть MBR.
                  2SCINER: Картинки не грузяццо. :no:
                    Цитата ALXR @
                    Это не муть, это и есть MBR.

                    Какая МВR? Я про серийник - там пусто!
                      Цитата ALXR @
                      Цитата Zhenya @
                      Цитата SCINER @
                      Читает ли этот код серийник диска ?

                      Вот, выдает какую-то муть (xp sp2)
                      в системе ДВА жестких - матер и слэйв.

                      Это не муть, это и есть MBR.
                      2SCINER: Картинки не грузяццо. :no:

                      На работе у меня грузились.
                      Сейчас вот дома смотрю, тоже грузятся.
                      Скорее всего это что-то у тебя.

                      Ну так что, кто нить может помочь с ZwOpenFile ZwCreateFile на VB ?
                        Хм.А что помогать? Прототипы функций у тебя есть? Описания? Ну вообще, если хочеш, давай в асю<203-529-473>, поболтаем.
                        Сообщение отредактировано: Velin -
                          Цитата Zhenya @
                          Цитата ALXR @
                          Это не муть, это и есть MBR.

                          Какая МВR? Я про серийник - там пусто!

                          Серийный номер тома в байтах, а не в виде человеко-понятных символов. См. документацию по MBR. ;)
                            Цитата
                            См. документацию по MBR.
                            Сколь это не прикольно, но в данной ситуации эта стандартная фраза звучит довольно комично. Ибо вся документация по MBR заключается в этом обрывке:
                            ExpandedWrap disabled
                              typedef struct tagMBR {
                                   char res[444];
                                   PARTITION partno[4];
                                   DWORD signature;
                              }MBR;

                            И где, тут серийный номер?
                            Сообщение отредактировано: Velin -
                              Цитата Velin @
                              Цитата
                              См. документацию по MBR.
                              Сколь это не прикольно, но в данной ситуации эта стандартная фраза звучит довольно комично. Ибо вся документация по MBR заключается в этом обрывке:
                              ExpandedWrap disabled
                                typedef struct tagMBR {
                                     char res[444];
                                     PARTITION partno[4];
                                     DWORD signature;
                                }MBR;

                              И где, тут серийный номер?

                              Уважаемый Velin, не стоит так скептически относится ко всему сказанному на форуме. Если Вам не удается найти нужные данные, то это не значит, что их там нет. Следующие операции вполне дают исчерпывающую информацию:
                              ExpandedWrap disabled
                                C:\>LABEL C:
                                Том в устройстве C: имеет метку LABEL
                                Серийный номер тома: X1X2-X3X4
                                Метка тома (11 символов, ENTER - метка не нужна):
                                 
                                Удалить текущую метку тома [Y(да)/N(нет)]? n


                              Далее, в данных, возвращаемых с помощью процедуры SCINER'а из первого сообщения, можно найти байты X4, X3, X2, X1 (обращаю внимание, что они идут В ОБРАТНОМ ПОРЯДКЕ, как это обычно принято) по смещению 43h.

                              Следующий код выводит серийный номер тома:
                              ExpandedWrap disabled
                                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, прошу впредь высказываться в темах менее категорично. Это оскорбляет. Спасибо за внимание.
                                Цитата
                                PS: Уважаемый Velin, прошу впредь высказываться в темах менее категорично
                                Уважаемый ALXR прошу Вас впредь читать содержимое топика. Это отсеит многие вопросы. Тогда вам станет понятно, что
                                а) то что хранится у скинера в переменной MBR это никакая не MBR(он сам это сказал)
                                б) И как следствие, приведенное вами "доказательство" наличия в MBR серийного номера не верно :)
                                Цитата

                                Уважаемый Velin, не стоит так скептически относится ко всему сказанному на форуме
                                А я и не отношусь. Рекомендую Вам брать пример, скажем с Васи, он хоть и модератор, не считает для себя почему-то оскорбительным, если его поправят. И даже признает, если вдруг нечянно ошибется(привести линк?). А вы почему-то начинаете возмущаться, что вас обижают. Лучше бы доказали, что правы.
                                  Цитата Velin @
                                  Хм.А что помогать? Прототипы функций у тебя есть? Описания? Ну вообще, если хочеш, давай в асю<203-529-473>, поболтаем.

                                  Нет к сожалению у меня нет ни деклараций функций, ни типов. Т.е. по работе с файлами через Zw функйии вообще ничего нет.

                                  2 ALXR У меня твой код показывает серийник 0000 - 0100 - это явно не серийник =(
                                    Цитата SCINER @
                                    Цитата Velin @
                                    Хм.А что помогать? Прототипы функций у тебя есть? Описания? Ну вообще, если хочеш, давай в асю<203-529-473>, поболтаем.

                                    Нет к сожалению у меня нет ни деклараций функций, ни типов. Т.е. по работе с файлами через Zw функйии вообще ничего нет.

                                    2 ALXR У меня твой код показывает серийник 0000 - 0100 - это явно не серийник =(

                                    Ах, ну да, забыл дополнить. Этот адрес ФС-зависимый. На дисках с FAT32 у меня возвращается верный серийный номер, а на NTFS то же самое 0000 - 0100. В NTFS он лежит по адресу 48h.

                                    Вот, работающий на NTFS код:
                                    ExpandedWrap disabled
                                      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 серийного номера не верно - доказательство (без кавычек!) выше.
                                      Цитата
                                      увы и ах, но это все-таки MBR.
                                      Говорить это не черное а белое это конечно весьма аргументированно.
                                      Цитата
                                      В этом вопросе, по-видимому, Вы не очень компетенты
                                      Кажеться, я где то уже описывал свойство некоторых людей выдавать свое невежество за невежество других.
                                      ------
                                      2SCINER, я не знаю, какие прототипы у Zw-функций в um(вероятно, такие же), но в km прототип такой:
                                      ExpandedWrap disabled
                                        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
                                            );
                                      Сообщение отредактировано: Velin -
                                        Цитата Velin @
                                        Цитата
                                        увы и ах, но это все-таки MBR.
                                        Говорить это не черное а белое это конечно весьма аргументированно.
                                        Цитата
                                        В этом вопросе, по-видимому, Вы не очень компетенты
                                        Кажеться, я где то уже описывал свойство некоторых людей выдавать свое невежество за невежество других.

                                        1. Я считаю, что выше приведенный мною код вполне аргументирует мое высказывание. Сделайте резервную копию MBR с помощью какой-либо программы по работе с жесткими дисками и сравните полученные данные.
                                        2. "Стрелки переводить" - не хорошо. В последнем Вашем сообщении не вижу ничего, что противоречит предыдущему моему сообщению, однако Вы продолжаете "гнуть" свое. Чье же здесь невежество?

                                        Кстати, номер <203-529-473> не найден. Я бы хотел пообщаться с Вами в icq.
                                          2SCINER: У тебя объявления NtCreateFile есть? Где ты ее будеш использовать?
                                          2ALXR:Тогда дай свой, если не найден. А что противоречит - ты в своем коде читаеш header логического диска, видиш там серийный номер. Так? А потом вдруг утверждаеш, что серийный номер хранится в MBR :blink:
                                            Основные недостатки:
                                            ALXR, в твоем коде вылазит месаг бокс и пишет что мол такой-то такой-то серийный номер устройства... Так какого устройства? Если жесткача, то какого? если их ДВА в системе и где второй серийник?

                                            :offtop:

                                            Velin!!!
                                            ALXR!!!
                                            Развели тут спор! для чего вам приват?! спорьте там :angry:

                                            Добавлено
                                            Опять форум глючит <_<
                                            Сообщение отредактировано: Zhenya -
                                              Цитата
                                              такой-то такой-то серийный номер устройства.
                                              Не устройства, а логического диска. Из кода лекго понять, что это серийный номер диска C.
                                                Цитата SCINER @
                                                таким методом найти и скрыть файл с диска

                                                а чем ZwQueryDirectoryFile не утраивает?
                                                  Цитата Алиса @
                                                  Цитата SCINER @
                                                  таким методом найти и скрыть файл с диска

                                                  а чем ZwQueryDirectoryFile не утраивает?

                                                  устроит, если примерчиком поделишься или почитать чего нить подкинешь по теме ;)
                                                    в архиве простой пример перечисления без FindFile...
                                                    но на счет скрытия <_<
                                                    ZwQueryDirectoryFile надо перехватывать (хорошо бы на уровне системы в r0). здесь VB не катит:(
                                                    блин, файл не цепляется.

                                                    архив тебе в мыло ушел.
                                                    Сообщение отредактировано: Алиса -
                                                      Цитата Алиса @
                                                      в архиве простой пример перечисления без FindFile...
                                                      но на счет скрытия <_<
                                                      ZwQueryDirectoryFile надо перехватывать (хорошо бы на уровне системы в r0). здесь VB не катит:(
                                                      блин, файл не цепляется.

                                                      архив тебе в мыло ушел.

                                                      Спасибо, будем посмотреть.
                                                      А зачем перехватывать, я просто хотел нарушить немного структуру файла, чтобы его вообще не видели никто кроме меня.
                                                        Цитата
                                                        А зачем перехватывать, я просто хотел нарушить немного структуру файла, чтобы его вообще не видели никто кроме меня.
                                                        А вас не беспокоит, что в один прекрасный момент драйвер файловой системы то же "не увидит" Ваш файл и запишет на его место что-нибудь еще?
                                                          Цитата Velin @
                                                          Цитата
                                                          А зачем перехватывать, я просто хотел нарушить немного структуру файла, чтобы его вообще не видели никто кроме меня.
                                                          А вас не беспокоит, что в один прекрасный момент драйвер файловой системы то же "не увидит" Ваш файл и запишет на его место что-нибудь еще?

                                                          Но Windows не запишет в занятый сектор.
                                                          А файл ведь можно уместить и просто в частично занятом секторе.
                                                            Цитата
                                                            Но Windows не запишет в занятый сектор
                                                            Ну вообщето, ячейки для файлов в ФС называются кластерами. Как раз записать в частично занятый сектор Windows может запрасто. Проблема в том, что checkdisk может увидеть файл, запись о котором есть в ФС, но которого нету не в одной папке. И как Вы думаете, что он с ним сделает?
                                                            Сообщение отредактировано: Velin -
                                                              Цитата
                                                              И как Вы думаете, что он с ним сделает?

                                                              ни чего!! такой метод применяеться при очистке оглавления. т.е. очистке таблицы файлов. просто файловая система может подумать что на этом месте пусто и записать туда новые данные. помоему такая фишка вообше на NTFS не получиться.
                                                              SCINER, а ты выдел где ни нить такую реализацию??
                                                                Цитата maxim84_ @
                                                                Цитата
                                                                И как Вы думаете, что он с ним сделает?

                                                                ни чего!! такой метод применяеться при очистке оглавления. т.е. очистке таблицы файлов. просто файловая система может подумать что на этом месте пусто и записать туда новые данные. помоему такая фишка вообше на NTFS не получиться.
                                                                SCINER, а ты выдел где ни нить такую реализацию??

                                                                нет не видел
                                                                я вообще дисками не занимался раньше
                                                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                0 пользователей:


                                                                Рейтинг@Mail.ru
                                                                [ Script execution time: 0.1235 ]   [ 16 queries used ]   [ Generated: 18.06.26, 15:13 GMT ]