⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win32_service.c

📁 ddd ddd ddd ddd dddd 时代的顶顶顶顶顶顶顶顶的v
💻 C
📖 第 1 页 / 共 3 页
字号:
        else        {            char szSubkeyName[30];            dwWriteCounter++;            sprintf(szSubkeyName, g_lpszRegistryCmdFormat, dwWriteCounter);            lRegRC = RegSetValueEx( hkSnort,                       /* handle to key to set value for */                                    szSubkeyName,                  /* name of the value to set       */                                    0,                             /* reserved                       */                                    REG_SZ,                        /* flag for value type            */                                    (LPBYTE) argv[iArgCounter],    /* address of value data          */                                    strlen(argv[iArgCounter])      /* size of value data             */                                  );            if( lRegRC != ERROR_SUCCESS )            {                TCHAR szMsg[1000];                SvcFormatMessage(szMsg, sizeof(szMsg));                FatalError(" [SNORT_SERVICE] Unable to write Snort registry entry. %s", szMsg);             }        }    } /* end for() */    lRegRC = RegSetValueEx( hkSnort,                       /* handle to key to set value for */                            g_lpszRegistryCountFormat,     /* name of the value to set       */                            0,                             /* reserved                       */                            REG_DWORD,                     /* flag for value type            */                            (LPBYTE) &dwWriteCounter,      /* address of value data          */                            sizeof(dwWriteCounter)         /* size of value data             */                          );    if( lRegRC != ERROR_SUCCESS )    {        TCHAR szMsg[1000];        SvcFormatMessage(szMsg, sizeof(szMsg));        FatalError(" [SNORT_SERVICE] Unable to write Snort registry entry. %s", szMsg);     }    lRegRC = RegCloseKey( hkSnort );    if( lRegRC != ERROR_SUCCESS )    {        TCHAR szMsg[1000];        SvcFormatMessage(szMsg, sizeof(szMsg));        FatalError(" [SNORT_SERVICE] Unable to close Snort registry entry. %s", szMsg);     }    printf("\n");    printf(" [SNORT_SERVICE] Successfully added registry keys to:\n");    printf("    \\HKEY_LOCAL_MACHINE\\%s\\\n", g_lpszRegistryKey);    /**********     * Add Snort to the Services database     **********/    schSCManager = OpenSCManager(NULL,                    /* local machine                        */                                 NULL,                    /* defaults to SERVICES_ACTIVE_DATABASE */                                 SC_MANAGER_ALL_ACCESS);  /* full access rights                   */     if (schSCManager == NULL)    {        DWORD dwErr = GetLastError();        LPCTSTR lpszBasicMessage = "Unable to open a connection to the Services database.";         TCHAR szMsg[1000];        SvcFormatMessage(szMsg, sizeof(szMsg));        switch(dwErr)        {        case ERROR_ACCESS_DENIED:             FatalError(" [SNORT_SERVICE] %s Access is denied. %s", lpszBasicMessage, szMsg);            break;        case ERROR_DATABASE_DOES_NOT_EXIST:             FatalError(" [SNORT_SERVICE] %s Services database does not exist. %s", lpszBasicMessage, szMsg);            break;        case ERROR_INVALID_PARAMETER:             FatalError(" [SNORT_SERVICE] %s Invalid parameter. %s", lpszBasicMessage, szMsg);            break;        default:             FatalError(" [SNORT_SERVICE] %s Unrecognized error (%d). %s", lpszBasicMessage, dwErr, szMsg);            break;        }    }    schService = CreateService( schSCManager,              /* SCManager database        */                                g_lpszServiceName,         /* name of service           */                                g_lpszServiceDisplayName,  /* service name to display   */                                SERVICE_ALL_ACCESS,        /* desired access            */                                SERVICE_WIN32_OWN_PROCESS, /* service type              */                                SERVICE_DEMAND_START,      /* start type                */                                SERVICE_ERROR_NORMAL,      /* error control type        */                                lpszBinaryPathName,        /* service's binary          */                                NULL,                      /* no load ordering group    */                                NULL,                      /* no tag identifier         */                                NULL,                      /* no dependencies           */                                NULL,                      /* LocalSystem account       */                                NULL);                     /* no password               */     if (schService == NULL)    {        DWORD dwErr = GetLastError();        LPCTSTR lpszBasicMessage = "Error while adding the Snort service to the Services database.";         TCHAR szMsg[1000];        SvcFormatMessage(szMsg, sizeof(szMsg));        switch(dwErr)        {        case ERROR_ACCESS_DENIED:             FatalError(" [SNORT_SERVICE] %s Access is denied. %s", lpszBasicMessage, szMsg);            break;        case ERROR_CIRCULAR_DEPENDENCY:            FatalError(" [SNORT_SERVICE] %s Circular dependency. %s", lpszBasicMessage, szMsg);            break;        case ERROR_DUP_NAME:             FatalError(" [SNORT_SERVICE] %s The display name (\"%s\") is already in use. %s", lpszBasicMessage                                                                                            , g_lpszServiceDisplayName                                                                                            , szMsg);            break;        case ERROR_INVALID_HANDLE:             FatalError(" [SNORT_SERVICE] %s Invalid handle. %s", lpszBasicMessage, szMsg);            break;        case ERROR_INVALID_NAME:             FatalError(" [SNORT_SERVICE] %s Invalid service name. %s", lpszBasicMessage, szMsg);            break;        case ERROR_INVALID_PARAMETER:             FatalError(" [SNORT_SERVICE] %s Invalid parameter. %s", lpszBasicMessage, szMsg);            break;        case ERROR_INVALID_SERVICE_ACCOUNT:             FatalError(" [SNORT_SERVICE] %s Invalid service account. %s", lpszBasicMessage, szMsg);            break;        case ERROR_SERVICE_EXISTS:             FatalError(" [SNORT_SERVICE] %s Service already exists. %s", lpszBasicMessage, szMsg);            break;        default:             FatalError(" [SNORT_SERVICE] %s Unrecognized error (%d). %s", lpszBasicMessage, dwErr, szMsg);            break;        }    }#ifdef SET_SERVICE_DESCRIPTION    /* Apparently, the call to ChangeServiceConfig2() only works on Windows >= 2000 */    sdBuf.lpDescription = g_lpszServiceDescription;    if( !ChangeServiceConfig2(schService,                 /* handle to service      */                              SERVICE_CONFIG_DESCRIPTION, /* change: description    */                              &sdBuf) )                   /* value: new description */    {        TCHAR szMsg[1000];        SvcFormatMessage(szMsg, sizeof(szMsg));        FatalError(" [SNORT_SERVICE] Unable to add a description to the Snort service. %s", szMsg);     }#endif    printf("\n");    printf(" [SNORT_SERVICE] Successfully added the Snort service to the Services database.\n");      CloseServiceHandle(schService);     CloseServiceHandle(schSCManager);} /******************************************************************************* * (This documentation was taken from Microsoft's own doc's on how to create * a Win32 Service.) * * Deleting a Service * ----------------------------------------------------------------------------- *  * In the following example, a service configuration program uses the * OpenService function to get a handle with DELETE access to an installed * service object. The program then uses the service object handle in the * DeleteService function to remove the service from the SCM database.  *******************************************************************************/VOID UninstallSnortService() {     SC_HANDLE schSCManager, schService;    HKEY hkSnort = NULL;    long lRegRC = 0;    printf("\n\n");    printf(" [SNORT_SERVICE] Attempting to uninstall the Snort service.\n");    /**********     * Removing the registry entries for Snort command line parameters     **********/    lRegRC = RegDeleteKey( HKEY_LOCAL_MACHINE,  /* handle to open key */                           g_lpszRegistryKey    /* subkey name        */                         );    if( lRegRC != ERROR_SUCCESS )    {        TCHAR szMsg[1000];        SvcFormatMessage(szMsg, sizeof(szMsg));        printf(" [SNORT_SERVICE] Warning.  Unable to remove root Snort registry entry. %s", szMsg);     }    printf("\n");    printf(" [SNORT_SERVICE] Successfully removed registry keys from:\n");    printf("    \\HKEY_LOCAL_MACHINE\\%s\\\n", g_lpszRegistryKey);    /**********     * Remove Snort from the Services database     **********/    schSCManager = OpenSCManager(NULL,                    /* local machine            */                                 NULL,                    /* ServicesActive database  */                                 SC_MANAGER_ALL_ACCESS);  /* full access rights       */     if (schSCManager == NULL)     {        DWORD dwErr = GetLastError();        LPCTSTR lpszBasicMessage = "Unable to open a connection to the Services database.";         TCHAR szMsg[1000];        SvcFormatMessage(szMsg, sizeof(szMsg));        switch(dwErr)        {        case ERROR_ACCESS_DENIED:             FatalError(" [SNORT_SERVICE] %s Access is denied. %s", lpszBasicMessage, szMsg);            break;        case ERROR_DATABASE_DOES_NOT_EXIST:             FatalError(" [SNORT_SERVICE] %s Services database does not exist. %s", lpszBasicMessage, szMsg);            break;        case ERROR_INVALID_PARAMETER:             FatalError(" [SNORT_SERVICE] %s Invalid parameter. %s", lpszBasicMessage, szMsg);            break;        default:             FatalError(" [SNORT_SERVICE] %s Unrecognized error (%d). %s", lpszBasicMessage, dwErr, szMsg);            break;        }    }    schService = OpenService(schSCManager,       /* SCManager database       */                             g_lpszServiceName,  /* name of service          */                             DELETE);            /* only need DELETE access  */     if (schService == NULL)     {        DWORD dwErr = GetLastError();        LPCTSTR lpszBasicMessage = "Unable to locate Snort in the Services database.";         TCHAR szMsg[1000];        SvcFormatMessage(szMsg, sizeof(szMsg));        switch(dwErr)        {        case ERROR_ACCESS_DENIED:             FatalError(" [SNORT_SERVICE] %s Access is denied. %s", lpszBasicMessage, szMsg);            break;        case ERROR_INVALID_HANDLE:             FatalError(" [SNORT_SERVICE] %s Invalid handle. %s", lpszBasicMessage, szMsg);            break;        case ERROR_INVALID_NAME:             FatalError(" [SNORT_SERVICE] %s Invalid name. %s", lpszBasicMessage, szMsg);            break;        case ERROR_SERVICE_DOES_NOT_EXIST:             FatalError(" [SNORT_SERVICE] %s Service does not exist. %s", lpszBasicMessage, szMsg);            break;        default:             FatalError(" [SNORT_SERVICE] %s Unrecognized error (%d). %s", lpszBasicMessage, dwErr, szMsg);            break;        }    }     if (! DeleteService(schService) )     {        DWORD dwErr = GetLastError();        LPCTSTR lpszBasicMessage = "Unable to remove Snort from the Services database.";         TCHAR szMsg[1000];        SvcFormatMessage(szMsg, sizeof(szMsg));        switch(dwErr)        {        case ERROR_ACCESS_DENIED:             FatalError(" [SNORT_SERVICE] %s Access is denied. %s", lpszBasicMessage, szMsg);            break;        case ERROR_INVALID_HANDLE:             FatalError(" [SNORT_SERVICE] %s Invalid handle. %s", lpszBasicMessage, szMsg);            break;        case ERROR_SERVICE_MARKED_FOR_DELETE:             FatalError(" [SNORT_SERVICE] %s Service already marked for delete. %s", lpszBasicMessage, szMsg);            break;        default:             FatalError(" [SNORT_SERVICE] %s Unrecognized error (%d). %s", lpszBasicMessage, dwErr, szMsg);            break;        }    }    printf("\n");    printf(" [SNORT_SERVICE] Successfully removed the Snort service from the Services database.\n");      CloseServiceHandle(schService);     CloseServiceHandle(schSCManager);} VOID  ShowSnortServiceParams(){    int     argc;    char ** argv;    int i;    ReadServiceCommandLineParams( &argc, &argv );    printf("\n"           "Snort is currently configured to run as a Windows service using the following\n"           "command-line parameters:\n\n"           "    ");    for( i=1; i<=argc; i++ )    {        if( argv[i] != NULL )        {            printf(" %s", argv[i]);            free( argv[i] );            argv[i] = NULL;        }    }    free( argv );    argv = NULL;    printf("\n");}#endif  /* ENABLE_WIN32_SERVICE */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -