BHO에서 IE EPM을 지원하기 위해 기존 제품을 일부 변경하려고합니다. 나는 그것을로드하고 다양한 메소드 - SetSite, DocumentComplete 등을 가져올 수 있었다 - 호출된다.IE EPM BHO 내에서 명명 된 파이프 서버에 액세스
Windows 서비스 내에서 실행되는 명명 된 파이프 서버에 연결하려고 할 때 걸리는 것으로 보입니다.
이전에는 보호 모드의 IE BHO가 LOW_INTEGRITY_SDDL_SACL ("S : (ML ;; NW ;;; LW)")을 사용하여 명명 된 파이프 서버에 액세스 할 수 있도록 변경했습니다. 코드 내에서 ConvertStringSecurityDescriptorToSecurityDescriptor 메서드를 사용하여 보안 설명자를 만든 다음 실제 SD 또는 SECURITY_ATTRIBUTES 개체에서 SetSecurityDescriptorSacl을 수행했습니다. 이로써 BHO 코드는 SYSTEM 서비스에서 호스팅되는 명명 된 파이프 서버에 액세스 할 수있었습니다.
나는 몇 가지 기사를 언급하고 아마도 가장 유용한 일이 게시물이었다 - 지금 보이는 있도록
Is there a way to create a named pipe from an AppContainer BHO on IE11? 내가 SDDL을 일부 변경했다처럼 - 이것은 기본적으로 전체 파일 액세스를 제공
#define EPM_INTEGRITY_SDDL L"S:(ML;;NW;;;LW)D:(A;;FA;;;SY)(A;;FA;;;WD)(A;;FA;;;AC)"
DACL 부분에있는 모든 응용 프로그램 패키지 및 시스템을 모든 사람에게 보냅니다. 나는 그것이 너무 관대하다는 것을 알고 있지만 SetSecurityDescriptorDacl을 사용한 후에는 이것이 적어도 작동해야한다고 생각했습니다 :-)
어쨌든 SD를 설정하는 코드는 다음과 같습니다. 내가 여기서 뭔가를 놓치고 있니?
if (!ConvertStringSecurityDescriptorToSecurityDescriptor(EPM_INTEGRITY_SDDL, SDDL_REVISION_1, &pLISD, NULL))
{
OutputDebugString(L"Unable to get the app-container integrity security descriptor");
return false;
}
PACL pAcl = 0;
BOOL bAclPresent = FALSE;
BOOL bAclDefaulted = FALSE;
if (!GetSecurityDescriptorSacl(pLISD, &bAclPresent, &pAcl, &bAclDefaulted) || !bAclPresent)
{
return false;
}
if (!SetSecurityDescriptorSacl(pSecurityDesc, TRUE, pAcl, FALSE))
{
return false;
}
pAcl = 0;
bAclPresent = FALSE;
bAclDefaulted = FALSE;
if (!GetSecurityDescriptorDacl(pLISD, &bAclPresent, &pAcl, &bAclDefaulted) || !bAclPresent)
{
OutputDebugString(L"Setting to low integrity : No DACL Available");
return false;
}
if (!SetSecurityDescriptorDacl(pSecurityDesc, TRUE, pAcl, FALSE))
{
OutputDebugString(L"Setting to low integrity : Unable to set the DACL");
return false;
}
좋은 'EPM_INTEGRITY_SDDL'에 대해 매우 감사드립니다. 매력처럼 작동하고 Windows 11의 IE11에서 EPM 모드로 실행되는 BHO는 일반 데스크톱 프로세스에서 생성 된 일부 공유 메모리를 열 수 있습니다. 그래, 나도 알아, 그 방법 (일명 "거대한 뒷문")가 아니지만, 나는 언젠가 브로커 경로를 갈 것입니다 ... – manuell
건배! 내가 알기에, 일반 데스크탑 프로세스는 당신의 "브로커"입니다. 내 경우에는 브로커 프로세스로 Windows 서비스 (세션 0에서 실행)를 만들려고했지만 SDDL을 사용한 경우에도 세션 간 요청은 작동하지 않습니다. 아래의 솔루션은 양방향 통신을 처리하는 방법을 알려줍니다. – Vivek