7

Internet Explorer 11 (Windows 8.1) 用の BHO を作成しようとしています。私の BHO は AppContainer サンドボックスを実装していますが、名前付きパイプを作成できないようで、次のCreateNamedPipeメッセージで失敗します。 Access is denied.

名前付きパイプを作成するために使用しているコードは次のとおりです(ロシアのWebサイトで見つけた、最後のコメント:

        LPCWSTR LOW_INTEGRITY_SDDL_SACL_W = L"S:(ML;;NW;;;LW)D:(A;;0x120083;;;WD)(A;;0x120083;;;AC)";

        PSECURITY_DESCRIPTOR pSD = NULL;
        ConvertStringSecurityDescriptorToSecurityDescriptorW (
            LOW_INTEGRITY_SDDL_SACL_W、
            SDDL_REVISION_1、
            &pSD,
            ヌル );

        もし ( pSD != NULL)
        {
            SECURITY_ATTRIBUTES セキュリティ属性;

            SecurityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);
            SecurityAttributes.bInheritHandle = TRUE;
            SecurityAttributes.lpSecurityDescriptor = pSD;

            HANDLE hPipe = CreateNamedPipe(
                L"\\\\.\\pipe\\testpipe",
                PIPE_ACCESS_DUPLEX、                     
                PIPE_TYPE_BYTE | PIPE_READMODE_BYTE、
                1、                                  
                4096、                   
                4096、                               
                1000、
                &SecurityAttributes);           

        }

残念ながら、うまくいきません。GetLastError() は Access is denied通常どおりこれを返します。

4

3 に答える 3

0

ALL_APPLICATION_PACKAGE 権限をハンドルに追加できますが、これはバックドア ソリューションであり、ブローカー ソリューションは長期的です。

DWORD WindowsSecurity::AddDACLToObject(HANDLE hObj,SE_OBJECT_TYPE seObjectType) {
LPWSTR szAddSid = SID_ALL_APP_PACKAGES;

PACL pACL = NULL;
DWORD dwRes;
PSID pSIDAllAppPackage = NULL;

PSECURITY_DESCRIPTOR pSDOld = NULL;
PACL pOldDACL = NULL;
dwRes = GetSecurityInfo(hObj, seObjectType, 
    DACL_SECURITY_INFORMATION,
    NULL, NULL, &pOldDACL, NULL, &pSDOld);
if (ERROR_SUCCESS != dwRes) {
    return dwRes;
} 

if(ConvertStringSidToSid(szAddSid,&pSIDAllAppPackage) == FALSE) {
    dwRes = GetLastError();
    return dwRes;
}

const int NUM_ACES  = 1;
EXPLICIT_ACCESS ea[NUM_ACES];
ZeroMemory(&ea, NUM_ACES * sizeof(EXPLICIT_ACCESS));

ea[0].grfAccessPermissions = GENERIC_ALL;
ea[0].grfAccessMode = SET_ACCESS;
ea[0].grfInheritance = NO_INHERITANCE;
ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
ea[0].Trustee.TrusteeType = TRUSTEE_IS_GROUP;
ea[0].Trustee.ptstrName = (LPTSTR)pSIDAllAppPackage;

dwRes = SetEntriesInAcl(NUM_ACES, ea, pOldDACL, &pACL);
if (ERROR_SUCCESS != dwRes) {
    return dwRes;
}

dwRes = SetSecurityInfo(
    hObj,                 // name of the object
    seObjectType,              // type of object
    DACL_SECURITY_INFORMATION,   // change only the object's DACL
    NULL, NULL,                  // do not change owner or group
    pACL,                        // DACL specified
    NULL);                       // do not change SACL
return dwRes;

}

于 2013-11-05T08:17:34.163 に答える