ITaskScheduler 및 ITask 인터페이스를 사용하여 내가 작업하는 회사에서 만든 특정 .exe에 대한 작업을 만들고 편집하는 COM + 서버 구성 요소 (dll)를 개발했습니다. 이 구성 요소는 기존 ASP 페이지 (VBScript)에서 호출되며 개발중인 Office 패키지의 일부입니다. 전체 시스템은 웹 인터페이스를 사용합니다. Windows Server 2003/2008에서 IIS를 실행하면 ITaskScheduler-> Enum과 같은 호출을 시도 할 때 0x80070005 액세스 거부 오류가 발생합니다. 이것은 완벽하게 이해할 수 있습니다. IUsr _... 계정은 작업 스케줄러에 액세스 할 수 없습니다. 사용자가 웹 페이지에서 자격 증명을 입력 할 수있는 필드를 추가 한 다음 LogonUser를 호출 한 다음 COM 개체에서 ImpersonateLoggedOnUser를 호출했습니다. 그러나 나는 여전히 액세스 거부 오류가 발생합니다. IServerSecurity-> QueryBlanket에 대한 후속 호출은 COM 개체가 IUsr _... 계정으로 실행되고 있음을 나타냅니다. 내 로그온 논리는 다음과 같습니다.기본 ASP 및 ITaskScheduler 액세스가 거부되었습니다.
bool SystemUser::LogonUser(const wchar_t* userName, const wchar_t* domain, const wchar_t* password)
{
if(::LogonUser(userName, domain, password, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &_token))
{
return true;
}
System::LogSystemError(__W_FILE__, __W_FUNCTION__, __LINE__, L"Unable to logon user: %s domain: %s", userName, domain);
return false;
}
bool SystemUser::Impersonate()
{
if(::ImpersonateLoggedOnUser(_token))
{
return true;
}
System::LogSystemError(__W_FILE__, __W_FUNCTION__, __LINE__, L"Unable to impersonate user");
return false;
}
SuccessCode::Enum SystemUser::Logon(const wchar_t* userName, const wchar_t* domain, const wchar_t* password)
{
if(!_token)
{
if(!LogonUser(userName, domain, password) || !Impersonate())
{
return SuccessCode::ImpersonateError;
}
else
{
Global::systemLog.Write(LogLevel::Information, L"Successfully logged on as user: '%s' domain: '%s'", userName, domain);
}
}
return SuccessCode::Success;
}
로그온 유형으로 LOGON32_LOGON_INTERACTIVE를 사용하면 아무런 차이가 없습니다. 또한 COM + MMC에서 특정 역할을 설정하지도 않습니다. 어떤 도움이나 제안이 대단히 감사하겠습니다.