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

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

06.12.2008, 18:26. Показов 2729. Ответов 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
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru