본문 바로가기

Programming/Windows&C#

[Windows/WinAPI] WindowsAPI / CreateService

728x90
반응형

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이어야합니다. 

암호는 드라이버 서비스에 대해 무시됩니다.




반응형