2008-10-20 3 views
7

내가 만든 서비스 프로세스를 설치하는 설치 패키지가 있습니다. 서비스 프로세스가 실행되어야하는 계정의 사용자 이름/암호를 묻는 메시지를 표시하고 싶습니다. 설치를 계속하기 전에 사용자 이름/암호 조합이 유효한지 확인하고 싶습니다. 특별한 설치 동작을 위해 사용하는 C DLL이 있지만 Windows API를 사용하여 계정의 자격 증명을 확인하는 방법을 알 수 없습니다. 서비스 제어 관리자가 사용하는 것과 동일한 계정 이름 구문을 지원할 수 있기를 바랍니다.Windows 계정의 사용자 이름과 암호 확인

답변

12

사용할 기능은 LogonUser입니다. 엑스트라 쿨 (cool) 기능을 제공하고 사용자가 서비스를 실행할 수있는 적절한 권한을 가지고 있는지 확인하는 LOGON32_LOGON_SERVICE 플래그를 지정할 수도 있습니다.

+0

이전 OS 버전 (Win2K 이전)에서는 LogonUser() API에 높은 권한 ("운영 체제의 일부로 작동")이 필요하다는 점을 명심하십시오. –

0

여러분이 언급 한 LogonUser 함수를 사용하여 구현했습니다. (그런데이 서비스에는 WinXP SP2 이상이 필요하므로 권한 문제는 걱정할 필요가 없습니다.) 그러나 이것은 내가 기대했던 것만 큼 효과가 없습니다. QueryServiceConfig를 호출하면 lpServiceStartName은 ". \ accountname"형식입니다. LogonUser에이 문자열을 그대로 전달하면 오류가 발생합니다. '\'가 사용자가 속한 시스템을 나타 내기 전에 그 부분을 가정합니까?

또한 "LocalSystem"및 "lpServiceStartName 및 lpPassword 매개 변수 각각에 대해"를 지정하는 ChangeServiceConfig를 호출하면 정상적으로 작동합니다. 그러나 이러한 매개 변수를 사용하여 LogonUser를 호출하면 작동하지 않습니다.

저는 SCM이 계정 이름에 사용하는 구문과 동일한 구문을 사용하고 싶습니다.

+0

사용자 이름에서 도메인을 분할해야합니다. '.' LogonUser (로컬 시스템 네임 스페이스에 매핑)의 도메인으로 작동하지만 정규화 된 사용자 이름을 분할해야합니다. – Nick

+0

또한 API를 사용하여 LocalSystem으로 명시 적으로 로그온 할 수 없습니다 (알고있는 한). 이 계정과 다른 기본 제공 계정 (NT_AUTHORITY 네임 스페이스에 있음)을 특수화해야합니다. – Nick

관련 문제