Обход ограничений FAT32/NTFS A.M.D.F. (amdf@mera.net.ru) Xakep, номер #062, стр. 062-080-5 Universal Naming Convention Universal Naming Convention – сокращенно UNC, можно дословно перевести как «Универсальное соглашение об именах». Это формат для записи пути к файлу, расположенному на удаленном компьютере. Он имеет вид «\\server\share\path». Server - это, как ни странно, сервер. Share – расшаренный ресурс на нем, а дальше следует путь к файлу в обычном формате. Такой способ доступа к файлам можно использовать и для локальной машины, только в этом случае вместо “server” нужно подставлять «?» или «.», а путь к файлу указывать вместе с буквой диска. Например, так: «\\?\C:\folder\file.txt». Листинг 1 #include <windows.h> #include <iostream.h> void CreateStrangeFile(char *filename) { char *curdir; //текущая папка char *uncpath; //полный путь до файла в формате UNC GetCurrentDirectory(MAX_PATH,curdir); //получаем текущий каталог wsprintf(uncpath,"\\\\?\\%s\\%s",curdir, filename); //формируем UNC-путь HANDLE hFile = CreateFile( uncpath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, NULL, NULL); //создаем новый файл DWORD ret; __try { WriteFile(hFile,"This is a super secret info",28,&ret, NULL); //записываем секретную инфу } __finally { CloseHandle(hFile); //закрываем файл } } void main() { CreateStrangeFile("prn"); //создаем файл «prn» } Листинг 2 #include <windows.h> void main() { char *old = "C:\\TMP\\somefile.txt"; char *_new = "C:\\TMP\\twodots.."; //переменные для нового и старого имени файла char *newname; wsprintf(newname,"%s.\\",_new); //добавляем символы «.\» в новое имя файла MoveFile(old, newname); //переименовываем файл } Листинг 3 #include <windows.h> void main() { HANDLE hStream = CreateFile( "space :stream",GENERIC_WRITE,FILE_SHARE_WRITE, NULL,CREATE_ALWAYS,NULL,NULL ); DWORD ret; WriteFile( hStream, "This is space :stream", 21, &ret, NULL ); CloseHandle(hStream); } INFO Microsoft Knowledge Base: support.microsoft.com Q320081, Q315226, Q115827, Q303074, Q120716 WWW DotFiles Creator: mera.net.ru/~amdf/rarz/fsbug_6b.rar CD На диске лежит весь описанный софт, а также компонент для Delphi. |