На главную Наши проекты:
Журнал   ·   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.
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Прямой доступ к диску
    Набросал функцию.
    ВОпросик, можно ли таким методом найти и скрыть файл с диска ???
    Найти, т.е. по имени, но не функциями 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, не стоит так скептически относится ко всему сказанному на форуме
                                А я и не отношусь. Рекомендую Вам брать пример, скажем с Васи, он хоть и модератор, не считает для себя почему-то оскорбительным, если его поправят. И даже признает, если вдруг нечянно ошибется(привести линк?). А вы почему-то начинаете возмущаться, что вас обижают. Лучше бы доказали, что правы.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


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