Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Вниз

Скрыть папку   Найти похожие ветки 

 
Stalker01 ©   (2005-04-12 14:56) [0]

Можно ли программно скрыть папку под FAT32?


 
Плохиш ©   (2005-04-12 14:58) [1]

Установить свойство "hidden"


 
ANB ©   (2005-04-12 15:15) [2]

Если сможешь найти на диске место, где хранится дирректория, то при замене первой буквы ДОС имени папки на русскую "х", папка будет считаться удаленной. Обратная замена ее покажет. Только ScanDisk будет ругаться на потерянные цепочки.


 
Marser ©   (2005-04-12 16:47) [3]

SetFileAttributes


 
Stalker01 ©   (2005-04-12 19:49) [4]

Поменять свойство не подойдет, т.к. папка должна быть невидимая даже если включенно отображение скрытых файлов.  
ANB, а как можно найти это место на диске? Есть какие-нибудь API функции?


 
VMcL ©   (2005-04-12 21:43) [5]

>>Stalker01 ©   (12.04.05 19:49) [4]

Тогда только при помощи драйвера.


 
Stalker01 ©   (2005-04-12 22:47) [6]

А драйвер реально реализовать на Делфи? Не подскажите где можно найти документацию по его написанию?


 
Vir   (2005-04-12 22:48) [7]

Удалено модератором


 
Stalker01 ©   (2005-04-12 22:52) [8]

Vir, спасибо! Попробую!


 
mgcr ©   (2005-04-12 23:25) [9]

"Тайное всегда становится явным" (с)

Автору - не париться, а заняться полезным делом, например, закончить архитектурный институт или изобрести самодвижущееся пресс-папье.


 
Stalker01 ©   (2005-04-13 01:58) [10]

mgcr, я не парюсь а занимаюсь делом, пишу полезную прогу. Это не вирь и не троян, и вообще к хаку она не имеет никакого отношения!


 
Германн ©   (2005-04-13 02:25) [11]

2 Stalker01 ©   (13.04.05 01:58) [10]
И все-таки "не парься".
Это вопрос взаимоотношения ОС и пользователей.
Ставь ОС, которая позволяет разграничить права пользователей. И скрывай от некоторых, то, что им не дОлжно быть доступно.


 
mgcr ©   (2005-04-13 10:36) [12]


> я не парюсь а занимаюсь делом, пишу полезную прогу


У нас разные понятия о пользе. Но советую учесть, что DDK стоит денег. И на Delphi такая задача в общем виде не реализуема.

В общем - не парься.


 
Stalker01 ©   (2005-04-13 12:26) [13]

Германн, mqcr, спасибо конечно за советы, но я задавал конкретный вопрос по делфи, а не о том стоит или не стоит писать программу.


 
mgcr ©   (2005-04-13 12:39) [14]

Stalker01 ©   (13.04.05 12:26) [13]

Тогда на конкретный вопрос по Delphi будет конкретный ответ - нельзя.


 
jobo ©   (2005-04-13 18:34) [15]

2Stalker01:
установи для директории атрибут Volume.
если с помощью SetFileAttributes не поллучиться тогда через прямой доступ к диску, поиск дира по ФАТ и т.д. Можно и на делфе, хоть обычно такое на АСМе пишется (или вставках асмовых)


 
Stalker01 ©   (2005-04-13 23:09) [16]

jobo, спасибо, а что даёт этот атрибут? И как можно осуществить поиск папки через прямой доступ к диску?


 
Marser ©   (2005-04-14 00:12) [17]


> jobo ©   (13.04.05 18:34) [15] [Новое
>сообщение][Ответить]
>2Stalker01:
>установи для директории атрибут Volume.
> если с помощью SetFileAttributes не поллучиться тогда
> через прямой доступ к диску, поиск дира по ФАТ и т.д.
> Можно и на делфе, хоть обычно такое на АСМе пишется
> (или вставках асмовых)

Очень интересно! А можно подробнее?


> Stalker01 ©   (13.04.05 23:09) [16] [Новое
>сообщение][Ответить]
> jobo, спасибо, а что даёт этот атрибут? И как можно
> осуществить поиск папки через прямой доступ к диску?

Volume - это том. Такого параметра для файла нету.
А прямой доступ диску происходит с помощью стандартных функций API для работы с файлами.


 
jobo ©   (2005-04-14 01:15) [18]

