@@ -290,6 +290,35 @@ typedef struct _WSLCContainerEntry
290290 WSLCContainerState State;
291291} WSLCContainerEntry;
292292
293+ typedef [system_handle(sh_file)] HANDLE FILE_HANDLE;
294+ typedef [system_handle(sh_pipe)] HANDLE PIPE_HANDLE;
295+ typedef [system_handle(sh_socket)] HANDLE SOCKET_HANDLE;
296+
297+ typedef enum _WSLCHandleType
298+ {
299+ WSLCHandleTypeUnknown = 0,
300+ WSLCHandleTypeFile = 1,
301+ WSLCHandleTypePipe = 2,
302+ WSLCHandleTypeSocket = 3
303+ } WSLCHandleType;
304+
305+ typedef struct _WSLCHandle
306+ {
307+ WSLCHandleType Type;
308+
309+ [switch_type(WSLCHandleType), switch_is(Type)]
310+ union
311+ {
312+ [case(WSLCHandleTypeFile)]
313+ FILE_HANDLE File;
314+ [case(WSLCHandleTypePipe)]
315+ PIPE_HANDLE Pipe;
316+ [case(WSLCHandleTypeSocket)]
317+ SOCKET_HANDLE Socket;
318+ [default];
319+ } Handle;
320+ } WSLCHandle;
321+
293322typedef enum _WSLCProcessState
294323{
295324 WslcProcessStateUnknown = 0,
@@ -307,7 +336,7 @@ interface IWSLCProcess : IUnknown
307336{
308337 HRESULT Signal([in] int Signal);
309338 HRESULT GetExitEvent([out, system_handle(sh_event)] HANDLE* EventHandle);
310- HRESULT GetStdHandle([in] ULONG Index , [out] ULONG * Handle);
339+ HRESULT GetStdHandle([in] WSLCFD Fd , [out] WSLCHandle * Handle);
311340 HRESULT GetFlags([out] WSLCProcessFlags* Flags);
312341 HRESULT GetPid([out] int* Pid);
313342 HRESULT GetState([out] WSLCProcessState* State, [out] int* Code);
@@ -417,16 +446,16 @@ typedef enum _WSLCDeleteFlags
417446]
418447interface IWSLCContainer : IUnknown
419448{
420- HRESULT Attach([in, unique] LPCSTR DetachKeys, [out] ULONG * StdIn, [out] ULONG * StdOut, [out] ULONG * StdErr);
449+ HRESULT Attach([in, unique] LPCSTR DetachKeys, [out] WSLCHandle * StdIn, [out] WSLCHandle * StdOut, [out] WSLCHandle * StdErr);
421450 HRESULT Stop([in] WSLCSignal Signal, [in] LONG TimeoutSeconds);
422451 HRESULT Start([in] WSLCContainerStartFlags Flags, [in, unique] LPCSTR DetachKeys);
423452 HRESULT Delete([in] WSLCDeleteFlags Flags);
424- HRESULT Export([in] ULONG TarHandle);
453+ HRESULT Export([in] WSLCHandle TarHandle);
425454 HRESULT GetState([out] WSLCContainerState* State);
426455 HRESULT GetInitProcess([out] IWSLCProcess** Process);
427456 HRESULT Exec([in, ref] const WSLCProcessOptions* Options, [in, unique] LPCSTR DetachKeys, [out] IWSLCProcess** Process);
428457 HRESULT Inspect([out] LPSTR* Output);
429- HRESULT Logs([in] WSLCLogsFlags Flags, [out] ULONG * Stdout, [out] ULONG * Stderr, [in] ULONGLONG Since, [in] ULONGLONG Until, [in] ULONGLONG Tail);
458+ HRESULT Logs([in] WSLCLogsFlags Flags, [out] WSLCHandle * Stdout, [out] WSLCHandle * Stderr, [in] ULONGLONG Since, [in] ULONGLONG Until, [in] ULONGLONG Tail);
430459 HRESULT GetId([out, string] WSLCContainerId Id);
431460 HRESULT GetName([out, string] LPSTR* Name);
432461 HRESULT GetLabels([out, size_is(, *Count)] WSLCLabelInformation** Labels, [out] ULONG* Count);
@@ -462,7 +491,7 @@ typedef struct _WSLCDeleteImageOptions
462491typedef struct _WSLCBuildImageOptions
463492{
464493 LPCWSTR ContextPath;
465- ULONG DockerfileHandle;
494+ WSLCHandle DockerfileHandle;
466495 WSLCStringArray Tags;
467496 WSLCStringArray BuildArgs; // KEY=VALUE pairs passed as --build-arg to docker.
468497 BOOL Verbose; // Show all build progress including internal steps and all statuses.
@@ -529,9 +558,9 @@ interface IWSLCSession : IUnknown
529558 // Image management.
530559 HRESULT PullImage([in] LPCSTR Image, [in, unique] LPCSTR RegistryAuthenticationInformation, [in, unique] IProgressCallback* ProgressCallback);
531560 HRESULT BuildImage([in] const WSLCBuildImageOptions* Options, [in, unique] IProgressCallback* ProgressCallback, [in, unique, system_handle(sh_event)] HANDLE CancelEvent);
532- HRESULT LoadImage([in] ULONG ImageHandle, [in, unique] IProgressCallback* ProgressCallback, [in] ULONGLONG ContentLength);
533- HRESULT ImportImage([in] ULONG ImageHandle, [in] LPCSTR ImageName, [in, unique] IProgressCallback* ProgressCallback, [in] ULONGLONG ContentLength);
534- HRESULT SaveImage([in] ULONG OutputHandle, [in] LPCSTR ImageNameOrID, [in, unique] IProgressCallback * ProgressCallback, [in, unique, system_handle(sh_event)] HANDLE CancelEvent);
561+ HRESULT LoadImage([in] WSLCHandle ImageHandle, [in, unique] IProgressCallback* ProgressCallback, [in] ULONGLONG ContentLength);
562+ HRESULT ImportImage([in] WSLCHandle ImageHandle, [in] LPCSTR ImageName, [in, unique] IProgressCallback* ProgressCallback, [in] ULONGLONG ContentLength);
563+ HRESULT SaveImage([in] WSLCHandle OutputHandle, [in] LPCSTR ImageNameOrID, [in, unique] IProgressCallback * ProgressCallback, [in, unique, system_handle(sh_event)] HANDLE CancelEvent);
535564 HRESULT ListImages([in, unique] const WSLCListImageOptions* Options, [out, size_is(, *Count)] WSLCImageInformation** Images, [out] ULONG* Count);
536565 HRESULT DeleteImage([in] const WSLCDeleteImageOptions* Options, [out, size_is(, *Count)] WSLCDeletedImageInformation** DeletedImages, [out] ULONG* Count);
537566 HRESULT TagImage([in] const WSLCTagImageOptions* Options);
0 commit comments