подопытные головоломки DEEONI$ (DEEONIS@GMAIL.COM) Спецвыпуск: Хакер, номер #066, стр. 066-050-4 Для закрытия ключа вызывается функция RegCloseKey. LONG RegCloseKey(HKEY hKey); Единственным ее параметром является хэндл на открытый ранее ключ. Возвращаемые значения — такие же, как и у предыдущей API. На этом работу с реестром прошу считать завершенной. Начинается работа с файловой системой. Напоминаю, что для работы игрушки без ограничений требуется удалить файл DB365884.TMP из временного каталога, который не всегда располагается в одном и том же месте, — это единственная проблема в данный момент. Так где именно искать? Чтобы знать точно, нужно определить полный путь до этой директории, что делается при помощи функции GetTempPath. Она описана ниже. DWORD GetTempPath(DWORD nBufferLength, LPTSTR lpBuffer); nBufferLength — размер буфера, куда будет записан полный путь. lpBuffer — сам буфер или, естественно, строка (кому как нравится). Теперь, когда мы точно знаем место хранения «нехорошего» файла, осталось лишь удалить его, для чего вызываем следующее: BOOL DeleteFile(LPCTSTR lpFileName); Единственным параметром этой функции является полное имя удаляемого файла. В случае успешного выполнения возвращается ненулевое значение. Для запуска самой игры используем ShellExecute. HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd); Первым параметром этой функции является хэндл родительского окна. lpOperation — строка, содержащая вид операции, который должен быть произведен над файлом (например open или print). lpFile — собственно, и есть имя файла, который мы будем вызывать. lpParameters — параметры, которые передаются вызываемому приложению. lpDirectory — рабочая директория. nShowCmd — режим отображения. Теперь собрана полная информация, нужная чтобы написать собственный загрузчик к игре. Смело смотрим на листинг 1. Пример загрузчика void Loader (void) { //handle ключа реестра HKEY hk; //Строка, в которую запишется путь к временной папке char TmpPath[1024]; //Имя файла, который надо удалить const char *fName="DB365884.TMP"; //Открываем ключ HKEY_LOCAL_MACHINE\SOFTWARE\Licenses if(RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Licenses",&hk)) //если ошибка, то выводим сообщение MessageBox(NULL,"Невозможно открыть ключ реестра"," Ошибка ",MB_ICONERROR); //удаляем ненужные параметры RegDeleteValue(hk,"{IC8265E20B243C369}"); RegDeleteValue(hk,"{0C8265E20B243C369}"); //закрываем ключ RegCloseKey(hk); //то же самое, но для другого ключа и значения if(RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\CLSID\\{942D82A5-DA03-640B-5E19-3CBD62700780}",&hk)) MessageBox(NULL," Невозможно открыть ключ реестра "," Ошибка ",MB_ICONERROR); RegDeleteValue(hk,"wPzA"); RegCloseKey(hk); //получаем путь к временной папке GetTempPath(1000,TmpPath); //добавляем имя файла, который надо удалить strcat(TmpPath,fName); //удаляем его if(!DeleteFile(TmpPath)) //Если не получилось, то выводим соответствующее сообщение |