61 :
send_ring_hmem(CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(
TUN_RING), NULL)),
67#if !defined(ATOMIC_LONG_LOCK_FREE) || (ATOMIC_LONG_LOCK_FREE != 2)
68#error Atomic long is expected to be always lock-free
75 DuplicateHandle(GetCurrentProcess(),
81 DUPLICATE_SAME_ACCESS);
86 HANDLE client_process,
87 const std::string &send_ring_hmem_hex,
88 const std::string &receive_ring_hmem_hex,
89 const std::string &send_ring_tail_moved_hex,
90 const std::string &receive_ring_tail_moved_hex)
93 HANDLE remote_handle = BufHex::parse<HANDLE>(send_ring_hmem_hex,
"send_ring_hmem");
95 DuplicateHandle(client_process, remote_handle, GetCurrentProcess(), &handle, 0, FALSE, DUPLICATE_SAME_ACCESS);
98 remote_handle = BufHex::parse<HANDLE>(receive_ring_hmem_hex,
"receive_ring_hmem");
99 DuplicateHandle(client_process, remote_handle, GetCurrentProcess(), &handle, 0, FALSE, DUPLICATE_SAME_ACCESS);
102 remote_handle = BufHex::parse<HANDLE>(send_ring_tail_moved_hex,
"send_ring_tail_moved");
103 DuplicateHandle(client_process, remote_handle, GetCurrentProcess(), &handle, 0, FALSE, DUPLICATE_SAME_ACCESS);
106 remote_handle = BufHex::parse<HANDLE>(receive_ring_tail_moved_hex,
"receive_ring_tail_moved");
107 DuplicateHandle(client_process, remote_handle, GetCurrentProcess(), &handle, 0, FALSE, DUPLICATE_SAME_ACCESS);