Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.
  Листинг 1 (создаёт в реестре NT учётную запись сервиса) setup.cpp
 
 include <windows.h>
 
 
 
 char infomes[512];
 
 char servicedir[MAX_PATH];
 
 
 
 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow)
 
 {
 
 	lstrcpy(infomes, "Service succesful creat at path:\n");
 
 	lstrcpy(servicedir, "%SystemRoot%\\System32\\service.exe");
 
 
 
 	SC_HANDLE scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE);
 
 	if(scm!=NULL) {
 
 		SC_HANDLE svc=CreateService(scm,
 
 			"Terra-Incognita",
 
 			"Terra-Incognita",
 
 			0,
 
 			SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS,
 
 			SERVICE_AUTO_START,
 
 			SERVICE_ERROR_IGNORE,
 
 			servicedir,
 
 			NULL,
 
 			NULL,
 
 			NULL,
 
 			NULL,
 
 			NULL);
 
 
 
 		if(svc!=NULL) {
 
 			CloseServiceHandle(svc);
 
 			strcat(infomes, servicedir);
 
 			MessageBox(NULL, infomes, "Install", NULL);
 
 		}
 
 		CloseServiceHandle(scm);
 
 	}
 
 	else  {
 
 		MessageBox(NULL, "Error: Could not create Service.", "Install", NULL);
 
 	}
 
 
 
 	return 0;
 
 }
 
 

 

  Листинг 2 (исходный код, который будет обрабатывать управляющие сообщения от NT) service.cpp
 
 #include 
 
 #include "service.h"
 
 
 
 HMODULE g_module=NULL;
 
 
 
 DWORD WINAPI EntryPoint(LPVOID lpParameter)
 
 {
 
 	STARTUPINFO si;
 
 	PROCESS_INFORMATION pi;
 
 	char svName[150];
 
 	char *svTarget="TERRA.EXE\0";
 
 	char svTargetName[150],*svFilePart;
 
 	char svComLine[2048];
 
 	char svFileName[512];
 
 
 
 	g_module=GetModuleHandle(NULL);
 
 	GetModuleFileName(g_module,svFileName,512);
 
 
 
 	GetSystemDirectory(svName,150-1);
 
 	lstrcat(svName,"\\");
 
 	lstrcpyn(svName+lstrlen(svName),svTarget,150-lstrlen(svName));
 
 	GetFullPathName(svName,150,svTargetName,&svFilePart);
 
 
 
 	lstrcpyn(svComLine,svTargetName,2048);
 
 	lstrcpyn(svComLine+lstrlen(svComLine)," ",2048-lstrlen(svComLine));
 
 	lstrcpyn(svComLine+lstrlen(svComLine),svFileName,2048-lstrlen(svComLine));
 
 
 
 	memset(&si,0,sizeof(STARTUPINFO));
 
 	si.cb=sizeof(STARTUPINFO);
 
 	si.dwFlags=STARTF_FORCEOFFFEEDBACK;
 
 
 
 //	MessageBox(NULL,svComLine,"Command Line before...",MB_OK);
 
 	CreateProcess(NULL,svComLine,NULL,NULL,0,0,NULL,NULL,&si,&pi);
 
 
 
 	return 0;
 
 }
 
 
 
 extern "C" int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow);
 
 
 
 VOID WINAPI Handler( DWORD fdwControl )
 
 {
 
 
 
 }
 
 
 
 void WINAPI ServiceMain(DWORD dwArgc,LPTSTR *lpszArgv)
 
 {
 
 	SERVICE_STATUS_HANDLE ssh=RegisterServiceCtrlHandler(WebPrice, &Handler);
 
 
 
 	SERVICE_STATUS ss;
 
 	ss.dwServiceType=SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS;
 
 	ss.dwCurrentState=SERVICE_RUNNING;
 
 	ss.dwControlsAccepted=0;
 
 	ss.dwWin32ExitCode=NO_ERROR;
 
 	ss.dwCheckPoint=0;
 
 	ss.dwWaitHint=0;
 
 	SetServiceStatus(ssh,&ss);
 
 
 
 	EntryPoint(GetModuleHandle(NULL));
 
 
 
 	ss.dwServiceType=SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS;
 
 	ss.dwCurrentState=SERVICE_STOPPED;
 
 	ss.dwControlsAccepted=0;
 
 	ss.dwWin32ExitCode=NO_ERROR;
 
 	ss.dwCheckPoint=0;
 
 	ss.dwWaitHint=0;
 
 	SetServiceStatus(ssh,&ss);
 
 }
 
 
 
 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow)
 
 {
 
 	SERVICE_TABLE_ENTRY DispatcherTable[]=
 
 	{
 
 		{	WebPrice,
 
 			(LPSERVICE_MAIN_FUNCTION)ServiceMain },
 
 		{	NULL,
 
 			NULL }
 
 	};
 
 
 
 	StartServiceCtrlDispatcher(DispatcherTable);
 
 	return 0;
 
 }
 
 
  Листинг 3 (service.h)
 
 #include <windows.h>
 
 
 
 #ifndef __INC_MAIN_H
 
 #define __INC_MAIN_H
 
 
 
 #define WebPrice "WebPrice"
 
 extern DWORD WINAPI EntryPoint(LPVOID lpParameter);
 
 
 
 extern HMODULE g_module;
 
 
 
 #endif
 
 

 

  Листинг 4 (программка удаляет из реестра NT наш сервис) uninst.cpp
 
 #include <windows.h>
 
 
 
 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow)
 
 {
 
 
 
 	SC_HANDLE scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
 
 	if(scm!=NULL) {
 
 		SC_HANDLE svc=OpenService(scm, "Terra-Incognita", STANDARD_RIGHTS_REQUIRED);
 
 		DeleteService(svc);
 
 
 
 		if(svc!=NULL) {
 
 			CloseServiceHandle(svc);
 
 			MessageBox(NULL, "Succesful", "UnInstall", NULL);
 
 		}
 
 		CloseServiceHandle(scm);
 
 	}
 
 	else  {
 
 		MessageBox(NULL, "Error: Could not uninstall Service.", "UnInstall", NULL);
 
 	}
 
 
 
 	return 0;
 
 }
 
 




<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU Проект ReactOS