Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Доступ к файлам системным файлам NTFS   Найти похожие ветки 

 
sally   (2006-01-27 14:36) [0]

пытаюсь достучаться к системным файлам NTFS($LOGFILE) система ругается: отказано в доступе. Понимаю, что нужно с выдать права на доступ к этому файлу, но как это сделать???
Если возможно, киньте код плиз..


 
Игорь Шевченко ©   (2006-01-27 15:13) [1]

Никак


 
NightAngel   (2006-01-27 15:34) [2]

> Понимаю, что нужно с выдать права на доступ к этому файлу, но как это сделать???

Вам нужны права SYSTEM, а их можно получить только из драйвера. Хотя LFS (log file service) изначально был разработан для того, чтобы предоставлять средства протоколирования и восстановления более чем одному клиенту, он используется только NTFS. Для полноценного доступа к файлу придется писать свой драйвер NTFS. Сервис файла журнала является частью NTFS и предоставляет функции для поддержки журнала изменений диска. LFS - это набор процедур режима ядра, локализованных в драйвере NTFS, который она использует для доступа к файлу журнала.


 
Игорь Шевченко ©   (2006-01-27 15:46) [3]

Автор книжки "Справочник по базовому API Windows" Гэри Неббет пишет, что доступ к этим (системным) файлам NTFS через файловую систему невозможен. У меня нет оснований не верить ему.


 
ZeroDivide ©   (2006-01-27 15:56) [4]


> Автор книжки "Справочник по базовому API Windows" Гэри Неббет
> пишет, что доступ к этим (системным) файлам NTFS через файловую
> систему невозможен. У меня нет оснований не верить ему.
>


В Windows 95 тоже вирусов быть не может


 
Johnmen ©   (2006-01-27 16:08) [5]

>В Windows 95 тоже вирусов быть не может

Что такое Windows 95 ?


 
sally   (2006-01-27 16:49) [6]

Странно, но к некоторым файлам он дает доступ
$mft
$mftmirr
$volume
$attrdef
$quota


 
NightAngel   (2006-01-27 18:36) [7]

Не знаю, что там пишет Гэри Неббет, но я это в свое время делал, самостоятельно распарсив все файлы, т.е. открывается диск на чтение и последовательно читается загрузочный сектор, ссылка на mft и т.д. Да, и еще... Журналирование производится как в метафайл $LogFile, так и в разреженный файл tracking.log, находящийся в каталоге System Volume Information, с атрибутами "Системный" и "Скрытый".

P.S. Знать матчасть - мало, надо уметь пользоваться своими знаниями.

Удачи!


 
Игорь Шевченко ©   (2006-01-28 18:31) [8]

NightAngel   (27.01.06 18:36) [7]


> Не знаю, что там пишет Гэри Неббет, но я это в свое время
> делал, самостоятельно распарсив все файлы, т.е. открывается
> диск на чтение и последовательно читается загрузочный сектор,
>  ссылка на mft и т.д.


Именно этот способ он и описывает, как рекомендуемый. Желательно еще при этом заблокировать диск от изменений.

"Хотя специальные файлы и являются на самом деле файлами, но открыь их обычным способом (с помощью функций ZwCreateFile или ZwOpenFile) нельзя. Даже получив в ACL права администратора, доступ к ним оказывается невозможным, поскольку для них драйвер файловой системы ntfs.sys возвращает статус STATUS_ACCESS_DENIED. В ntfs.sys существуют две переменные NtfsProtectSystemFiles и NtfsProtectSystemAttributes. По умолчанию значением обоих переменных является TRUE.
....
Кроме того, эти файлы не способны обрабатывать запрос IRP_MJ_READ, возникающего при обращении к фунцкии ZwReadFile, и если такой запрос поступит, система даст сбой."

(c) Гэри Неббет


 
kaZaNoVa ©   (2006-01-28 19:10) [9]

можно попробовать получить доступ к ним из другой ОС .. (например из ДОСа - NTFS for dos) но нет уверенности, что это сработает


 
Bobby   (2006-01-30 10:47) [10]

Вот код с wasm.ru
Проверено, работает. Читает прямо с устройства. Попробуй заменить
lstrcat(Name, "\\config\\SAM");
на то, что тебе надо

#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <winioctl.h>

ULONGLONG *GetFileClusters(
                   PCHAR lpFileName,
                   ULONG ClusterSize,
                   ULONG *ClCount,
                   ULONG *FileSize
                   )
{
   HANDLE  hFile;
   ULONG   OutSize;
   ULONG   Bytes, Cls, CnCount, r;
   ULONGLONG *Clusters = NULL;
   BOOLEAN Result = FALSE;
   LARGE_INTEGER PrevVCN, Lcn;
   STARTING_VCN_INPUT_BUFFER  InBuf;
   PRETRIEVAL_POINTERS_BUFFER OutBuf;

   hFile = CreateFile(lpFileName, FILE_READ_ATTRIBUTES,
                      FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
                      NULL, OPEN_EXISTING, 0, 0);

   if (hFile != INVALID_HANDLE_VALUE)
   {
       *FileSize = GetFileSize(hFile, NULL);

       OutSize = sizeof(RETRIEVAL_POINTERS_BUFFER) + (*FileSize / ClusterSize) * sizeof(OutBuf->Extents);

       OutBuf = malloc(OutSize);

       InBuf.StartingVcn.QuadPart = 0;
 
       if (DeviceIoControl(hFile, FSCTL_GET_RETRIEVAL_POINTERS, &InBuf,
                           sizeof(InBuf), OutBuf, OutSize, &Bytes, NULL))
       {
           *ClCount = (*FileSize + ClusterSize - 1) / ClusterSize;

           Clusters = malloc(*ClCount * sizeof(ULONGLONG));

           PrevVCN = OutBuf->StartingVcn;

           for (r = 0, Cls = 0; r < OutBuf->ExtentCount; r++)
           {
               Lcn = OutBuf->Extents[r].Lcn;

               for (CnCount = (ULONG)(OutBuf->Extents[r].NextVcn.QuadPart - PrevVCN.QuadPart);
                    CnCount; CnCount--, Cls++, Lcn.QuadPart++) Clusters[Cls] = Lcn.QuadPart;

               PrevVCN = OutBuf->Extents[r].NextVcn;
           }
       }
 
       free(OutBuf);

       CloseHandle(hFile);
   }
   return Clusters;
}

void FileCopy(
       PCHAR lpSrcName,
       PCHAR lpDstName
       )
{
   ULONG         ClusterSize, BlockSize;
   ULONGLONG    *Clusters;
   ULONG         ClCount, FileSize, Bytes;
   HANDLE        hDrive, hFile;
   ULONG         SecPerCl, BtPerSec, r;
   PVOID         Buff;
   LARGE_INTEGER Offset;
   CHAR          Name[7];

   Name[0] = lpSrcName[0];
   Name[1] = ":";
   Name[2] = 0;

   GetDiskFreeSpace(Name, &SecPerCl, &BtPerSec, NULL, NULL);

   ClusterSize = SecPerCl * BtPerSec;

   Clusters = GetFileClusters(lpSrcName, ClusterSize, &ClCount, &FileSize);

   if (Clusters)
   {
       Name[0] = "\\";
       Name[1] = "\\";
       Name[2] = ".";
       Name[3] = "\\";
       Name[4] = lpSrcName[0];
       Name[5] = ":";
       Name[6] = 0;

       hDrive = CreateFile(Name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);

       if (hDrive != INVALID_HANDLE_VALUE)
       {
           hFile = CreateFile(lpDstName, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, 0);

           if (hFile != INVALID_HANDLE_VALUE)
           {
               Buff = malloc(ClusterSize);

               for (r = 0; r < ClCount; r++, FileSize -= BlockSize)
               {
                   Offset.QuadPart = ClusterSize * Clusters[r];

                   SetFilePointer(hDrive, Offset.LowPart, &Offset.HighPart, FILE_BEGIN);

                   ReadFile(hDrive, Buff, ClusterSize, &Bytes, NULL);

                   BlockSize = FileSize < ClusterSize ? FileSize : ClusterSize;

                   WriteFile(hFile, Buff, BlockSize, &Bytes, NULL);
               }

               free(Buff);

               CloseHandle(hFile);
           }
           CloseHandle(hDrive);
       }
       free(Clusters);
   }
}

int main(int argc, char *argv[])
{
CHAR Name[MAX_PATH];

   GetSystemDirectory(Name, MAX_PATH);

   lstrcat(Name, "\\config\\SAM");

if (argc > 1)
{
 FileCopy(Name, argv[1]);
}
return 0;
}


 
kaZaNoVa ©   (2006-01-30 10:54) [11]

Bobby   (30.01.06 10:47) [10]
а на делфи аналог есть такого?


 
Bobby   (2006-01-30 10:56) [12]

Нет, к сожалению


 
Чапаев ©   (2006-01-30 18:13) [13]


> Автор книжки "Справочник по базовому API Windows" Гэри Неббет
> пишет, что доступ к этим (системным) файлам NTFS через файловую
> систему невозможен. У меня нет оснований не верить ему.

В командной строке введи: type c:\$Volume. Комментарии излишни. ;-)


 
Игорь Шевченко ©   (2006-01-31 10:49) [14]


> В командной строке введи: type c:\$Volume. Комментарии излишни.
>  ;-)


или type c:\$mft ?


 
kaZaNoVa ©   (2006-01-31 11:03) [15]

Чапаев ©   (30.01.06 18:13) [13]

> В командной строке введи: type c:\$Volume. Комментарии
> излишни. ;-)

у меня пишет:

Microsoft Windows [Версия 5.2.3790]
(С) Корпорация Майкрософт, 1985-2003.

E:\>type c:\$Volume
Не удается найти указанный файл.



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

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
2-1143925921
AlexeyT
2006-04-02 01:12
2006.04.16
Установить шрифт при печати


2-1143788951
Ega23
2006-03-31 11:09
2006.04.16
Поиск параметров командной строки


2-1143693035
Sw
2006-03-30 08:30
2006.04.16
DBGrid


2-1143539949
Квэнди
2006-03-28 13:59
2006.04.16
Опять про IdMessage


8-1131604070
plotn
2005-11-10 09:27
2006.04.16
Как взять информацию из тэгов ogg файлов?