| Index: mojo/edk/embedder/named_platform_handle_utils_win.cc
|
| diff --git a/mojo/edk/embedder/named_platform_handle_utils_win.cc b/mojo/edk/embedder/named_platform_handle_utils_win.cc
|
| index ccf506217ae222e89e57de95ba85089c7fc575f0..1a602d1a4c74559dd92f4f5e1cd2ba68b05c76a4 100644
|
| --- a/mojo/edk/embedder/named_platform_handle_utils_win.cc
|
| +++ b/mojo/edk/embedder/named_platform_handle_utils_win.cc
|
| @@ -15,6 +15,18 @@
|
|
|
| namespace mojo {
|
| namespace edk {
|
| +namespace {
|
| +
|
| +// A DACL to grant:
|
| +// GA = Generic All
|
| +// access to:
|
| +// SY = LOCAL_SYSTEM
|
| +// BA = BUILTIN_ADMINISTRATORS
|
| +// OW = OWNER_RIGHTS
|
| +constexpr base::char16 kDefaultSecurityDescriptor[] =
|
| + L"D:(A;;GA;;;SY)(A;;GA;;;BA)(A;;GA;;;OW)";
|
| +
|
| +} // namespace
|
|
|
| ScopedPlatformHandle CreateClientHandle(
|
| const NamedPlatformHandle& named_handle) {
|
| @@ -41,27 +53,23 @@ ScopedPlatformHandle CreateClientHandle(
|
| return handle;
|
| }
|
|
|
| -ScopedPlatformHandle CreateServerHandle(const NamedPlatformHandle& named_handle,
|
| - bool enforce_uniqueness) {
|
| +ScopedPlatformHandle CreateServerHandle(
|
| + const NamedPlatformHandle& named_handle,
|
| + const CreateServerHandleOptions& options) {
|
| if (!named_handle.is_valid())
|
| return ScopedPlatformHandle();
|
|
|
| PSECURITY_DESCRIPTOR security_desc = nullptr;
|
| ULONG security_desc_len = 0;
|
| - // Create a DACL to grant:
|
| - // GA = Generic All
|
| - // access to:
|
| - // SY = LOCAL_SYSTEM
|
| - // BA = BUILTIN_ADMINISTRATORS
|
| - // OW = OWNER_RIGHTS
|
| PCHECK(ConvertStringSecurityDescriptorToSecurityDescriptor(
|
| - L"D:(A;;GA;;;SY)(A;;GA;;;BA)(A;;GA;;;OW)", SDDL_REVISION_1,
|
| - &security_desc, &security_desc_len));
|
| + options.security_descriptor.empty() ? kDefaultSecurityDescriptor
|
| + : options.security_descriptor.c_str(),
|
| + SDDL_REVISION_1, &security_desc, &security_desc_len));
|
| std::unique_ptr<void, decltype(::LocalFree)*> p(security_desc, ::LocalFree);
|
| SECURITY_ATTRIBUTES security_attributes = {sizeof(SECURITY_ATTRIBUTES),
|
| security_desc, FALSE};
|
|
|
| - const DWORD kOpenMode = enforce_uniqueness
|
| + const DWORD kOpenMode = options.enforce_uniqueness
|
| ? PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED |
|
| FILE_FLAG_FIRST_PIPE_INSTANCE
|
| : PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED;
|
| @@ -69,9 +77,9 @@ ScopedPlatformHandle CreateServerHandle(const NamedPlatformHandle& named_handle,
|
| PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_REJECT_REMOTE_CLIENTS;
|
| PlatformHandle handle(
|
| CreateNamedPipeW(named_handle.pipe_name().c_str(), kOpenMode, kPipeMode,
|
| - enforce_uniqueness ? 1 : 255, // Max instances.
|
| - 4096, // Out buffer size.
|
| - 4096, // In buffer size.
|
| + options.enforce_uniqueness ? 1 : 255, // Max instances.
|
| + 4096, // Out buffer size.
|
| + 4096, // In buffer size.
|
| 5000, // Timeout in milliseconds.
|
| &security_attributes));
|
| handle.needs_connection = true;
|
|
|