2011-01-15 5 views
2

모두 프로세스 EXE 이름을 실행 중입니다. XP 게스트 계정에서이 문제를 시도 할 때 문제가 발생했습니다. EnumProcesses를 사용하여 모든 프로세스 ID를 열거 할 수 있지만 PROCESS_QUERY_INFORMATION 또는 PROCESS_VM_READ를 사용하여 OpenProcess를 시도하면 함수가 실패합니다.프로세스 탐색기는 XP 게스트 계정의 모든 프로세스 이름을 어떻게 열거합니까?

XP 게스트 계정에서 프로세스 탐색기가 가동되었고 모든 프로세스 이름이 열거 될 수있었습니다 (예상대로 게스트 사용자 공간 외부의 프로세스에서 나온 대부분의 다른 정보는 없었 음).

내 질문은 Process Explorer의 마법을 사용하여 게스트 계정 사용자 공간 밖에서 실행되는 서비스 및 프로세스의 프로세스 이름을 얻는 방법은 무엇입니까?

+1

흠 ... 이것에 대해 많이 알지는 못하지만 프로세스 탐색기가 게스트 권한으로 실행됩니다 (프로그램과 동일한 위치에 있으므로). "마술"이 시작되었을 때도 관리 권한으로 실행 중일 수 있습니다. 손님이. – schnaader

+0

GetLastError가 무엇을 말합니까? –

+0

예, 내 IDE와 동일한 권한으로 Guest 계정 프로세스로 실행되고 있습니다. –

답변

3

프로세스 탐색기가 SystemProcessInformationNtQuerySystemInformation을 사용하여 프로세스 목록을 얻는다고 가정합니다. 코드 예제는 my old answer을 참조하십시오. 또한 추가 정보를 얻으려면 NtQueryInformationProcess 기능을 사용합니다. 그런데

, 당신은 당신은 어떤 프로세스 탐색기 정말 NTDLL.DLL에서 사용하는 모든 기능을 볼 수 Dependency Walker (메뉴 "프로필"/ "시작 프로파일 링"또는 F7)에서 프로세스 탐색기를 시작합니다. NtQuerySystemInformationNtQueryInformationProcess이 실제로 사용될 것입니다.

+0

Oleg, 감사합니다,이 날 프로세스 및 UNICODE_STRING에 저장된 프로세스 이름에 대한 자세한 정보를 제공합니다 청소기 (적어도 VB6)에서 PROCESSENTRY32, null 문자 및 추가 무의미한 정보가있는 문자열을 반환 한 문자열보다 깔끔합니다. –

+0

@Joe : 환영합니다! – Oleg

0

프로세스가 시작되면 기본 액세스 권한 집합이 할당됩니다. 특정 API 호출을 성공적으로 완료하려면 추가 권한이 필요합니다. 특히 OpenProcess은 경우에 따라 SeDebugPrivilege 권한을 요구할 수 있습니다. 여기서 추가 권한을 사용하도록 프로세스 토큰을 수정하는 방법에 대한 예는 Enabling and Disabling Privileges in C++을 참조하십시오.

+0

그러면 프로세스 탐색기는 제한된 Guest 계정으로 SeDebugPrivilege를 사용하여 실행되지 않기 때문에 프로세스 이름을 열거하기 위해 다른 방법을 사용하고 있습니다. –

+0

@Joe : 프로세스 이름으로, 실행 파일 이름을 의미합니까? 'EnumProcesses'에 대한 대안으로, [tool help library] (http://msdn.microsoft.com/en-us/library/ms686837%28v=vs.85%29.aspx)가 비슷한 정보를 얻을 수 있습니다. – casablanca

1

NtQuerySystemInformation은 간신히 문서화되었으며 "향후 버전의 Windows에서 변경되거나 사용 불가능할 수 있습니다."CreateToolhelp32Snapshot은 완전히 문서화되었으며 이미지 이름을 제공해야합니다.

+0

Anders, 감사합니다. 이것은 유효한 답변이며 왜 PROCESSENTRY32의 다른 구성원을 확인하지 않았는지 알 수 없습니다. –

0

GetProcessImageFileName은 Vista에서 시작하는 PROCESS_QUERY_LIMITED_INFORMATION 만 필요하지만 XP에서는 PROCESS_QUERY_INFORMATION이 필요합니다.

게스트 계정 PROCESS_VM_READ가 필요하지 않아야합니다.

관련 문제