SC_HANDLE WINAPI CreateService( _In_ SC_HANDLE hSCManager, ----① _In_ LPCTSTR lpServiceName, ----② _In_opt_ LPCTSTR lpDisplayName, ----③ _In_ DWORD dwDesiredAccess, ----④ _In_ DWORD dwServiceType, ----⑤ _In_ DWORD dwStartType, ----⑥ _In_ DWORD dwErrorControl, ----⑦ _In_opt_ LPCTSTR lpBinaryPathName, ----⑧ _In_opt_ LPCTSTR lpLoadOrderGroup, ----⑨ _Out_opt_ LPDWORD lpdwTagId, ----⑩ _In_opt_ LPCTSTR lpDependencies, ----⑪ _In_opt_ LPCTSTR lpServiceStartName, ----⑫ _In_opt_ LPCTSTR lpPassword ----⑬ );
함수 설명 :
새로운 서비스를 생성한다. 성공시 핸들값이 리턴되며, 실패시 NULL 값이 리턴된다.
① hSCManager :
서비스 제거 관리자 데이터베이스에 대한 핸들. 이 핸들은 OpenSCManager 함수에 의해 반환되고 SC_MANAGER_CREATE_SERVICE 액세스 권한이 있어야한다.
② lpServiceName :
설치하는 서비스의 이름. 최대 문자열 길이는 256자이다. 서비스 제어 관리자 데이터 베이스는 대소문자를 유지하지만, 서비스 이름의 비교는 항상 대소 문자를 구분하지 않든다. '/', '\' 는 사용 불가능
③ lpDisplayName :
디스플레이 이름은 서비스를 식별하는 사용자 인터페이스 프로그램에 의해 사용된다. 문자열은 최대 256 자 길이를 가지고 있습니다. 이름은 대소 문자를 보존 서비스 제어 관리자입니다. 표시 이름 비교는 대소 문자를 구분하지 않는다
④ dwDesiredAccess :
서비스에 대한 액세스 요청 가능 옵션
⑤ dwServiceType :
서비스 타입
Value |
Meaning |
SERVICE_ADAPTER 0x00000004 |
예약 |
SERVICE_FILE_SYSTEM_DRIVER 0x00000002 |
시스템 드라이브 서비스 파일 |
SERVICE_KERNEL_DRIVER 0x00000001 |
드라이버 서비스 |
SERVICE_RECOGNIZER_DRIVER 0x00000008 |
예약됨 |
SERVICE_WIN32_OWN_PROCESS 0x00000010 |
자신의 프로세스에서 실행되는 서비스 |
SERVICE_WIN32_SHARE_PROCESS 0x00000020 |
하나 이상의 다른 서비스들과 프로세스를 공유하는 서비스. |
⑥ dwStartType :
서비스 시작 옵션
Value |
Meaning |
SERVICE_AUTO_START 0x00000002 |
서비스는 시스템 시작시 서비스 제어 관리자에 의해 자동으로 시작. |
SERVICE_BOOT_START 0X00000000 |
장치 드라이버가 시스템 로더에 의해 시작. 이 값은 드라이버 서비스에 대해서만 유효합니다. |
SERVICE_DEMAND_START 0x00000003 |
서비스 컨트롤 매너지가 StartService 함수 가 호출된때 서비스를 시작한다. 자세한 내용은 요청시 시작 서비스를 참조하십시오. |
SERVICE_DISABLED 0x00000004 |
시작할수 없는 서비스이다. ERROR_SERVICE_DISABLED의 에러 코드의 서비스 결과를 시도한다. |
SERVICE_SYSTEM_START 0x00000001 |
디바이스 드라이버는 IoInitSystem 함수에 의해 시작되었다. 이 값은 드라이버 서비스에 대해서만 유효합니다. |
⑦ dwErrorControl :
서비스 시작 실패시 에러 처리 방식
Value |
Meaning |
SERVICE_ERROR_CRITICAL 0x00000003 |
가능하면 시작 프로그램은 이벤트 로그에 오류를 기록. 마지막으로 성공한 구성이 시작되면 시작 작업이 실패합니다. 그렇지 않으면 시스템이 마지막으로 성공한 구성으로 다시 시작됩니다. |
SERVICE_ERROR_IGNORE 0x00000000 |
시작 프로그램은 오류를 무시하고 시동 조작을 계속한다. |
SERVICE_ERROR_NORMAL 0x00000001 |
시작 프로그램은 이벤트 로그에 오류를 기록하지만, 시동 조작을 계속한다. |
SERVICE_ERROR_SEVERE 0x00000002 |
시작 프로그램은 이벤트 로그에 오류를 기록. 마지막으로 성공한 구성이 시작되면 시작 작업이 계속됩니다. 그렇지 않으면 시스템이 마지막으로 성공한 구성을 사용하여 다시 시작됩니다. |
⑧ lpBinaryPathName :
서비스 이진 파일에 대한 정규화된 경로.
⑨ lpLoadOrderGroup :
서비스가 소속 된 루드 순서 그룹의 이름. 서비스 그룹에 속하지 않은 경우 NULL 값.
⑩ lpdwTagld :
lpLoadOrderGroup 매개 변수에 지정된 그룹의 고유 한 태그 값을받는 변수의 포인터. 기존 태그를 변경하지 않으면 NULL값.
⑪ lpDependencies :
시스템이 서비스 전에 시작해야하는 서비스 또는로드 순서 그룹의 널 (null)로 구분 된 이름의 두 null로 끝나는 배열에 대한 포인터. 서비스 종속성이없는 경우 NULL 또는 빈 문자열을 지정합니다.그룹에 대한 종속성은 그룹의 적어도 하나의 멤버가 그룹의 모든 구성원을 시작하기위한 시도 후에 실행되는 경우이 서비스를 실행할 수 있다는 것을 의미한다.
그들은 서비스 이름과 구별 할 수 있도록 서비스 및 서비스 그룹이 동일한 이름 공간을 공유하기 때문에 당신은 SC_GROUP_IDENTIFIER로 그룹 이름을 앞에 있어야합니다.
⑫ lpServiceStartName ;
서비스가 실행해야 하는 계정의 이름.
⑬ lpPassword :
lpServiceStartName 매개 변수에 의해 지정된 계정 이름에 대한 암호를 입력합니다. 계정에 암호가없는 경우 또는 빈 문자열을 지정 서비스가 LocalService를, NetworkService와, 또는 로컬 시스템 계정으로 실행합니다.
lpServiceStartName 매개 변수에서 지정한 계정 이름이 관리 서비스 계정 또는 가상 계정 이름의 이름 인 경우, lpPassword 매개 변수는 NULL이어야합니다.
암호는 드라이버 서비스에 대해 무시됩니다.
'Programming > Windows&C#' 카테고리의 다른 글
[Windows/WinAPI] WindowsAPI / DeleteService (0) | 2014.01.19 |
---|---|
[Windows/WinAPI] WindowsAPI / OpenService (0) | 2014.01.19 |
[Windows/WinAPI] WindowsAPI / SCM에 대한 특정 액세스 권한 (0) | 2014.01.19 |
[Windows/WinAPI] WindowsAPI / OpenSCManager (0) | 2014.01.19 |
[Windows/WinAPI] WindowsAPI / SetServiceStatus (0) | 2014.01.19 |