На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Не работают FindFirstVolumeMountPoint / FindNextVolumeMountPoint
    Пишу:
    ExpandedWrap disabled
      {$APPTYPE CONSOLE}
      uses Windows;
       
      function FindFirstVolume(lpszVolumeName: LPSTR; cchBufferLength: DWORD): THandle; stdcall; external kernel32 name 'FindFirstVolumeA';
      function FindNextVolume(hFindVolume: THandle; lpszVolumeName: LPSTR; cchBufferLength: DWORD): BOOL; stdcall; external kernel32 name 'FindNextVolumeA';
      function FindVolumeClose(hFindVolume: THandle): BOOL; stdcall; external kernel32;
       
      function FindFirstVolumeMountPoint(lpszRootPathName, lpszVolumeMountPoint: LPSTR; cchBufferLength: DWORD): THandle; stdcall; external kernel32 name 'FindFirstVolumeMountPointA';
      function FindNextVolumeMountPoint(hFindVolumeMountPoint: THandle; lpszVolumeMountPoint: LPSTR; cchBufferLength: DWORD): BOOL; stdcall; external kernel32 name 'FindNextVolumeMountPointA';
      function FindVolumeMountPointClose(hFindVolumeMountPoint: THandle): BOOL; stdcall; external kernel32;
       
      var
        Vol, Point: array [0..1023] of AnsiChar;
        VH, PH: THandle;
       
      begin
        VH := FindFirstVolume(Vol, SizeOf(Vol));
        if VH = INVALID_HANDLE_VALUE then
        begin
          WriteLn('No volumes found!');
          Exit;
        end;
       
        repeat
          WriteLn(Vol);
          PH := FindFirstVolumeMountPoint(Vol, Point, SizeOf(Point));
          if PH = INVALID_HANDLE_VALUE then
            WriteLn('  No mounted folders.')
          else
          begin
            repeat
              WriteLn('  ', Point);
            until not FindNextVolumeMountPoint(PH, Point, SizeOf(Point));
            FindVolumeMountPointClose(PH);
          end;
          WriteLn;
        until not FindNextVolume(VH, Vol, SizeOf(Vol));
       
        FindVolumeClose(VH);
        ReadLn;
      end.

    Выдаёт GUID томов, но точек подключения нет. Почему? Что не так?
    А вот функция GetVolumePathNamesForVolumeName работает...

    Добавлено
    p.s. Это пускается из-под D7. Если убрать объявления функций и компилить через Tokyo (PWideChar), результат тот же.
    aeskeygenassist bndstx cmpxchg16b dpps endbr64 f2xm1 gf2p8affineinvqb haddps incsspq jrcxz kxnorw ldmxcsr mpsadbw nop orpd pclmulhqlqdq qword rdpmc sha256rnds2 tzcnt unpcklpd vp4dpwssds wrfsbase xgetbv yword zword
      Jin X
      Если просто, то эта функция делает не то о чём вы подумали.
      Это особые папки которые есть только в NFTS.
      Что-бы увидеть их с начало создать надо.

      ExpandedWrap disabled
        {$APPTYPE CONSOLE}
        uses Windows;
         
        function FindFirstVolume(lpszVolumeName: LPSTR; cchBufferLength: DWORD): THandle; stdcall; external kernel32 name 'FindFirstVolumeA';
        function FindNextVolume(hFindVolume: THandle; lpszVolumeName: LPSTR; cchBufferLength: DWORD): BOOL; stdcall; external kernel32 name 'FindNextVolumeA';
        function FindVolumeClose(hFindVolume: THandle): BOOL; stdcall; external kernel32;
         
        function FindFirstVolumeMountPoint(lpszRootPathName, lpszVolumeMountPoint: LPSTR; cchBufferLength: DWORD): THandle; stdcall; external kernel32 name 'FindFirstVolumeMountPointA';
        function FindNextVolumeMountPoint(hFindVolumeMountPoint: THandle; lpszVolumeMountPoint: LPSTR; cchBufferLength: DWORD): BOOL; stdcall; external kernel32 name 'FindNextVolumeMountPointA';
        function FindVolumeMountPointClose(hFindVolumeMountPoint: THandle): BOOL; stdcall; external kernel32;
         
         
        function GetVolumeNameForVolumeMountPoint(lpszVolumeMountPoint: LPSTR; lpszVolumeName: LPSTR; cchBufferLength: DWORD): Bool; stdcall; external kernel32 name 'GetVolumeNameForVolumeMountPointA';
        function SetVolumeMountPoint(lpszVolumeMountPoint: LPSTR; lpszVolumeName: LPSTR): Bool; stdcall; external kernel32 name 'SetVolumeMountPointA';
        function DeleteVolumeMountPoint(lpszVolumeMountPoint: LPSTR): Bool; stdcall; external kernel32 name 'DeleteVolumeMountPointA';
         
        var
          Vol, Point: array [0..1023] of AnsiChar;
          VH, PH: THandle;
          Ck:Bool;
        begin
         // Что мантируем
          Ck:=GetVolumeNameForVolumeMountPoint('H:\', Vol, SizeOf(Vol));
          if not Ck then
          begin
            WriteLn('No volumes found!');
            Exit;
          end;
         
        // Куда мантируем
          Ck:=SetVolumeMountPoint('F:\DiskH\', Vol);
          if not Ck then
          begin
            WriteLn('Cannot mount!');
          end;
         
          VH := FindFirstVolume(Vol, SizeOf(Vol));
          if VH = INVALID_HANDLE_VALUE then
          begin
            WriteLn('No volumes found!');
            Exit;
          end;
         
          repeat
            WriteLn(Vol);
            PH := FindFirstVolumeMountPoint(Vol, Point, SizeOf(Point));
            if PH = INVALID_HANDLE_VALUE then
              WriteLn('  No mounted folders.')
            else
            begin
              repeat
                WriteLn('  ', Point);
              until not FindNextVolumeMountPoint(PH, Point, SizeOf(Point));
              FindVolumeMountPointClose(PH);
            end;
            WriteLn;
          until not FindNextVolume(VH, Vol, SizeOf(Vol));
         
          FindVolumeClose(VH);
          ck:=DeleteVolumeMountPoint('F:\DiskH\');
          if not Ck then
          begin
            WriteLn('Cannot unmount!');
            Exit;
          end;
          ReadLn;
        end.
      Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
        Если речь о папках, смотнированных на том, то я специально монтировал папки, их всё равно не видно через эту функцию :(

        Добавлено
        Да, я нашёл "They do not return drive letters or volume GUID paths".
        И я разобрался почему не видно было папки.
        Оказывается, эти Find'ы работают только от имени администратора, от юзера ничего не показывают.
        А вот GetVolumePathNamesForVolumeName работают и от юзера (и диски тоже показывают), и от админа. Бред какой-то...
        aeskeygenassist bndstx cmpxchg16b dpps endbr64 f2xm1 gf2p8affineinvqb haddps incsspq jrcxz kxnorw ldmxcsr mpsadbw nop orpd pclmulhqlqdq qword rdpmc sha256rnds2 tzcnt unpcklpd vp4dpwssds wrfsbase xgetbv yword zword
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script Execution time: 0,0839 ]   [ 17 queries used ]   [ Generated: 19.09.20, 05:37 GMT ]