Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определние пользователя, для дальнейшего блокирования 
:(
    Опции темы
VitalikOmsk
Дата 18.9.2006, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 13.10.2005

Репутация: нет
Всего: нет



стоит небольшая задача нужно написать програмку в виде службы чтобы она опрделяла пользователя и если это пользователь который нужен то он можте работать на данной машине 2 часа!
с чего начать лучше?
PM MAIL   Вверх
Syberex
Дата 18.9.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 15.9.2006
Где: Украина

Репутация: нет
Всего: нет



на netcode.ru  есть огромный фак по с++.
Определить имя пользователя, посмотреть на время, если закончилось, то просто залочить комп.
прогу можно запускать как сервис и стандартно.

DateTimeToStr(Now()); чтоб время узнать, а вот пример сервиса, надеюсь разберёшься

#include "stdafx.h"
//--------------------------------------------------------------------
-------
extern "C" typedef BOOL (__stdcall* ChangeServiceConfigPtr)
(
  SC_HANDLE hService,         // handle to service
  DWORD dwServiceType,        // type of service
  DWORD dwStartType,          // when to start service
  DWORD dwErrorControl,       // severity if service fails to start
  LPCTSTR lpBinaryPathName,   // pointer to service binary file name
  LPCTSTR lpLoadOrderGroup,   // pointer to load ordering group name
  LPDWORD lpdwTagId,          // pointer to variable to get tag
identifier
  LPCTSTR lpDependencies,     // pointer to array of dependency names
  LPCTSTR lpServiceStartName, // pointer to account name of service
  LPCTSTR lpPassword,         // pointer to password for service
account
  LPCTSTR lpDisplayName       // pointer to display name
);
//--------------------------------------------------------------------
-------
VOID WINAPI SNTPMain     (DWORD dwArgc, LPTSTR* lpszArgv);
VOID WINAPI SNTPHandler  (DWORD fdwControl);
int  WINAPI RunAsApplication (void);
void WINAPI InstallService   (void);
void WINAPI UnInstallService (void);
bool WINAPI CheckVersion     (void);
//--------------------------------------------------------------------
-------
SERVICE_STATUS_HANDLE hSS     = 0;
CRITICAL_SECTION      SNTPCS;
SERVICE_STATUS        SS;
//--------------------------------------------------------------------
-------

void WINAPI LockServiceStatus (void)
{
    EnterCriticalSection(&SNTPCS);
}
//--------------------------------------------------------------------
-------

void WINAPI UnlockSNTPObject (void)
{
    LeaveCriticalSection(&SNTPCS);
}
//--------------------------------------------------------------------
-------
#define UnlockServiceStatus() UnlockSNTPObject()
//--------------------------------------------------------------------
-------

char* WINAPI FindOneOf (char* p1, char* p2)
{
    while (p1!=0 && *p1!=0)
    {
        char* p = p2;
        while (p!=0 && *p!=0)
        {
            if (*p1==*p)
                return CharNext(p1);
            p = CharNext(p);
        }
        p1 = CharNext(p1);
    }
    return 0;
}
//--------------------------------------------------------------------
-------

SERVICE_TABLE_ENTRY ServiceTable[] = {
    {"SNTP Time Service", SNTPMain},
    {0, 0}
};
//--------------------------------------------------------------------
-------

int APIENTRY CRTWinMain (HINSTANCE, HINSTANCE, LPSTR, int)
{
    char* cmdline = GetCommandLine();
    char tokens[] = "-/";
    char* token = FindOneOf(cmdline, tokens);

    if (token!=0)
    {
        if (lstrcmpi(token, "install")==0)
        {
            InstallService();
            return 0;
        }
        else if (lstrcmpi(token, "remove")==0)
        {
            UnInstallService();
            return 0;
        }
        else if (lstrcmpi(token, "service")==0)
        {
            InitializeCriticalSection(&SNTPCS);
            if (CheckVersion())
            {
                if (StartServiceCtrlDispatcher(ServiceTable)==0)
                WriteLog("Failed to start service dispatcher");
            }
            DeleteCriticalSection(&SNTPCS);
        }
        else if (lstrcmpi(token, "application")==0)
            return RunAsApplication();
    }
    else
        MessageBox(0, "sntp.exe [/install | /remove | /service |
/application]", "Parameters", MB_OK);

    return 0;
}
//--------------------------------------------------------------------
-------

VOID WINAPI SNTPHandler (DWORD fdwControl)
{
    switch (fdwControl)
    {
        case SERVICE_CONTROL_SHUTDOWN:
        case SERVICE_CONTROL_STOP:
        {
            LockServiceStatus();
            if (SS.dwCurrentState==SERVICE_RUNNING)
            {
                SS.dwCheckPoint = 1;
                SS.dwCurrentState = SERVICE_STOP_PENDING;
            }
            else if (SS.dwCurrentState!=SERVICE_STOPPED)
                SS.dwCheckPoint++;
            SS.dwWaitHint   = 5000;
            SetServiceStatus(hSS, &SS);
            UnlockServiceStatus();
            break;
        }
        case SERVICE_CONTROL_INTERROGATE:
        {
            LockServiceStatus();
            if (SS.dwCurrentState!=SERVICE_RUNNING &&
SS.dwCurrentState!=SERVICE_STOPPED)
                SS.dwCheckPoint++;
            SS.dwWaitHint = 5000;
            SetServiceStatus(hSS, &SS);
            UnlockServiceStatus();
            break;
        }
    }
}
//--------------------------------------------------------------------
-------

VOID WINAPI SNTPMain (DWORD dwArgc, LPTSTR* lpszArgv)
{
    LockServiceStatus();
    if ((hSS=RegisterServiceCtrlHandler(ServiceTable[0].lpServiceName,
SNTPHandler))==0)
    {
        UnlockServiceStatus();
        return;
    }

    SS.dwServiceType      = SERVICE_WIN32_OWN_PROCESS;
    SS.dwCurrentState     = SERVICE_START_PENDING;

    // устанавливаем что может сервис (стоп/пауза итд)
    SS.dwControlsAccepted = SERVICE_ACCEPT_STOP |
SERVICE_ACCEPT_SHUTDOWN;
    SS.dwWin32ExitCode    = NO_ERROR;
    SS.dwServiceSpecificExitCode = 0;
    SS.dwCheckPoint       = 1;
    SS.dwWaitHint         = 5000;
    SetServiceStatus(hSS, &SS);
    UnlockServiceStatus();

    // ...
    // инициализируем все необходимые для работы объекты
    // ...

    LockServiceStatus();
    SS.dwCurrentState = SERVICE_RUNNING;
    SS.dwWaitHint     = 30000;
    SS.dwCheckPoint   = 0;
    UnlockServiceStatus();

    while (true)
    {
        LockServiceStatus();
        if (SS.dwCurrentState!=SERVICE_RUNNING)
        {
            SS.dwWaitHint = 10000;
            SS.dwCheckPoint++;
        }
        SetServiceStatus(hSS, &SS);
        UnlockServiceStatus();

        // ...
        // выполняем что-то (собственно рабочий цикл сервиса)
        // ...

        LockServiceStatus();
        if (SS.dwCurrentState==SERVICE_RUNNING)
        SS.dwWaitHint = 30000;
        SetServiceStatus(hSS, &SS);
        UnlockServiceStatus();

        Sleep(0);

    }

    LockServiceStatus();
    SS.dwCurrentState  = SERVICE_STOPPED;
    SS.dwCheckPoint    = 0;
    SS.dwWin32ExitCode = NO_ERROR;
    SetServiceStatus(hSS, &SS);
    UnlockServiceStatus();
    return;
}
//--------------------------------------------------------------------
-------

int WINAPI RunAsApplication (void)
{
    // запускаем как приложение
    return 0;
}
//--------------------------------------------------------------------
-------

void WINAPI InstallService (void)
{
    if (!CheckVersion())
        return;
    SC_HANDLE hSCM = OpenSCManager(0, 0, SC_MANAGER_CREATE_SERVICE);
    if (hSCM==0)
    {
        MessageBox(0, "Failed to open SCM", "Error", MB_OK |
MB_ICONERROR);
        return;
    }
    char MN[MAX_PATH+20];
    ZeroMemory(MN, MAX_PATH+20);
    MN[0] = '"';
    GetModuleFileName(0, &MN[1], MAX_PATH);
    lstrcat(MN, "\" /service");
    SC_HANDLE hSrv = CreateService(hSCM, "SNTP Server",
ServiceTable[0].lpServiceName, SERVICE_CHANGE_CONFIG,
SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
MN, 0, 0, 0, 0, 0);
    if (hSrv==0)
    {
        MessageBox(0, "Service already installed", "Information",
MB_OK | MB_ICONINFORMATION);
        CloseServiceHandle(hSCM);
        return;
    }

    HINSTANCE H = LoadLibrary("advapi32.dll");
    if (H!=0)
    {
        ChangeServiceConfigPtr ChangeServiceConfigEx =
(ChangeServiceConfigPtr)GetProcAddress(H, "ChangeServiceConfigA");
        if (ChangeServiceConfigEx!=0)
        {
            if ((*ChangeServiceConfigEx)(hSrv,
SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
MN, 0, 0, 0, 0, 0, "SNTP Server")==0)
                MessageBox(0, "Failed to change server config",
"Error", MB_OK | MB_ICONERROR);
        }
        else
            MessageBox(0, "ChangeServiceConfigA not found", "Error",
MB_OK | MB_ICONERROR);
        FreeLibrary(H);
    }

    CloseServiceHandle(hSrv);
    CloseServiceHandle(hSCM);
    MessageBox(0, "Service installed successful", "Success", MB_OK |
MB_ICONINFORMATION);
}
//--------------------------------------------------------------------
-------

void WINAPI UnInstallService (void)
{
    if (!CheckVersion())
        return;
    SC_HANDLE hSCM = OpenSCManager(0, 0, SC_MANAGER_CONNECT);
    if (hSCM==0)
    {
        MessageBox(0, "Failed to open SCM", "Error", MB_OK |
MB_ICONERROR);
        return;
    }
    SC_HANDLE hSrv = OpenService(hSCM, "SNTP Server", DELETE);
    if (hSrv==0)
    {
        MessageBox(0, "Service already removed", "Information", MB_OK
| MB_ICONINFORMATION);
        CloseServiceHandle(hSCM);
        return;
    }
    if (DeleteService(hSrv)==0)
    {
        MessageBox(0, "Failed to delete service", "Error", MB_OK |
MB_ICONERROR);
        CloseServiceHandle(hSrv);
        CloseServiceHandle(hSCM);
        return;
    }

    CloseServiceHandle(hSrv);
    CloseServiceHandle(hSCM);
    MessageBox(0, "Service removed successful", "Success", MB_OK |
MB_ICONINFORMATION);
}
//--------------------------------------------------------------------
-------

bool WINAPI CheckVersion (void)
{
    OSVERSIONINFO OVI;
    OVI.dwOSVersionInfoSize = sizeof(OVI);
    if (GetVersionEx(&OVI)==0)
    {
        MessageBox(0, "Unknown error", "Error", MB_OK | MB_ICONERROR);
        return false;
    }
    if (OVI.dwPlatformId!=VER_PLATFORM_WIN32_NT)
    {
        MessageBox(0, "Windows NT 4.0 or higher required", "Error",
MB_OK | MB_ICONERROR);
        return false;
    }
    return true;
}
//--------------------------------------------------------------------
-------





--------------------
whole power in artificial intelligences
PM MAIL ICQ   Вверх
VitalikOmsk
Дата 19.9.2006, 04:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 13.10.2005

Репутация: нет
Всего: нет



Спасибо огромное!
конечно разберусь!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.