Index: base/memory/shared_memory_win.cc |
diff --git a/base/memory/shared_memory_win.cc b/base/memory/shared_memory_win.cc |
index 7e0cf0bf23e67f0d13d22e56e0924cecda7456ce..eacf0d6ccefcd97bd42d6758d4c99597d41f1730 100644 |
--- a/base/memory/shared_memory_win.cc |
+++ b/base/memory/shared_memory_win.cc |
@@ -100,6 +100,18 @@ size_t SharedMemory::GetHandleLimit() { |
return static_cast<size_t>(1 << 23); |
} |
+// static |
+SharedMemoryHandle SharedMemory::DuplicateHandle( |
+ const SharedMemoryHandle& handle) { |
+ ProcessHandle process = GetCurrentProcess(); |
+ SharedMemoryHandle duped_handle; |
+ BOOL success = ::DuplicateHandle(process, handle, process, &duped_handle, 0, |
+ FALSE, DUPLICATE_SAME_ACCESS); |
+ if (success) |
+ return duped_handle; |
+ return NULLHandle(); |
+} |
+ |
bool SharedMemory::CreateAndMapAnonymous(size_t size) { |
return CreateAnonymous(size) && Map(size); |
} |
@@ -242,9 +254,10 @@ bool SharedMemory::ShareToProcessCommon(ProcessHandle process, |
return true; |
} |
- if (!DuplicateHandle(GetCurrentProcess(), mapped_file, process, |
- &result, access, FALSE, options)) |
+ if (!::DuplicateHandle(GetCurrentProcess(), mapped_file, process, &result, |
+ access, FALSE, options)) { |
return false; |
+ } |
*new_handle = result; |
return true; |
} |