| Index: src/plugin/AdblockPlusClient.cpp | 
| diff --git a/src/plugin/AdblockPlusClient.cpp b/src/plugin/AdblockPlusClient.cpp | 
| index edee79b6f91613cd86688ea9040b6c05bccae5cb..a68e149c3abedc990f40d194984f9012af980834 100644 | 
| --- a/src/plugin/AdblockPlusClient.cpp | 
| +++ b/src/plugin/AdblockPlusClient.cpp | 
| @@ -26,74 +26,42 @@ | 
|  | 
| namespace | 
| { | 
| -  void SpawnAdblockPlusEngine() | 
| -  { | 
| -    std::wstring engineExecutablePath = GetDllDir() + L"AdblockPlusEngine.exe"; | 
| -    CString params = ToCString(L"AdblockPlusEngine.exe " + GetBrowserLanguage()); | 
| - | 
| -    STARTUPINFO startupInfo = {}; | 
| -    PROCESS_INFORMATION processInformation = {}; | 
| - | 
| -    HANDLE token; | 
| -    OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE | TOKEN_ADJUST_DEFAULT | TOKEN_QUERY | TOKEN_ASSIGN_PRIMARY, &token); | 
| - | 
| -    TOKEN_APPCONTAINER_INFORMATION *acs = NULL; | 
| -    DWORD length = 0; | 
| - | 
| -    // Get AppContainer SID | 
| -    if (!GetTokenInformation(token, TokenAppContainerSid, acs, 0, &length) && GetLastError() == ERROR_INSUFFICIENT_BUFFER) | 
| +  class ScopedProcessInformation : public PROCESS_INFORMATION { | 
| +  public: | 
| +    ScopedProcessInformation() | 
| { | 
| -        acs = (TOKEN_APPCONTAINER_INFORMATION*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, length); | 
| -        if (acs != NULL) | 
| -        { | 
| -          GetTokenInformation(token, TokenAppContainerSid, acs, length, &length); | 
| -        } | 
| -        else | 
| -        { | 
| -          throw std::runtime_error("Out of memory"); | 
| -        } | 
| +      hProcess = hThread = 0; | 
| +      dwProcessId = dwThreadId = 0; | 
| } | 
| - | 
| -    BOOL createProcRes = 0; | 
| -    // Running inside AppContainer or in Windows XP | 
| -    if ((acs != NULL && acs->TokenAppContainer != NULL) || !IsWindowsVistaOrLater()) | 
| +    ~ScopedProcessInformation() | 
| { | 
| -      // We need to break out from AppContainer. Launch with default security - registry entry will eat the user prompt | 
| -      // See http://msdn.microsoft.com/en-us/library/bb250462(v=vs.85).aspx#wpm_elebp | 
| -      createProcRes = CreateProcessW(engineExecutablePath.c_str(), params.GetBuffer(params.GetLength() + 1), | 
| -                              0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo, &processInformation); | 
| +      if (hThread != nullptr) | 
| +      { | 
| +        CloseHandle(hThread); | 
| +      } | 
| +      if (hProcess != nullptr) | 
| +      { | 
| +        CloseHandle(hProcess); | 
| +      } | 
| } | 
| -    else | 
| -    { | 
| -      // Launch with Low Integrity explicitly | 
| -      HANDLE newToken; | 
| -      DuplicateTokenEx(token, 0, 0, SecurityImpersonation, TokenPrimary, &newToken); | 
| - | 
| -      PSID integritySid = 0; | 
| -      ConvertStringSidToSid(L"S-1-16-4096", &integritySid); | 
| -      std::tr1::shared_ptr<SID> sharedIntegritySid(static_cast<SID*>(integritySid), FreeSid); // Just to simplify cleanup | 
| - | 
| -      TOKEN_MANDATORY_LABEL tml = {}; | 
| -      tml.Label.Attributes = SE_GROUP_INTEGRITY; | 
| -      tml.Label.Sid = integritySid; | 
| - | 
| -      // Set the process integrity level | 
| -      SetTokenInformation(newToken, TokenIntegrityLevel, &tml, sizeof(tml)); | 
| +  }; | 
|  | 
| -      STARTUPINFO startupInfo = {}; | 
| -      PROCESS_INFORMATION processInformation = {}; | 
| +  void SpawnAdblockPlusEngine() | 
| +  { | 
| +    std::wstring engineExecutablePath = GetDllDir() + L"AdblockPlusEngine.exe"; | 
| +    std::wstring params = L"AdblockPlusEngine.exe " + GetBrowserLanguage(); | 
|  | 
| -      createProcRes = CreateProcessAsUserW(newToken, engineExecutablePath.c_str(), params.GetBuffer(params.GetLength() + 1), | 
| -                              0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo, &processInformation); | 
| -    } | 
| +    STARTUPINFO startupInfo = {}; | 
| +    ScopedProcessInformation processInformation; | 
|  | 
| +    // We need to break out from AppContainer. Launch with default security - registry entry will eat the user prompt | 
| +    // See http://msdn.microsoft.com/en-us/library/bb250462(v=vs.85).aspx#wpm_elebp | 
| +    BOOL createProcRes = CreateProcessW(engineExecutablePath.c_str(), ¶ms[0], | 
| +      0, 0, false, 0, 0, 0, &startupInfo, &processInformation); | 
| if (!createProcRes) | 
| { | 
| throw std::runtime_error("Failed to start Adblock Plus Engine"); | 
| } | 
| - | 
| -    CloseHandle(processInformation.hProcess); | 
| -    CloseHandle(processInformation.hThread); | 
| } | 
|  | 
| Communication::Pipe* OpenEnginePipe() | 
| @@ -148,7 +116,7 @@ namespace | 
| } | 
|  | 
| CAdblockPlusClient* CAdblockPlusClient::s_instance = NULL; | 
| -CComAutoCriticalSection CAdblockPlusClient::s_criticalSectionLocal; | 
| +CComAutoCriticalSection CAdblockPlusClient::s_criticalSectionLocal; | 
|  | 
| CAdblockPlusClient::CAdblockPlusClient() | 
| { | 
|  |