오브젝트 매니저(Windows)

Object Manager (Windows)
네임스페이스를 사용하여 계층적으로 분류된 Windows의 Object Manager

Object Manager(내부 Ob)는 Windows Executive의 일부로 구현되는 하위 시스템이며 Windows 리소스를 관리합니다.리소스는 논리적 개체로 표시되며 각각 분류를 위해 네임스페이스에 위치합니다.리소스는 물리 디바이스, 볼륨의 파일 또는 폴더, 레지스트리 엔트리 또는 실행 중인 프로세스일 수 있습니다.리소스를 나타내는 모든 개체에는Object Type속성과 리소스에 대한 기타 메타데이터를 참조하십시오.Object Manager는 공유 리소스이며 리소스를 처리하는 모든 하위 시스템은 Object Manager를 통과해야 합니다.

아키텍처

Object Manager는 프로세스에 할당된 리소스를 추적하는 윈도우즈 NT 운영 체제 라인의 중앙 집중화된 리소스 브로커입니다.리소스에 구애받지 않고 디바이스 및 파일 핸들을 포함한 모든 유형의 리소스를 관리할 수 있습니다.모든 리소스는 개체로 표시되며, 각 리소스는 분류를 위한 논리적 네임스페이스에 속하며 리소스 유형을 나타내는 유형을 가지며 속성을 통해 기능 및 기능을 표시합니다.오브젝트는 모든 프로세스가 완료될 때까지 사용 가능한 상태로 유지됩니다.Object Manager는 참조 카운트와 소유권 정보를 통해 현재 사용 중인 오브젝트의 레코드를 유지합니다.프로세스에 대한 리소스 할당 상태를 변경하는 시스템 호출은 모두 Object Manager를 통해 수행됩니다.

개체는 커널 개체 또는 Executive 개체일 수 있습니다.커널 개체는 다른 유형의 OS 서비스를 구현하는 데 필요한 물리적 디바이스나 동기화 등의 원시 리소스를 나타냅니다.커널 개체는 사용자 모드 코드에 노출되지 않지만 커널 코드로 제한됩니다.커널 외부에서 실행되는 응용 프로그램 및 서비스는 Windows Executive에 의해 공개되는 Executive 오브젝트와 메모리 매니저, 스케줄러, I/O 서브시스템 등의 컴포넌트를 사용합니다.이그제큐티브 오브젝트는 하나 이상의 커널 오브젝트를 캡슐화하고 커널과 커널에서 매개하는 리소스뿐만 아니라 커널이 [clarification needed]수행하는 확장된 서비스 세트도 표시합니다.응용 프로그램 자체는 특정 서비스를 제공하는 하나 이상의 Executive 개체와 표면[definition needed] 개체를 래핑할 수 있습니다.이그제큐티브 오브젝트는 환경 서브시스템(Win32 서브시스템, OS/2 서브시스템, POSIX 서브시스템 등)에서도 각 환경의 기능을 구현하기 위해 사용됩니다.

개체를 만들거나 열 때마다 핸들이라고 하는 인스턴스에 대한 참조가 생성됩니다.Object Manager는 이름과 핸들을 기준으로 개체를 인덱싱합니다.단, 이름 변환을 건너뛸 수 있기 때문에 핸들을 사용하여 개체를 참조하는 것이 더 빠릅니다.핸들은 프로세스와 관련지어지며(프로세스가 소유한 핸들을 나열하는 프로세스의 핸들 테이블에 엔트리를 작성함으로써), 프로세스 간에 전송할 수도 있습니다.프로세스를 사용하려면 먼저 개체에 대한 핸들을 소유해야 합니다.프로세스는 한 번에 최대 1,600,000개의 핸들을 소유할 수 있습니다.생성 중에 프로세스는 기본 개체 집합에 대한 핸들을 가져옵니다.파일 핸들, 이벤트 핸들 및 프로세스 핸들 등 다양한 유형의 핸들이 존재하지만 이러한 핸들은 대상 객체의 유형을 식별하는 데 도움이 될 뿐, 이를 통해 수행할 수 있는 작업을 구분하는 데 도움이 되지 않으므로 다양한 객체 유형이 프로그래밍 방식으로 처리되는 방식에 일관성을 제공합니다.핸들에서 개체를 만들고 해결하는 작업은 Object Manager에 의해서만 조정되므로 리소스 사용량이 눈에 띄지 않습니다.