есть атрибут файла faVolumeID (faVolumeID = $00000008 platform;) метка диска.
но через FileSetAttr или SetFileAttributes установить этот атрибут для папки система не даст. так что придется напрямую к файловой системе: считываеш ФАТ таблицу потом находиш в ней абсолютный адрес нужной папки и записывеш атрибут VolumeID. Структуру ФАТ и т.п. смотри в справочниках по асемблеру.


 
Германн ©   (2005-04-14 02:04) [19]

2Stalker01 ©   (13.04.05 23:09) [16]
>jobo, спасибо, а что даёт этот атрибут? И как можно осуществить >поиск папки через прямой доступ к диску?

Это даёт геморрой! И никакой врач не поможет. :(


 
Stalker01 ©   (2005-04-14 16:53) [20]

Jobo, спасибо! Попробую.
Германн, тогда можно вообще за комп не садиться, это же геморрой!


 
Marser ©   (2005-04-14 16:55) [21]


> jobo ©   (14.04.05 1:15) [18]

Согласен с Германом.


 
ANB ©   (2005-04-14 17:43) [22]


> Stalker01 ©   (12.04.05 19:49) [4]

1) Найди доку по прямой работе с диском, на форуме грят, что как с файлом, но я не пробовал.
2) Я делал такие штуки в 91 году еще в DOS и на TASM (просто int 13h на C у меня не получилось по человечески вызвать), а FAT32 от нее мало отличается. Только, если ты включишь таки все атрибуты, то этот элемент станет продолжением длинного имени предыдущего. Ищи доку по логическому устройству диска. Я читал "Системное программирование для Правец 16".
3) FAT тут ни причем, тебе нужно найти корневой каталог, пройтись ручками по всей цепочке (для сего придется определить размер кластера) найти элемент каталога для скрываемой папки, а дальше у тебя простор для творчества.
4) При грамотном подходе - никаких проблем сделать все это на Delphi, только винт не угробь. :)))


 
mgcr ©   (2005-04-14 17:49) [23]


> 4) При грамотном подходе - никаких проблем сделать все это
> на Delphi


С этого места подробнее.


 
ANB ©   (2005-04-14 17:53) [24]


> mgcr ©   (14.04.05 17:49) [23]
- составь примерчик, который прочитает один выбранный сектор с логического диска и сможет записать его обратно. Завтречка сделаю из него пример, который прячет папку в корне. :)))


 
mgcr ©   (2005-04-14 18:07) [25]

ANB ©   (14.04.05 17:53) [24]

Я такой примерчик составлю. Но не понимаю, каким образом он с одной стороны скроет папку, с другой, оставит ее папкой.


 
Германн ©   (2005-04-15 02:00) [26]

2 Stalker01 ©   (14.04.05 16:53) [20]
>Jobo, спасибо! Попробую.
>Германн, тогда можно вообще за комп не садиться, это же >геморрой!

Имхо, "садиться" - ну очень часто приводит к геморрою! Но это в форум по медицине.

А по сабжу, пробуй! Пробуй любые советы из форума, пробуй свои какие-нибудь идеи. Т.е. пробуй все, что хочешь и можешь.
Токмо, имхо, не стоит "овчинка выделки" при попытках "ограничения доступа" к файловой системе в тех ОС, которые эти ограничения не поддерживают!


 
ANB ©   (2005-04-15 10:40) [27]


> с другой, оставит ее папкой.
- а зачем оставлять ее папкой ? Я так понимаю, вопрос стоит в том, чтобы ее хорошо спрятать и иметь возможность снова достать (иначе проще грохнуть). У меня такая проблема стояла, когда приезжала проверка проверять наличие секретных файлов на компе, а слить их мне было некуда. Начальник и попросил зашхерить так, чтобы никто не нашел. Я снача DiskEditом это сделал, а потом прогу написал.


 
mgcr ©   (2005-04-15 11:21) [28]

ANB ©   (15.04.05 10:40) [27]

А сабж читать уже не модно ?


 
ANB ©   (2005-04-15 11:31) [29]


> Stalker01 ©   (12.04.05 14:56)  
> Можно ли программно скрыть папку под FAT32?
- это сабж.
Ответ - можно. Как - это уже вопрос №2. Установка флагов проблему не решает, так как даже NC это все видит. Вывод - нужно ломать систему. FAT32 ломается, NTFS - не пробовал.
Мной предложен один из способов поломки. Еще идею предложил

> jobo ©   (14.04.05 01:15) [18]
, но этот способ прокатит в FAT16, в FAT32 будет побочный эффект, то есть имя папки присоединится к предыдущему.


> mgcr ©   (15.04.05 11:21) [28]
- кто то обещал примерчик ;-)


 
GrayFace ©   (2005-04-17 20:15) [30]

А что было в Vir[7]?


 
mgcr ©   (2005-04-18 10:53) [31]

ANB ©   (15.04.05 11:31) [29]


> - кто то обещал примерчик ;-)


procedure TfMain.FormCreate(Sender: TObject);
var
 ReadBytes: Cardinal;
begin
 FDisk := TDiskIoControl.Create(0);
 ReadFile(FDisk.Handle, FSectorBuffer, SizeOf(FSectorBuffer), ReadBytes, nil);
 if ReadBytes <> SizeOf(FSectorBuffer) then
   RaiseLastOSError;
end;

Писать, соответственно, WriteFile...

Эта...DiskIoControl брать с http://www.schevchenko.net.ru/SRC/DeviceIoControl_60.zip

Че еще надо ?


 
ANB ©   (2005-04-18 11:10) [32]


> mgcr ©   (18.04.05 10:53) [31]
- извини за зедержку, дома инет еще не провел.


> Эта...DiskIoControl брать с http://www.schevchenko.net.ru/SRC/DeviceIoControl_60.zip
- админы доступ не дают. Выслать сможешь ? Или кусок исходника оттуда с TDiskIoControl.Create(0);


 
mgcr ©   (2005-04-18 12:20) [33]

ANB ©   (18.04.05 11:10) [32]

{
  Модуль: DiskIoControl

  Описание: Класс для работы с физическим диском с использованием функции
            DeviceIoControl.
            В настоящей реализации сделаны методы получения геометрии диска
            и информации о разделах диска.

  Автор: Игорь Шевченко

  Дата создания: 13.03.2003

  История изменений:
}
unit DiskIoControl;
{$IFDEF VER140}
{$WARN SYMBOL_DEPRECATED OFF}
{$WARN SYMBOL_PLATFORM OFF}
{$ENDIF}

interface
uses
 Windows;

type
{ Геометрия диска }
 PDISK_GEOMETRY = ^DISK_GEOMETRY;
 DISK_GEOMETRY = packed record
   Cylinders: LARGE_INTEGER;
   MediaType: Integer; { MEDIA_TYPE }
   TracksPerCylinder: DWORD;
   SectorsPerTrack: DWORD;
   BytesPerSector: DWORD;
 end;

{ Значения для поля Media type }
const
 UnknownMedia = 0;
 F5_1Pt2_512 = 1;
 F3_1Pt44_512 = 2;
 F3_2Pt88_512 = 3;
 F3_20Pt8_512 = 4;
 F3_720_512 = 5;
 F5_360_512 = 6;
 F5_320_512 = 7;
 F5_320_1024 = 8;
 F5_180_512 = 9;
 F5_160_512 = 10;
 RemovableMedia = 11;
 FixedMedia = 12;
 F3_120M_512 = 13;
 F3_640_512 = 14;
 F5_640_512 = 15;
 F5_720_512 = 16;
 F3_1Pt2_512 = 17;
 F3_1Pt23_1024 = 18;
 F5_1Pt23_1024 = 19;
 F3_128Mb_512 = 20;
 F3_230Mb_512 = 21;
 F8_256_128 = 22;
 F3_200Mb_512 = 23;

type
{ Описание раздела диска }
 PPARTITION_INFORMATION = ^PARTITION_INFORMATION;
 PARTITION_INFORMATION = packed record
   StartingOffset: int64;
   PartitionLength: int64;
   HiddenSectors: DWORD;
   PartitionNumber: DWORD;
   PartitionType: Byte;
   BootIndicator: BOOLEAN;
   RecognizedPartition: BOOLEAN;
   RewritePartition: BOOLEAN;
   Filler: DWORD;
 end;
 PARTITION_INFORMATION_ARRAY = array[0..1024] of PARTITION_INFORMATION;

