2017-10-26 1 views
1

저는 WinAPI와 기본 Windows 커널을 더 잘 이해하려고 노력해 왔습니다. 지금까지 볼 수 있듯이 HWND (창) 핸들은 프로세스간에 공유 될 수 있습니다.프로세스간에 Win32 사용자 모드 핸들을 공유 할 수 있습니까?

하지만 다른 핸들은 프로세스간에 공유 할 수 있습니까?

HMODULE, HINSTANCE, ATOM?

뿐만 아니라 윈도우 및 도면 구성 요소 :

HMENU, HDC, HICON, HCURSOR, HBRUSH 등?

위의 내용을 모두 공유 할 수 없다면 사용자 모드 핸들이있을 수 있습니까?

EDIT : 명확화. 을 공유하는 것은 한 프로세스의 핸들 값을 다른 프로세스에서 사용하는 것을 의미합니다.

답변

1

HMODULEHINSTANCE은 32 비트 및 64 비트 Windows에서 동일합니다. 이것은 모듈의 기본 주소이며 프로세스간에 실제로 공유 할 수 없습니다 (다른 프로세스의 비트가 동일하면 ntdll 및 kernel32의 주소 제외).

ATOM은 프로세스 및 글로벌 양식으로 제공되며 글로벌 양식은 동일한 windowstation의 프로세스에서 공유 할 수 있습니다.

GDI 드로잉 핸들을 공유 할 수 없습니다 (단, GetStockObject? 제외).

Windows NT에서 GDI 개체는 Win32 하위 시스템의 GDI 모듈의 클라이언트 부분에 저장됩니다. 즉, any GDI object is valid only in the context of the application that created it을 의미합니다.

USER32 핸들 (HWND, HMENU, HICON, HCURSOR)을 공유 할 수 있습니다.

DuplicateHandle은 바탕 화면을 받아 windowstation 핸들 ...

+0

윈도우 95/98/ME는 다를 수 있습니다, 난 더 이상 세부 사항을 기억하지 않습니다. 커널의 일부는 16 비트이므로 보안이 없으므로 게임을 할 수 있습니다. kernel32, user32, gdi32 등의 HMODLUE는 특별한 높은 주소에로드되기 때문에 모두 공유 할 수 있습니다. 이러한 시스템에서는 기본 dll이 아니기 때문에 ntdll에는 적용되지 않을 수 있습니다. – Anders

+0

정보를 제공해 주셔서 감사합니다. 두 가지 빠른 후속 조치. 1)'ATOM' 핸들의'global' 형태를 사용하는 API는 무엇이겠습니까? 그리고 2) 공유함으로써, 나는 하나의 프로세스에서 핸들의 숫자 값을 가져 와서 다른 프로세스에서 그것을 사용하는 것을 의미했다. 단지 HWND와 같다. 그렇다면 'HMENU','HICON','HCURSOR'를 정말로 공유 할 수 있을까요? 추신. 죄송합니다, upvote 수 없습니다. 주스가 충분하지 않습니다. – MikeF

+0

@MikeF, [USER 개체 핸들] (https://msdn.microsoft.com/en-us/library/ms725486)은 세션 내에서 공개되며 연결된 데스크톱을 열기 위해 읽기 - 쓰기 권한이있는 경우 사용할 수 있습니다. 일반적으로 Global [atom table] (https://msdn.microsoft.com/en-us/library/ms649053)은 세션의 유일한 대화 형 WindowStation 인 "WinSta0"과 같은 WindowStation에 있습니다. [ 'JOBOBJECT_BASIC_UI_RESTRICTIONS'] (https://msdn.microsoft.com/en-us/library/ms684152)가있는 프로세스는 동일한 작업의 프로세스와 USER 개체에만 제한 될 수 있습니다. – eryksun

관련 문제