Windows NT에서 표시되는 Executive 객체의 유형은 다음과 같습니다.

유형 묘사 핸들 취득을 위한 시스템 호출
디렉토리 컨테이너에는 다른 커널 개체가 저장됩니다.중첩된 디렉토리의 여러 수준이 모든 커널 개체를 단일 트리로 구성합니다. NtCreateDirectoryObject
NtOpenDirectoryObject
과정 가상 주소 지정 및 제어 정보와 함께 실행 가능한 스레드 모음입니다. NtCreateProcess(NtCreate프로세스)
Nt Open Process (Nt Open Process)
프로세스 내에서 실행 중인 코드를 포함하는 엔티티입니다. NtCreateThread
NtOpenThread
프로세스의 컬렉션입니다. NtCreateJobObject
NtOpenJobObject
파일 열려 있는 파일 또는 I/O 디바이스. NtCreateFile
Nt Open 파일
부분 선택적으로 파일 또는 페이지 파일에 의해 백업되는 메모리 영역. Nt Create 섹션
Nt Open 섹션
액세스 토큰 개체의 액세스 권한입니다. NtCreate(NtCreate(작성)상품권
NtDuplicate(NtDuplicate)상품권
Nt Open Process (Nt Open Process)상품권
NtOpenThreadToken
이벤트 프로세스 알림에 사용되는 일부 정보를 캡슐화하는 개체입니다. NtCreateEvent
Nt Open 이벤트
세마포어/뮤텍스 다른 리소스에 대한 액세스를 직렬화하는 개체입니다. NtCreateSemaphore
NtOpenSemaphore
타이머 일정한 간격으로 프로세스에 통지하는 오브젝트. NtCreateTimer
NtOpenTimer
열쇠 레지스트리
데스크 톱 GUI 요소를 포함하는 논리 표시면. 없음.
클립보드 다른 개체의 임시 저장소입니다. 없음.
윈도 스테이션 데스크톱 개체 그룹, 하나의 클립보드 및 기타 사용자 개체를 포함하는 개체입니다. 없음.
심볼릭 링크 참조된 개체를 사용할 수 있는 다른 개체에 대한 참조입니다. NtCreateSymbolicLinkObject
NtOpenSymbolicLinkObject

오브젝트 구조

오브젝트 매니저에 의해 관리되는 각 오브젝트에는 헤더와 본문이 있습니다.헤더에는 오브젝트 매니저가 사용하는 상태 정보가 포함되어 있으며 본문에는 오브젝트 고유의 데이터와 본문이 제공하는 서비스가 포함되어 있습니다.오브젝트 헤더에는 다음과 같은 특정 데이터가 포함되어 있습니다.Properties,예를 들어Object Name(이것은 오브젝트를 식별합니다),Object Directory(개체가 속한 카테고리),Security Descriptors(개체에 대한 접근권),Quota Charges(개체의 자원 사용 현황 정보),Open handle count(개체의 식별자인 핸들이 열린 횟수),Open handle list(개체에 대한 실제 참조가 있는 프로세스의 리스트),Reference count(오브젝트에 대한 라이브 참조의 수) 및Type오브젝트의 (오브젝트 본체의 구조를 식별하는 오브젝트)

A Typeobject에는 객체의 유형에 고유한 속성 및 객체가 제공하는 서비스를 구현하는 정적 메서드가 포함됩니다.Object Manager에서 관리하는 개체는 최소한 사전 정의된 서비스 집합을 제공해야 합니다.Close(물체에 대한 핸들을 닫습니다),Duplicate(다른 프로세스가 오브젝트에 대한 공유 액세스를 얻을 수 있는 오브젝트에 대한 다른 핸들을 작성합니다.Query object(속성 및 속성에 대한 정보 표시),Query security(개체의 보안 기술자를 가져옵니다).Set security(보안 액세스 변경) 및Wait(특정 이벤트를 통해 하나 이상의 개체와 동기화합니다).유형 개체에는 유형 이름, 페이징되지 않은 메모리에 할당할지 여부, 액세스 권한 및 동기화 정보 등 몇 가지 일반적인 특성도 있습니다.동일한 유형의 모든 인스턴스가 동일한 유형 개체를 공유하며 유형 개체는 한 번만 인스턴스화됩니다.[ Properties ]를 가진 오브젝트에 해당 오브젝트의 상태와 서비스를 표시하는 메서드를 표시하도록 허용함으로써 새로운 오브젝트 유형을 생성할 수 있습니다.

Object name는 오브젝트에 기술 ID를 부여하여 오브젝트 검색에 도움이 되도록 하기 위해 사용합니다.Object Manager는 관리 대상 개체에 이미 할당된 이름 목록을 유지 관리하고 이름을 인스턴스에 매핑합니다.대부분의 객체접근은 핸들을 통해 이루어지므로 오브젝트 참조로 해결하기 위해 반드시 이름을 조회할 필요는 없습니다.검색은 개체가 생성되거나(새 개체의 이름이 고유함을 확인하기 위해), 프로세스가 명시적으로 이름으로 개체에 액세스할 때만 수행됩니다. Object directories유형별로 분류하는 데 사용됩니다.사전 정의된 디렉토리에는 다음이 포함됩니다.\??(디바이스명),\BaseNamedObjects(뮤텍스, 이벤트, 세마포어, 대기 타이머 및 섹션 객체)\Callback(콜백 함수),\Device,\Drivers,\FileSystem,\KnownDlls,\Nls(언어표),\ObjectTypes(타입 오브젝트),\RPC Controls(RPC 포트),\Security(보안 서브시스템 객체),\Window(서브시스템 오브젝트 삭제).개체는 네임스페이스에도 속합니다.각 사용자 세션에는 서로 다른 네임스페이스가 할당됩니다.모든 세션 간에 공유되는 개체는 GLOBAL 네임스페이스에 있고 세션 고유 개체는 특정 세션 네임스페이스에 있습니다.

OBJECT_Attributes 구조체:

유형화된 구조 _OBJECT_속성 {   하지 않다 길이;   핸들 루트 디렉토리;   PUNICODE_STRING 오브젝트명;   하지 않다 특성;   PSECURITY_Descriptor Security Descriptor;   PSECURITY_품질_서비스 대상 Security Quality Of Service; } 오브젝트_속성 *POBJECT_속성; 

Attributes 멤버는 0 또는 다음 플래그를 조합할 수 있습니다.

OBJ_INHERIT OBJ_PERMENT OBJ_EXCASE_Insensitive OBJ_OPENLIK OBJ_KERNEL_HANDLE

사용.

오브젝트 매니저 경로는 많은 Windows API 파일 함수에 사용할 수 있지만 Win32 이름은 다음과 같습니다.로컬 네임스페이스는 대부분 [1]\?\\.\로 충분합니다.Win32 사용자 모드에서 전자를 사용하면 직접 \--로 변환되지만 \--를 사용하면 됩니다.이 NT 형식은 경로 이름 [2]확장을 끄지 않기 때문에 아직 다릅니다.

Object Manager 네임스페이스에서 탐색기 역할을 하는 도구를 사용할 수 있습니다.여기에는 Sysinternals[3] 32비트 WinObj와 64비트 WinObjEx64가 [4]포함됩니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Naming Files, Paths, and Namespaces - Win32 apps". docs.microsoft.com.
  2. ^ "winapi - Is there a difference between \??\ and \\?\ paths?". Stack Overflow.
  3. ^ "WinObj - Windows Sysinternals". docs.microsoft.com.
  4. ^ "hfiref0x/WinObjEx64: Windows Object Explorer 64-bit". GitHub. 20 February 2020.

외부 링크