Win32, can I haz fdpass?
Marc-André Lureau
Created: 2022-06-14 mar. 17:36
1. Why care?
- context: QMP or D-Bus, local IPC
 
- streaming (migration/chardev) / OOB
 
- D-Bus display API
 
- multi-process setup
 
2. Named Pipes
- ❌ not socket semantic / API
 
- ✅ security/ACL
 
- ❌ no resource sharing
 
- !dbus & !qmp
 
3. TCP sockets
- ✅ socket API
 
- ❌ not quite secure
 
- ❌ no resource sharing
 
- dbus & qmp
 
4. UNIX sockets
- added a few years ago
 
- ✅ socket API
 
- ✅ GETPEERPID
 
- ❌ no resource sharing
 
- dbus, (qmp win32 TBD)
 
5. Is there a way?
DuplicateHandle(H, process_handle)
     → HANDLE 
- ❗ HANDLE != SOCKET != fd
 
WSADuplicateSocket(S, PID!)
     → struct! 
6. D-Bus & fd-pass
NEGOTIATE_UNIX_FD 
- ex: 
ShareFD(fd: 'h')

 
7. WIP: D-Bus & HANDLE-pass
NEGOTIATE_HANDLE 
- ex: 
ShareHandle(handle: 'H')

 
8. TBD: QMP
add-fd -> /dev/fdset/X 
add-win32-handle arg:HANDLE 
add-win32-socket arg:{ socket infos.. } 
- /dev/win32-set/X…
 
9. Status
- glib branch (preliminary patches merged)
 
- zbus branch (same)
 
- dbus reference & spec TBD
 
- QMP TBD