728x90

 

핸들테이블

- 프로세스에서 메일 슬롯을 생성하면 메일 슬롯의 커널 오브젝트가 생성이 되고 접근하기 위한 핸들값과 커널 오브젝트의 주소 정보가 핸들 테이블에 등록(저장)

핸들 테이블의 상속

- 핸들 테이블은 부모 프로세스에서 조건이 맞으면 자식 프로세스에서 상속이 가능

BOOL CreateProcess(
  LPCSTR                lpApplicationName,
  LPSTR                 lpCommandLine,
  LPSECURITY_ATTRIBUTES lpProcessAttributes,
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  BOOL                  bInheritHandles,		// 핸들 테이블의 상속 여부
  DWORD                 dwCreationFlags,
  LPVOID                lpEnvironment,
  LPCSTR                lpCurrentDirectory,
  LPSTARTUPINFO         lpStartupInfo,
  LPPROCESS_INFORMATIO  lpProcessInformation
);

- 각각 핸들의 상속 여부가 설정되어 있는 경우만 가능

    -> SECURITY_ATTRIBUTES를 설정

typedef struct _SECURITY_ATTRIBUTES {
  DWORD  nLength;
  LPVOID lpSecurityDescriptor;
  BOOL   bInheritHandle;		// 핸들의 상속 여부
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;

    -> 이 정보를 보안 설정을 해주는 파라미터에 넣음

SECURITY_ATTRIBUTES sa;
sa.bInheritHandle = true;

hMailSlot = CreateMailslot( 
	SLOT_NAME, // 메일 슬롯 이름(주소) 
	0, // 메일 슬롯 버퍼 크기(0 = 최대치) 
	MAILSLOT_WAIT_FOREVER, 
	&sa // 보안 설정 
    );

- 부모 프로세스에서 자식 프로세스로 핸들 테이블이 상속될 때 상속이 된 커널 오브젝트의 UC는 1씩 증가

 

Pseudo 핸들

- 실제로 핸들 테이블에 등록되어 있지 않은 가짜 핸들

    -> 자기 프로세스의 핸들 정보는 핸들 테이블에 등록이 되어 있지 않고 GetCurrentProcess() 함수를 통해 반환된 상수(-1)를 통해 프로세스 자신의 커널 오브젝트에 접근을 함

- DuplicateHandle() : 자신의 핸들 정보를 자식 프로세스에 상속을 해주기 위해 사용

BOOL DuplicateHandle(
  HANDLE   hSourceProcessHandle,	// 부모 프로세스
  HANDLE   hSourceHandle,		// 부모 프로세스에서 복사할 핸들
  HANDLE   hTargetProcessHandle,	// 자식 프로세스
  LPHANDLE lpTargetHandle,		// 자식 프로세스에서 저장할 핸들 정보 지정
  DWORD    dwDesiredAccess,		// 복사한 핸들의 접근 권한
  BOOL     bInheritHandle,		// 복사한 핸들의 상속 여부
  DWORD    dwOptions			// 옵션 값(DUPLICATE_SAME_ACCESS / DUPLICATE_CLOSE_SOURCE)
);

- 자기 자신의 핸들 값을 핸들 테이블에 등록하는 방법

Handle var;

DuplicateHandle(
    GetCurrentProcess(),	// 자기 자신의 프로세스의
    GetCurrentProcess(),	// 핸들 값(-1)을
    GetCurrentProcess(),	// 자기 자신의 프로세스에
    &var,					// var 값으로 등록
    0,
    true,
    DUPLICATE_SAME_ACCESS
)

 

728x90

+ Recent posts