문제

다양한 프로세스에서 사용되는 특정 리소스에 대한 이벤트를 만들고 이름으로 이러한 이벤트에 액세스하고 싶습니다.문제는 이벤트 이름을 해당 이벤트를 참조하는 모든 애플리케이션에 알려야 한다는 점인 것 같습니다.

시스템에서 이름 이벤트 목록을 얻을 수 있는 방법이 있을까요?

나는 일부 표준 이름을 사용할 수 있다는 것을 알고 있지만 향후 확장성과 관련하여 유연성이 다소 떨어지는 것 같습니다(모든 응용 프로그램에는 다시 컴파일이 필요함).


유감스럽게도 ZwOpenDirectoryObject는 Windows XP 이상이 필요하다고 설명되어 의문의 여지가 없기 때문에 고려조차 할 수 없습니다.그래도 제안해 주셔서 감사합니다.

지금까지 시도한 적이 없기 때문에 공유 메모리에 대해 조금 확신이 없습니다.그 분야에 대한 독서를 할 수도 있을 것 같아요.구성 파일과 레지스트리는 액세스 문제로 인해 Vista에서 실패하는 경향이 있기 때문에 약간의 문제입니다.공유 메모리에도 같은 문제가 생길까 조금 걱정됩니다.

ProcessExplorer를 사용한 아이디어는 유망해 보입니다.프로세스에 대한 이벤트를 나열하는 데 사용할 수 있는 API를 아는 사람이 있습니까?그리고 관리 권한 없이도 작동하나요?


명확하게 해 주셔서 감사합니다.

실제로 마스터 프로세스가 없습니다.이는 다양한 프로세스에서 사용되는 드라이버 dll에 가깝고 이벤트는 이러한 프로세스에서 사용하는 리소스를 "잠그는" 데 사용됩니다.

Vista에서도 충분한 접근 권한을 갖는 중앙 서비스를 구축하려고 생각 중입니다.확실히 상황이 복잡해지겠지만, 보안 문제에 직면하게 되는 유일한 문제일 수도 있습니다.

도움이 되었습니까?

해결책

사용자 모드 ZwOpenDirectoryObject를 커널 모드 ZwOpenDirectoryObject -- 커널 모드 API(http://msdn.microsoft.com/en-us/library/ms800966.aspx) 실제로 XP에서만 사용할 수 있는 것으로 보이지만 사용자 모드 버전은 적어도 NT 4부터 사용할 수 있어야 합니다.어쨌든 ZwOpenDirectoryObject를 사용하지 않는 것이 좋습니다.

Vista에서 구성 파일과 레지스트리 키가 실패하는 이유는 무엇입니까?물론 보안 설정을 올바르게 해야 하지만 명명된 이벤트에 대해서도 그렇게 해야 하므로 여기서는 큰 차이가 없어야 합니다.프로세스의 특성에 대해 좀 더 자세히 알려 주셔야 할 것 같습니다. 프로세스가 모두 동일한 로그온 세션 내에서 실행됩니까, 아니면 다른 사용자로 실행됩니까?그리고 마스터 프로세스가 있거나 처음에 누가 이벤트를 생성합니까?

솔직히 저는 Process Explorer 아이디어가 별로 좋은 아이디어가 아니라고 생각하는 경향이 있습니다.문서화되지 않은 API 및/또는 장치 드라이버를 사용하지 않고는 이 작업을 수행할 수 없다는 사실에도 불구하고 프로세스가 일부 프로세스의 이름을 알아내기 위해 다른 프로세스의 핸들 테이블을 몰래 탐색해서는 안 된다고 생각합니다. 커널 객체.물론 동일한 보안 문제가 다시 적용됩니다.

다른 팁

아니요, 명명된 이벤트를 열거하는 기능은 없습니다.ZwOpenDirectoryObject를 사용하여 해당 개체 관리자 디렉터리의 모든 개체를 열거한 다음 이벤트를 필터링할 수 있습니다.그러나 이 루틴은 문서화되지 않았으므로 정당한 이유 없이 사용해서는 안 됩니다.

이벤트 이름을 공유하기 위해 별도의 메커니즘을 사용하는 것은 어떨까요?구성 파일, 레지스트리 키 또는 공유 메모리에 나열할 수도 있습니다.

프로세스탐색기 특정 프로세스에 의해 개최된 모든 명명된 이벤트를 열거할 수 있습니다.전체 프로세스 목록을 살펴보고 비슷한 작업을 수행할 수 있지만 이제 목록을 가져오는 데 어떤 API가 사용되는지에 대한 단서를 얻었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top