 
         
					
                
                
            burask
- 
                Постов3
- 
                Зарегистрирован
- 
                Посещение
Тип контента
Профили
Форумы
Блоги
Галерея
События
Сообщения, опубликованные burask
- 
		
- 
		стараюсь писать самодокументированный код с комментариями и шириной в 80 символов.что-то типо: 
 /**
 * Модуль для работы с системными службами
 * License: GPLv2
 * Authors: Дамбаев Алесандр, theice@inbox.ru
 * Copyrights: Дамбаев Александр, theice@inbox.ru
 * Date: Jul 26, 2009
 * Version: 1.0
 * Example:
 * ---
 * import prt_ctrl. scm;
 * Scm scm = new Scm;
 * Service svc = scm. open_service( "Prt_Service");
 * try
 * {
 * svc. stop( );
 * }catch( Exception e)
 * {
 * //kills svc
 * }
 * ---
 */
 module prt_ctrl. scm;
 import win32. windows;
 import win32. winsvc;
 import std.stdio;
 import std.path;
 import std.c.string;
 // права доступа к службе
 const SERVICE_RIGHTS = SERVICE_START | SERVICE_STOP | SERVICE_QUERY_STATUS |
 SERVICE_QUERY_CONFIG;
 // права доступа к менеджеру служб
 const SC_RIGHTS = SC_MANAGER_ALL_ACCESS;
 /**
 * класс, описывающий системную службу
 */
 class Service
 {
 public:
 /**
 * конструктор класса
 * Params:
 * scm = дескриптор менеджера служб
 * name = внутреннее имя системной службы
 * dw_access = права доступа к системной службе
 * Throws:
 * "unable to open service" если не удалось получить
 * требуемый доступ к службе.
 */
 this( SC_HANDLE scm,
 char[] name,
 DWORD dw_access = SERVICE_RIGHTS)
 {
 h_service = OpenService( scm, (name~'\0'). ptr, dw_access);
 if( !h_service)
 throw new Exception( "unable to open service");
 }
 ~this( )
 {
 if( h_service)
 CloseServiceHandle( h_service);
 }
 /**
 * запуск системной службы
 * Throws:
 * "unable to start service" если запуск не удался;
 */
 void
 start( )
 {
 if( !StartService( h_service, 0, null))
 throw new Exception( "unable to start service");
 }
 /**
 * останавливает службы
 * Throws:
 * "unable to stop service", если не удалось дать команду
 * для остановки, либо служба не остановилась
 * "unable to query service status", если не удалось
 * узнать статус службы
 * "service stopping is timouted", если служба не смогла
 * остановиться за 60 сек.
 * "unable to query service config", если не удалось
 * узнать конфигурацию службы
 */
 void
 stop( )
 {
 SERVICE_STATUS ss;
 if( !ControlService( h_service, SERVICE_CONTROL_STOP, &ss))
 {
 throw new Exception( "unable to stop service");
 }
 if( !QueryServiceStatus( h_service, &ss))
 throw new Exception( "unable to query service "
 "status");
 uint wait;
 while( ss. dwCurrentState != SERVICE_STOP_PENDING &&
 wait < 6000)
 {
 Sleep( 10);
 ++wait;
 if( !QueryServiceStatus( h_service, &ss))
 throw new Exception( "unable to query "
 "service status");
 }
 if( ss. dwCurrentState != SERVICE_STOP_PENDING)
 throw new Exception( "service stopping is time"
 "outed");
 wait = 0;
 while( ss. dwCurrentState != SERVICE_STOPPED &&
 wait < 6000)
 {
 Sleep( 10);
 ++wait;
 if( !QueryServiceStatus( h_service, &ss))
 throw new Exception( "unable to query "
 "service status");
 }
 if( !QueryServiceStatus( h_service, &ss))
 throw new Exception( "unable to query service "
 "status");
 if( ss. dwCurrentState != SERVICE_STOPPED)
 throw new Exception( "unable to stop service");
 }
 /**
 * Возвращает имя бинарного файла системной службы
 * Returns:
 * имя бинарного файла системной службы
 * Throws:
 * "need to open service first", если доступ к службе
 * не получен
 * "unable to query service's config", если невозможно
 * получить конфигурацию службы
 */
 char[]
 image( )
 {
 QUERY_SERVICE_CONFIG * service_conf;
 DWORD dw_needed;
 char[] buf = new char[ 256];
 service_conf = cast(QUERY_SERVICE_CONFIG*)buf.ptr;
 if( !h_service)
 throw new Exception( "need to open service "
 "first");
 if( !QueryServiceConfig( h_service, service_conf, 256,
 &dw_needed))
 throw new Exception( "unable to query service's"
 " config ");
 return getBaseName( service_conf. lpBinaryPathName[ 0..
 strlen(service_conf. lpBinaryPathName)]);
 }
 private:
 /// дескриптор службы
 SC_HANDLE h_service;
 /// имя службы
 //char[] s_name;
 }
 /**
 * класс, описывающий работу с менеджером служб
 */
 class Scm
 {
 public:
 /**
 * Конструктор класса
 * Params:
 * s_mach = имя компьютера
 * dw_access = права доступа к менеджеру служб
 * Throws:
 * "unable to open sc", если невозможно получить доступ с
 * затребованными правами
 */
 this( char[] s_mach = null, DWORD dw_access = SC_RIGHTS)
 {
 s_machine = s_mach;
 if( s_mach != null)
 h_sc = OpenSCManager( (s_machine~'\0'). ptr,
 null, dw_access);
 else
 h_sc = OpenSCManager( null, null, dw_access);
 if( h_sc == null)
 throw new Exception( "unable to open sc");
 }
 ~this( )
 {
 if( h_sc)
 CloseServiceHandle( h_sc);
 }
 /**
 * Создает класс службы и открывает ее
 * Params:
 * name = внутреннее имя службы
 * dw_access = access flags
 * Returns:
 * указатель на экземпляр класса Service
 */
 Service
 open_service( char[] name, DWORD dw_access =
 SERVICE_RIGHTS)
 {
 return new Service( h_sc, name, dw_access);
 }
 private:
 /// имя компьютера
 char[] s_machine;
 /// дескриптор менеджера служб
 SC_HANDLE h_sc = null;
 }вот вопрос - комментарии на каком языке предпочитаете писать? Раньше все комментарии оставлял на английском, с замахом на глобальность творения (:, но после того, как начал работать "программистом", заметил, что довольно много людей не знают английского... кто-нить читал каменты к коду на транслите? (: приходилось ... гг А вобще - стиль склонен меняться с опытом Что за язык программирования ? 

Вирус вымогатель: Ваша Windows заблокирована... Отправьте СМС...Заблокирован vkontakte...
в IT-взаимопомощь
Опубликовано
1. Ничего сносить не надо.
2. Разблокировать ПК методами http://boltunishka.berserki.ru/archives/459
3. Лечить антивирусом. Лучше снять винт и проверить на другом ПК. Если другого ПК нет, то в безопасном режиме.
4. Не работайте с привилегиями администратора, тогда вероятность поймать всякую дрянь значительно снижается. Установленный антивир не панацея.
Если сделать сначала п.3 , а потом п.2 головняк обеспечен.