Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Services(WinXP)  (Прочитано 5524 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« : 23-08-2004 05:24 » 

После того как сервис должен стартовать, я его не вижу в Services Жаль
Вот код, подскажите что не так делаю ?
Код:
#include <vcl.h>
#pragma hdrstop

#include "serip_main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
/**************************************/
HANDLE hDevice = INVALID_HANDLE_VALUE;
/**************************************/
TVirtSeripMon *VirtSeripMon;
//---------------------------------------------------------------------------
__fastcall TVirtSeripMon::TVirtSeripMon(TComponent* Owner)
    : TForm(Owner)
{
    // Proveriaem versiju Windows
    OSVERSIONINFO os;
os.dwOSVersionInfoSize=sizeof(os);
GetVersionEx(&os);
if (os.dwPlatformId!=VER_PLATFORM_WIN32_NT)
{
        Info->Font->Color = clBackground;
        Info->Lines->Add("Program will work only on Windows NT platform...");
}else{
        Info->Font->Color = clBackground;
        Info->Lines->Add("OS checked!");
        Info->Lines->Add("Programm should work normally...");
    }
}
//---------------------------------------------------------------------------
void __fastcall TVirtSeripMon::ExitClick(TObject */*Sender*/)
{
    if (hDevice!= INVALID_HANDLE_VALUE)
{
CloseHandle(hDevice);
SC_HANDLE sc = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);
if (sc)
{
SC_HANDLE hSrv = OpenService(sc,"SeripSpy",SERVICE_START | SERVICE_STOP |DELETE);
CloseServiceHandle(sc);
if (hSrv)
{
SERVICE_STATUS ss;
ControlService(hSrv,SERVICE_CONTROL_STOP,&ss);
CloseServiceHandle(hSrv);
}
}
}
    Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TVirtSeripMon::StartClick(TObject */*Sender*/)
{
    //Probuem otkrit nash devais
    hDevice = CreateFile("\\\\.\\SeripSpy",
                        GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE,
                        FILE_SHARE_WRITE | FILE_SHARE_READ,
                        NULL,
                        OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
                NULL);
    if (hDevice == INVALID_HANDLE_VALUE) // Nash devais ne prisutstvuet v sisteme
{
        // Proveriaem prava dostupa
SC_HANDLE sc = OpenSCManager(NULL,SERVICES_ACTIVE_DATABASE,SC_MANAGER_ALL_ACCESS);
        if (!sc)
{
Info->Font->Color = clBackground;
            Info->Lines->Add("Serip Spy cannot install device driver...");
            Info->Lines->Add("You must have administrative privileges to install it...");
}
        // Probuem najti devais
SC_HANDLE hSrv=OpenService(sc,"SeripSpy",SERVICE_START | SERVICE_STOP |DELETE);
CloseServiceHandle(sc);
        if (!hSrv)
{
Info->Font->Color = clBackground;
            Info->Lines->Add("Your system does not have SeripSpy device driver installed...");
            Info->Lines->Add("Use button \"Install Device\" to install it...");
"else|
            // Startuem ego
if (!StartService(hSrv,0,NULL))
{
                Info->Font->Color = clBackground;
                Info->Lines->Add("Unexpected error occured...");
                Info->Lines->Add("SeripSpy device driver may be missing...");
CloseServiceHandle(hSrv);
}else{
                CloseServiceHandle(hSrv);
hDevice=CreateFile("\\\\.\\SeripSpy",
                                   GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE,
                                   FILE_SHARE_WRITE | FILE_SHARE_READ,
                                   NULL,
                                   OPEN_EXISTING,
                                   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
               NULL);
                if (hDevice == INVALID_HANDLE_VALUE)
{
                    Info->Font->Color = clBackground;
                    Info->Lines->Add("Unexpected error occured...");
                    Info->Lines->Add("Cannot get access to SeripSpy device driver...");
}
                Info->Font->Color = clBackground;
                Info->Lines->Add("Loaded!");
            }
        }
    }
}
//---------------------------------------------------------------------------
void __fastcall TVirtSeripMon::InstallClick(TObject */*Sender*/)
{
    if (hDevice != INVALID_HANDLE_VALUE)|  }
SC_HANDLE sc = OpenSCManager(NULL,SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);
if (!sc)
{
        Info->Lines->Add("!!! You must have administrative priviledges to install SeripSpy device driver !!!");
}
    AnsiString s = GetCurrentDir();
    s += "\\seripspy.sys";
    Info->Lines->Add("Path : " + s);
    SC_HANDLE hSrv = CreateService(sc,
                       "SeripSpy",
                       "SeripSpy",
                       SERVICE_ALL_ACCESS | GENERIC_EXECUTE | SERVICE_START | SERVICE_STOP,
               SERVICE_KERNEL_DRIVER,
                       SERVICE_DEMAND_START,
                       SERVICE_ERROR_IGNORE,
               s.c_str(), NULL, NULL, NULL, NULL, NULL);
CloseServiceHandle(sc);
    if (!hSrv)
{
        Info->Lines->Add("Unexpected error. Cannot create service...");
if (!StartService(hSrv,0,NULL))
    {
            Info->Lines->Add("Cannot start device. SeripSpy.sys maybe not found!");
    DeleteService(hSrv);
    CloseServiceHandle(hSrv);
    }
    hDevice=CreateFile("\\\\.\\SeripSpy",
                           GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE,
                           FILE_SHARE_WRITE | FILE_SHARE_READ,
                           NULL,
                           OPEN_EXISTING,
                           FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
                   NULL);
    if (hDevice == INVALID_HANDLE_VALUE)
    {
    SERVICE_STATUS ss;
    ControlService(hSrv,SERVICE_CONTROL_STOP,&ss);
            Info->Lines->Add("!!! SeripSpy ::: INVALID_HANDLE_VALUE !!!");
        }
        CloseServiceHandle(hSrv);
   }
   Info->Lines->Add("Serip Spy device driver successfully installed...");
}
//---------------------------------------------------------------------------
void __fastcall TVirtSeripMon::DeinstallClick(TObject */*Sender*/)
{
    if (hDevice != INVALID_HANDLE_VALUE) {
CloseHandle(hDevice);
    }
SC_HANDLE sc = OpenSCManager(NULL,SERVICES_ACTIVE_DATABASE,SC_MANAGER_ALL_ACCESS);
if (sc)
{
SC_HANDLE hSrv = OpenService(sc,"SeripSpy",SERVICE_START | SERVICE_STOP | DELETE);
CloseServiceHandle(sc);
if (hSrv)
{
SERVICE_STATUS ss;
ControlService(hSrv,SERVICE_CONTROL_STOP,&ss);
DeleteService(hSrv);
CloseServiceHandle(hSrv);
hDevice = INVALID_HANDLE_VALUE;
} else {
Application->MessageBox("Cannot remove Serip Spy device driver", "ERROR", MB_OK | MB_ICONERROR);
        }
}
}
//---------------------------------------------------------------------------
« Последнее редактирование: 30-11-2007 22:56 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Серж
Гость
« Ответ #1 : 23-08-2004 07:15 » 

MOPO3, по-моему.
 после кода if (!hSrv)
   {
        Info->Lines->Add("Unexpected error. Cannot create service...");
в InstallClick
 нужно поставить } else
Записан
Серж
Гость
« Ответ #2 : 23-08-2004 08:12 » 

Во многих других местах после обнаружения ошибки нужно либо выходить из программы, либо ставить else
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #3 : 23-08-2004 09:09 » 

MOPO3, увы сегодня запар, делал я как-то тестовое задание перед собеседованнием для работы с сервисами. нет время щас  найти и вспомнить всю логику работы   Жаль . если не решишь проблем за пару дней я подключусь. А так мысленно с тобой!  удачи.   Улыбаюсь .
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Серж
Гость
« Ответ #4 : 23-08-2004 11:22 » 

MOPO3, просто убери восклицательный знак в
 if (!hSrv)
 в InstallClick после создания сервиса.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines