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");
}
그러나, 모든 것이 잘 작동합니다.
이 코드는 가장 가까운 컨텍스트 (원격 컴퓨터에 충분한 권한이 있음)로 실행되고 있으므로 사용자 이름/암호없이 작동하지 않는 이유를 모르겠습니다.
명시 적으로 사용자의 자격 증명을 전달하지 않고 성공적으로 인증 할 수 있습니까?
나는 명시 적 자격 증명을 사용하여 가장합니다. WMI를 사용하기 위해이 자격 증명을 두 번 통과시켜야 할 필요가 없기를 바랬습니다 (주로 두 코드 섹션 간의 과도한 연결을 피하기위한 것입니다). – dckrooney
첫 번째 또는 두 번째 코드에서 명시적인 creds를 전달하는 위치가 표시되지 않습니다. 나는 그것을 놓쳤는가? 어느 쪽이든, WMI를 통해 원격 호스트에서 3 차 호스트로 다른 WMI 연결 *을 만들지 않는 한, 원격 호스트로 해당 호스트를 전달해야합니다. WMI는 그렇게 어렵습니다. – Lizz