{ Описание разделов диска }
 PDRIVE_LAYOUT_INFORMATION = ^DRIVE_LAYOUT_INFORMATION;
 DRIVE_LAYOUT_INFORMATION = packed record
   PartitionCount: DWORD;
   Signature: DWORD;
   PartitionEntry: PARTITION_INFORMATION_ARRAY;
 end;

{ Типы разделов }
const
 PARTITION_ENTRY_UNUSED  = 0;      // Entry unused
 PARTITION_FAT_12        = 1;      // 12-bit FAT entries
 PARTITION_XENIX_1       = 2;      // Xenix
 PARTITION_XENIX_2       = 3;      // Xenix
 PARTITION_FAT_16        = 4;      // 16-bit FAT entries
 PARTITION_EXTENDED      = 5;      // Extended partition entry
 PARTITION_HUGE            = 6;      // Huge partition MS-DOS V4
 PARTITION_IFS             = 7;      // IFS Partition
 PARTITION_OS2BOOTMGR      = 8;      // OS/2 Boot Manager/OPUS/Coherent swap
 PARTITION_FAT32           = $0B;      // FAT32
 PARTITION_FAT32_XINT13    = $0C;      // FAT32 using extended int13 services
 PARTITION_XINT13          = $0E;      // Win95 partition using extended int13 services
 PARTITION_XINT13_EXTENDED = $0F;      // Same as type 5 but uses extended int13 services
 PARTITION_PREP            = $41;      // PowerPC Reference Platform (PReP) Boot Partition
 PARTITION_LDM             = $42;      // Logical Disk Manager partition
 PARTITION_UNIX            = $63;      // Unix
 PARTITION_LINUX_SWAP      = $82;      // Linux swap
 PARTITION_LINUX_EXT2      = $83;      // Linux ext2

 VALID_NTFT                = $C0;      // NTFT uses high order bits

type
 TDiskIoControl = class
 private
   FDriveNo: Integer;
   FHandle: THandle;
   FLayout: Pointer;
   FLayoutSize: Integer;
   FOpenForWriting: Boolean;
   procedure SetDriveNo(Value: Integer);
   procedure CloseDrive;
   procedure OpenDrive;
   function GetGeometry: DISK_GEOMETRY;
   function GetLayout: PDRIVE_LAYOUT_INFORMATION;
 public
   constructor Create (ADriveNo: Integer);
   constructor CreateWrite (ADriveNo: Integer);
   destructor Destroy; override;
   property Handle: THandle read FHandle;
   property DriveNo: Integer read FDriveNo write SetDriveNo;
   property Geometry: DISK_GEOMETRY read GetGeometry;
   property Layout: PDRIVE_LAYOUT_INFORMATION read GetLayout;
 end;

function MediaTypeToString (Value: Integer): string;
function PartitionTypeToString (Value: Integer): string;

implementation
uses
 SysUtils;

{ Коды DeviceIoControl }
const
 METHOD_BUFFERED = 0;
 METHOD_IN_DIRECT = 1;
 METHOD_OUT_DIRECT = 2;
 METHOD_NEITHER = 3;

 FILE_ANY_ACCESS = 0;
 FILE_SPECIAL_ACCESS = 0;
 FILE_READ_ACCESS = 1;
 FILE_WRITE_ACCESS = 2;

 FILE_DEVICE_DISK = 7;

 IOCTL_DISK_GET_DRIVE_GEOMETRY = (FILE_DEVICE_DISK shl 16) or
     (FILE_ANY_ACCESS shl 14) or (0 shl 2) or METHOD_BUFFERED;
 IOCTL_DISK_GET_DRIVE_LAYOUT = (FILE_DEVICE_DISK shl 16) or
     (FILE_READ_ACCESS shl 14) or (3 shl 2) or METHOD_BUFFERED;

{ TDiskIoControl }

procedure TDiskIoControl.CloseDrive;
begin
 if FHandle <> INVALID_HANDLE_VALUE then begin
   CloseHandle (FHandle);
   FHandle := INVALID_HANDLE_VALUE;
 end;
end;

constructor TDiskIoControl.Create(ADriveNo: Integer);
begin
 inherited Create;
 FHandle := INVALID_HANDLE_VALUE;
 FDriveNo := -1;
 DriveNo := ADriveNo;
end;

constructor TDiskIoControl.CreateWrite(ADriveNo: Integer);
begin
 inherited Create;
 FHandle := INVALID_HANDLE_VALUE;
 FDriveNo := -1;
 FOpenForWriting := true;
 DriveNo := ADriveNo;
end;

destructor TDiskIoControl.Destroy;
begin
 CloseDrive;
 if Assigned(FLayout) then
   FreeMem(FLayout);
 inherited;
end;

function TDiskIoControl.GetGeometry: DISK_GEOMETRY;
var
 Returned : DWORD;
begin
 if not DeviceIoControl (FHandle, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0,
    @Result, SizeOf(Result), Returned, nil) then
   RaiseLastWin32Error;
end;

function TDiskIoControl.GetLayout: PDRIVE_LAYOUT_INFORMATION;
var
 Returned: DWORD;
 LastError: DWORD;
begin
 if not Assigned(FLayout) then begin
   FLayoutSize := 1024;
   GetMem(FLayout, FLayoutSize);
 end;
 while not DeviceIoControl (FHandle, IOCTL_DISK_GET_DRIVE_LAYOUT, nil, 0,
    FLayout, FLayoutSize, Returned, nil) do begin
   LastError := GetLastError;
   case LastError of
   ERROR_SUCCESS:
     Break;
   ERROR_MORE_DATA:
     begin
       FreeMem(FLayout);
       FLayoutSize := Integer(Returned);
       GetMem(FLayout, FLayoutSize);
     end;
   ERROR_INSUFFICIENT_BUFFER:
     begin
       FreeMem(FLayout);
       FLayoutSize := FLayoutSize * 2;
       GetMem(FLayout, FLayoutSize);
     end;
   else
     RaiseLastWin32Error;
   end;
 end;
 Result := PDRIVE_LAYOUT_INFORMATION(FLayout);
end;

procedure TDiskIoControl.OpenDrive;
var
 FileName: String;
 FileMode: Cardinal;
begin
 FileName := "\\.\PhysicalDrive"+IntToStr(FDriveNo);
 if FOpenForWriting then
   FileMode := GENERIC_WRITE
 else
   FileMode := GENERIC_READ;
 FHandle := CreateFile(PChar(FileName), FileMode,
   FILE_SHARE_WRITE or FILE_SHARE_READ, nil,
   OPEN_EXISTING, 0, 0);
 if FHandle = INVALID_HANDLE_VALUE then
   RaiseLastWin32Error;
end;

procedure TDiskIoControl.SetDriveNo(Value: Integer);
begin
 if FDriveNo <> Value then begin
   CloseDrive;
   FDriveNo := Value;
   OpenDrive;
 end;
end;


 
mgcr ©   (2005-04-18 12:21) [34]

function MediaTypeToString (Value : Integer) : String;
begin
 case Value of
 RemovableMedia:
   Result := "Removable";
 FixedMedia:
   Result := "Fixed";
 UnknownMedia:
   Result := "Unknown";
 else
   Result := Format("%d", [Value]);
 end;
end;

function PartitionTypeToString (Value : Integer) : String;
begin
 case Value of
 PARTITION_ENTRY_UNUSED:
   Result := "Unused";
 PARTITION_FAT_12:
   Result := "FAT12";
 PARTITION_FAT_16, PARTITION_XINT13:
   Result := "FAT16";
 PARTITION_EXTENDED, PARTITION_XINT13_EXTENDED:
   Result := "Extended";
 PARTITION_HUGE:
   Result := "Huge";
 PARTITION_IFS:
   Result := "NTFS";
 PARTITION_FAT32, PARTITION_FAT32_XINT13:
   Result := "FAT32";
 PARTITION_LDM:
   Result := "Dynamic";
 PARTITION_UNIX:
   Result := "Unix";
 PARTITION_LINUX_SWAP:
   Result := "Linux Swap";
 PARTITION_LINUX_EXT2:
   Result := "Linux Ext2";
 else
   Result := Format("%d", [Value]);
 end;
end;

end.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.015 c
4-1113414663
Flutter
2005-04-13 21:51
2005.06.06
Windows shell


1-1116581460
Antonn
2005-05-20 13:31
2005.06.06
"Привязан" ли Zlib к Delphi?


3-1113470194
yk
2005-04-14 13:16
2005.06.06
очень медленно работает запрос....


9-1110470642
electroowl
2005-03-10 19:04
2005.06.06
Помогите установить glscene!!!


14-1116232188
PVOzerski
2005-05-16 12:29
2005.06.06
Впечатления о милицейском беспределе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский