2012-10-05 1 views
0

System.Management를 사용하여 원격 컴퓨터에서 프로세스 정보를 수집하려고합니다.원격 컴퓨터에서 사용자를 가장 할 때 WMI에 대한 액세스가 거부되었습니다.

these lines을 사용하여 원격 시스템에서 관리자로 가장하고 있지만 다음 코드는 "액세스가 거부되었습니다"라는 예외를 throw합니다. 내가 options에 사용자 이름과 암호를 입력하면

ConnectionOptions options = new ConnectionOptions(); 
options.Impersonation = System.Management.ImpersonationLevel.Impersonate; 

ManagementScope scope = new ManagementScope(@"\\" + machine + @"\root\cimv2", options); 
scope.Connect(); 

ObjectQuery query = new ObjectQuery("Select * from Win32_Process where ProcessId = " 
         + procID.ToString()); 

ManagementObjectSearcher mos = new ManagementObjectSearcher(scope, query); 

string cmdLn = ""; 
foreach (ManagementObject mo in mos.Get()) 
{ 
    cmdLn = (string)mo.GetPropertyValue("CommandLine"); 
} 

그러나, 모든 것이 잘 작동합니다.

이 코드는 가장 가까운 컨텍스트 (원격 컴퓨터에 충분한 권한이 있음)로 실행되고 있으므로 사용자 이름/암호없이 작동하지 않는 이유를 모르겠습니다.

명시 적으로 사용자의 자격 증명을 전달하지 않고 성공적으로 인증 할 수 있습니까?

답변

0

WMI를 사용하면 특정 사용자를 가장 할 때 명시 적 자격 증명을 제공해야합니다. 위에서 제공 한 링크는 변수 lpszUsername 및 lpszPassword로이를 설명합니다.

+0

나는 명시 적 자격 증명을 사용하여 가장합니다. WMI를 사용하기 위해이 자격 증명을 두 번 통과시켜야 할 필요가 없기를 바랬습니다 (주로 두 코드 섹션 간의 과도한 연결을 피하기위한 것입니다). – dckrooney

+1

첫 번째 또는 두 번째 코드에서 명시적인 creds를 전달하는 위치가 표시되지 않습니다. 나는 그것을 놓쳤는가? 어느 쪽이든, WMI를 통해 원격 호스트에서 3 차 호스트로 다른 WMI 연결 *을 만들지 않는 한, 원격 호스트로 해당 호스트를 전달해야합니다. WMI는 그렇게 어렵습니다. – Lizz