Форум программистов, компьютерный форум, киберфорум
Dragokas
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Удаление файлов/папок с зарезервированными именами

Запись от Dragokas размещена 15.09.2012 в 23:43
Показов 5146 Комментарии 0

Bash
1
2
\\?\
\\.\
Отключает на время выполнения команды API-функции, накладывающие следующие запреты:

- операции с файлами/папками с зарезервированными именами.
- обращение к разделу напрямую через точку монтирования.


А также:
Bash
1
\\?\
- для обхода ограничения на максимальную общую длину каталога в 256 символов.
- отключает парсинг большинства спецсимволов.


For file I/O, the "\\?\" prefix to a path string tells the Windows APIs to disable all string parsing and to send the string that follows it straight to the file system. For example, if the file system supports large paths and file names, you can exceed the MAX_PATH limits that are otherwise enforced by the Windows APIs.

Because it turns off automatic expansion of the path string, the "\\?\" prefix also allows the use of ".." and "." in the path names, which can be useful if you are attempting to perform operations on a file with these otherwise reserved relative path specifiers as part of the fully qualified path.
Bash
1
\\.\
- для обращения к устройствам напрямую в обход файловой системы.

The "\\.\" prefix will access the Win32 device namespace instead of the Win32 file namespace. This is how access to physical disks and volumes is accomplished directly, without going through the file system, if the API supports this type of access. You can access many devices other than disks this way (using the CreateFile and DefineDosDevice functions, for example).

Another example of using the Win32 device namespace is using the CreateFile function with "\\.\PhysicalDiskX" (where X is a valid integer value) or "\\.\CdRomX". This allows you to access those devices directly, bypassing the file system. This works because these device names are created by the system as these devices are enumerated, and some drivers will also create other aliases in the system. For example, the device driver that implements the name "C:\" has its own namespace that also happens to be the file system.
Примеры практического использования:

1) Обращение к разделу напрямую через точку монтирования:
Bash
1
2
type \\?\Volume{98fc8064-566a-11d9-82a2-806d6172696f}\out.txt
type \\.\Volume{98fc8064-566a-11d9-82a2-806d6172696f}\out.txt
К примеру, если разделу не назначено имя диска.
Список таких точек можно получить штатной утилитой MOUNTVOL.exe без параметров.
Примеры также можете почитать в статьях Криса Касперского - один, два.
И в этой теме: Программно скрыть каталог или жёсткий диск

2) Создание виртуального жесткого диска VHD и подключение его как пустой папки через точку монтирования.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
SetLocal EnableExtensions
call :Invoke_UAC %*
 
set vdisk=c:\vdisk.vhd
 
mountvol /E
For /F "delims=" %%? in ('mountvol ^| find "\\?\"') do set Array.%%?=true
(
  echo create vdisk file="%vdisk%" maximum=512 type=fixed
  echo select vdisk file="%vdisk%"
  echo attach vdisk
  echo convert mbr
  echo create partition primary
  echo format fs=NTFS label="VDisk" quick
) | diskpart
For /F "delims=" %%? in ('mountvol ^| find "\\?\"') do if not defined Array.%%? set MountPoint=%%?
mklink /d c:\VDisk\ %MountPoint%
pause
Exit
 
:Invoke_UAC :: Затребование диалога UAC повышения прав
  ver |>nul find "6." && if "%1"=="" (
    Echo new ActiveXObject^('Shell.Application'^).ShellExecute ^(WScript.Arguments^(0^),'UAC','','runas',1^);>"%~dp0Invoke_UAC.js"
    cscript.exe //nologo //e:jscript "%~dp0Invoke_UAC.js" "%~f0"& Exit
  ) else (>nul del "%~dp0Invoke_UAC.js"& chdir /d "%~dp0")
Exit /B
Обсуждается в теме: Подключение виртуального жесткого диска VHD как пустой папки с помощью симлинка

3) Удаление рекурсивно всех папок (в т.ч. с некорректными именами, например концевым пробелом, точками, названиями системных устройств).
Каждое удаление сопровождается обязательным подтверждением действия от пользователя.
Бат-файл поместить в папку, в которой нужно удалить все каталоги. Из нее и запускать.

Bash
1
2
3
4
5
6
7
8
@echo off
chcp 1251
for /f "delims=" %%i in ('dir /b /a:d') do (
  chcp 866
  rmdir /s "\\.\%%i\"
  chcp 1251
)
pause>nul
Другие ссылки по теме:

Path (computing) - Wikipedia
MSDN - Naming Files, Paths, and Namespaces
MSDN - Naming a Volume

wiki.drweb.com/index.php/Каталог_E2E2~1
MSKB - Невозможно удалить файл или папку в томе с файловой системой NTFS
MSKB - Удаление файлов с зарезервированными именами в Windows XP
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru