Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116

Обнаружение потоков в NTFS

06.12.2008, 18:26. Показов 2736. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задали лабу: написать программу для обнаружения потоков в NTFS. Насколько это реально сделать? С чего начать?
P.S Уже прогуглил.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2008, 18:26
Ответы с готовыми решениями:

Чтение и и редактирование файловых потоков NTFS
Такой вопрос 1) Я записал соответствующие части контента по языкам - потокам 2) Потом хотел бы отредактировать содержимое файла - в...

Ошибка монтирования ntfs раздела ( NTFS partition is in an Unsafe state)
Доброго времени суток. Дано: Linux mint 18.3 Несколько ntfs разделов оставшихся от винды. Суть проблемы, при установке минта...

Область видимости общей переменной для потоков + закрытие потоков
Есть два вопроса про потоки. Первый. Как можно сделать общую переменную для основного потока и моих ? struct ThreadInfo1 { int...

8
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
08.12.2008, 08:44
плохо прогуглил.
хорошая встряска любого поисковика не оставит вопросов по твоей проблеме.
почитай вот тут еще:
http://www.codeproject.com/csh... rticle.asp
http://www.nestor.minsk.by/sr/2005/03/05310.html
http://www.oszone.net/190/
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
13.12.2008, 18:10  [ТС]
AntonChik, спасибо. Но, написание программы с нуля будет тем же, что и попытка взять линию Мажино штурмом.
У меня появилась следующая идея:
1) Используя консольную программку Ins http://ntsecurity.nu/toolbox/lns/ определить наличие файлов с потоками и названия потоков.
2) Записать полученную информацию в файл (в идеале в переменную, но думаю это будет сложно).
3) Из этого файла достать имена файлов и поток (с помощью текстового фильтра)
4) С помощью команды X:/>more <Имя файла:ИмяПотока вызываемой из командной строки достать информацию хранящиюся в потоке.

Вопросы:
1) как можно из своей проги вызвать выполнение другой программы? Надо учитывать, что Ins.exe является консольной и для получения инф. в файл надо выполнить команду Ins.exe X:/>>Potoki.txt
4) Как выполнить команду X:/>more <Имя файла:ИмяПотока в программе на C++?

Ручками я делаю так - выполнить-> cmd->C:/Ins.exe F:/>>file.txt, а теперь надо из программы.

Добавлено через 19 часов 48 минут 18 секунд
1) Как писал великий Гоголь: "За неимением гербовой, ...", решил делать более хитро с использованием реестра.
Однако возникла проблема: файл InfPotokiC++.txt после выполнения
C++
1
Reg->WriteString("AutoRun","F:\\1.exe F:/ >> F:\InfPotokiC++.txt");
не успевает создаться, как к нему уже идет обращение следующего оператора
C++
1
2
FNameStream="F:\\InfPotokiC++.txt";
List->LoadFromFile(FNameStream);
. Ка можно сделать, чтобы
C++
1
2
FNameStream="F:\\InfPotokiC++.txt";
List->LoadFromFile(FNameStream);
дожидалось создания файла
C++
1
WinExec("cmd.exe",SW_SHOWMINNOACTIVE);// Арх стр 1011
Тоже самое про реестр - новое значение не успевает записываться, как уже идет обращение к мену след. оператора.

2) Как задать задержку в 50 миллисекунд.

Добавлено через 4 часа 9 минут 41 секунду
3) Как можно закрыть после выолнения программу (в данном случае cmd.exe), а еще лучше запускать незаметно (кол-во запусков может быть достаточно большим).
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
15.12.2008, 10:47  [ТС]
Повтрю свой вопрос:
3) Как можно закрыть после выполнения программу (в данном случае cmd.exe), а еще лучше запускать незаметно (кол-во запусков может быть достаточно большим).

Добавлено через 3 минуты 27 секунд
Так вариант решия проблемы пробывал писать скрипт на AutoIt и компилить его в exe, но из моей программы он не запускается, вообще.
Скрипт:
Code
1
2
3
4
Run("F:\cmd.exe /k F:\1.exe F:/ >> InfPotoki.txt");
WinWaitActive("F:\cmd.exe");
Send("exit");
Send("{ENTER}");
Запускаю его
Code
1
WinExec("RunCmd.exe",SW_SHOWMINNOACTIVE);
P.S где есть форум аутоитщеков?

Добавлено через 5 минут 57 секунд
Есть и другая проблема:Не успевает создаваться и наполняться файл, как уже следующий оператор пытается воспользоваться этим файлом. И ясно дело, обламывается.

Добавлено через 33 минуты 49 секунд
Неужели, ни кто не знает? Пока не решу эту проблему, дальнейшая работа над прогой теряет смысл.
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
15.12.2008, 12:47
ну перед
C++
1
2
FNameStream="F:\\InfPotokiC++.txt";
List->LoadFromFile(FNameStream);
неплохо бы проверить существует ли уже такой файл, проверить не используется(не открыт) ли он в данный момент. можно проверить размер файла (не нулевой ли).

а чтоб консольное окошко закрывалось запускай прогу через команду start, т.е.
start F:\1.exe
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
15.12.2008, 13:41  [ТС]
AntonChik, за start спасибо, но после нее все равно остается cmd, которая не закрывается. Т.е просто происходит выполнеие
Code
1
F:\\cmd.exe /k start F:\\1.exe F:/ >> F:\\InfPotoki.txt
в новом окне, которое закрывается, а cmd остается. Пока это главная проблема, котрую не могу решить.
Про файлы. Сделал так, что прога должна дожидаться
Code
1
while (!FileExists(FNameStream)) { }
. А вот с проверкой, на пустоту пока не сообразил.
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
15.12.2008, 14:03
попробуй пойти немного по-сложнее, но красивее:
обойти cmd и читать выход 1.exe напрямик.
глянь цепочку:
http://www.opennet.ru/man.shtm... category=3
1
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
15.12.2008, 15:33  [ТС]
AntonChik, глянул. нашел пример того, что мне надо, не работает (не выводит результат)
C++
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
void __fastcall TForm1::Button1Click( TObject *Sender )
{
    String fScript = ExtractFilePath( ParamStr( 0 ) ) + "temp.sam";
    Memo1->Lines->SaveToFile( fScript );
    String filename = ExtractFilePath( ParamStr( 0 ) ) + "samx.exe";
    String fArg = fScript;
 
    SECURITY_ATTRIBUTES sa;
 
    ZeroMemory( &sa, sizeof( sa ) );
    sa.nLength = sizeof( sa );
    sa.bInheritHandle = true;
 
    HANDLE hRead, hWrite;
 
    if ( !CreatePipe( &hRead, &hWrite, &sa, 0 ) )
    {
        ShowMessage( "Cannot create pipe" );
        return ;
    }
 
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    memset( &si, 0, sizeof( si ) );
    si.hStdOutput = hWrite;
    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USECOUNTCHARS | STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    si.dwXCountChars = si.dwYCountChars = 1;
 
    filename += " temp.sam " + Edit1->Text;
 
    CreateProcess(
        NULL,  // или любая другая программа
        "cmd.exe /k F:\\1.exe F:/ ", //filename.c_str(),
        NULL,
        NULL,
        TRUE,
        0,
        NULL,
        NULL,
        &si,
        &pi );
 
 
    CloseHandle( hWrite );
    CloseHandle( pi.hThread );
    CloseHandle( pi.hProcess );
 
    String rez;
    char temp[ 255 ];
    DWORD dwBytesRead;
 
 
    while ( 1 )
    {
        memset( temp, 0, 255 );
        if ( !ReadFile( hRead, temp, 255, &dwBytesRead, NULL ) || !dwBytesRead )
            break;
        rez += temp;
    }
 
    //   ShowMessage(rez);
    Memo2->Lines->Add( rez );
}
А так же не ясно для чего нужны edit1 и memo1?

P.S проблему с закрытием решил проще в параметрах командной строки наджо писать не k, а с
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
22.12.2008, 15:43  [ТС]
промучавшись с билдером написал это чудо на AutoIt. кому интересен, вот код
Code
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
            $disk = GUICtrlRead($DiskEdit); получить из дискэдит
            $diskVer = GUICtrlRead($DiskVerifEdit); получить из дискэдит
            $way = $disk & ":\cmd.exe /k 1.exe " & $diskVer & ":/ >> InfPotoki.txt"
            $ex = "exit "
                        
            FileClose($disk & ":\InfPotoki.txt");
            FileClose($disk & ":\Potoki.txt");
            FileClose($disk & ":\WayPotoki.txt");
            If FileExists($disk&":\InfPotoki.txt") Then FileDelete($disk&":\InfPotoki.txt") 
            If FileExists($disk&":\Potoki.txt") Then FileDelete($disk&":\Potoki.txt")
            If FileExists($disk&":\WayPotoki.txt") Then FileDelete($disk&":\WayPotoki.txt"); если файл существует, то удалить его
            
            
            Run($way) ; запускаем программу
            WinWaitNotActive($disk & ":\cmd.exe - 1.exe "&$diskVer&":/"); ждать пока окно не доступно для ввода информации (т.е идет работа программы ins.exe по поиску файлов с потоками
            WinWaitActive($disk & ":\cmd.exe");
            Sleep(500) ; задержки прозапас
            Send($ex);
            Sleep(500)
            Send("{ENTER}");
            
            FileClose($disk & ":\InfPotoki.txt");
            FileClose($disk & ":\WayPotoki.txt");
            $way = $disk & ":\2.exe"; запуск моей проги для выделения названия файла и названия потока
            Run($way);
            WinWaitActive("End");
            WinClose("End");
            
            $file = FileOpen($disk & ":\WayPotoki.txt", 0)
            $way = $disk & ":\cmd.exe"
            Run($way);
; вывести содержимое потока в файл 
            While 1
                $line = FileReadLine($file)
                If @error = -1 Then ExitLoop ; файл закончился
                WinWaitActive($disk & ":\cmd.exe");
                $command = "more < " & $line & " >> " & $disk & ":\Potoki.txt"
                Send($command)
                ;ConsoleRead($command);
                Sleep(200)
                Send("{ENTER}"); нажать enter
            Wend
            Sleep(500)
            Send($ex);
            Sleep(500)
            Send("{ENTER}");
            ;Run($disk & ":\Potoki.txt");
            FileClose($disk & ":\Potoki.txt");
            FileClose($disk & ":\WayPotoki.txt");
            
            $file1 = FileOpen($disk & ":\WayPotoki.txt", 0)     
            $file2 = FileOpen($disk & ":\Potoki.txt", 0)        
                    
                ;MsgBox(0, "Line read:", $line1 & " " &$line2)
            Wend
            FileClose($disk & ":\WayPotoki.txt");
Прога для выделения названия файла и потока
C++
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
28
AnsiString Disk,Folder,Stream,Buf,Way,FNameStream;
int PosStart, PosEnd;
FNameStream = "WayPotoki.txt";
 
if (FileExists(FNameStream)) DeleteFile(FNameStream);
List->LoadFromFile("InfPotoki.txt");
 
for (int i=5; i<=List->Count-1;i=i+4)
        {
        Way="";
        Disk = List->Strings[i];
        Disk = Disk.SubString(2,2); //X:
        Folder = List->Strings[i];
        Folder = Folder.SubString(5,Folder.Length()-4);
        Stream = List->Strings[i+2];
        PosStart = Stream.Pos(":");
        PosEnd = Stream.Pos("$")-1;
        Stream = Stream.SubString(PosStart,PosEnd-PosStart);
        Way = Disk+Folder+Stream;
        //PotokEdit->Lines->Add();
        ListS->Add(Way);
        //ListS->Strings[j]=Way;
        }
ListS->SaveToFile(FNameStream);
PotokEdit->Lines->AddStrings(ListS);
while (!FileExists(FNameStream)) {};
Form1->Caption="End";
Abort;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2008, 15:43
Помогаю со студенческими работами здесь

Замедление работы потоков если запущено несколько потоков
Есть отдельный поток который движет красным квадратом. Он каждую миллисекунду меняет положение квадрата на пиксель. Есть другой поток, он...

Разработать программу, генерирующую n потоков в пуле потоков CLR
Добрый вечер. Решил поделать старые лабораторные, которые мне уже давно нужно было сдавать, но встрял на одном задании: &quot;Разработать...

Создание и завершение процессов и потоков. Приоритеты выполнения потоков
Здравствуйте. Буду очень раз если поможете понять,что конкретно нужно сделать в вот этом задании,пока особого представления о...

Синхронизация потоков на элементарном уровне (переключение потоков)
в общем разбираюсь с потоками, на сколько понял мне нужен lock Вот имеется просто пример public void RunAdd() ...

Синхронизация потоков: проблема гонки потоков
Есть проблема в синхронизации потоков, которую я не знаю, как решить. Точнее у меня получается типичная гонка потоков. Есть функция,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru