1#![allow(non_snake_case, non_camel_case_types)]
6
7pub mod errors;
8pub mod types;
9
10pub use errors::*;
11pub use types::*;
12
13use core::ffi::c_void;
14use windows_sys::Win32::Foundation::HANDLE;
15use windows_sys::core::HRESULT;
16
17unsafe extern "system" {
18 pub fn WslcGetVersion(version: *mut WslcVersion) -> HRESULT;
22
23 pub fn WslcGetMissingComponents(missingComponents: *mut WslcComponentFlags) -> HRESULT;
25
26 pub fn WslcInstallWithDependencies(
28 components: WslcComponentFlags,
29 options: WslcInstallOptions,
30 progressCallback: WslcInstallCallback,
31 context: *mut c_void,
32 ) -> HRESULT;
33
34 pub fn WslcInitSessionSettings(
38 name: *const u16,
39 storagePath: *const u16,
40 sessionSettings: *mut WslcSessionSettings,
41 ) -> HRESULT;
42
43 pub fn WslcSetSessionSettingsCpuCount(
45 sessionSettings: *mut WslcSessionSettings,
46 cpuCount: u32,
47 ) -> HRESULT;
48
49 pub fn WslcSetSessionSettingsMemory(
51 sessionSettings: *mut WslcSessionSettings,
52 memoryMB: u32,
53 ) -> HRESULT;
54
55 pub fn WslcSetSessionSettingsTimeout(
57 sessionSettings: *mut WslcSessionSettings,
58 timeoutMS: u32,
59 ) -> HRESULT;
60
61 pub fn WslcSetSessionSettingsVhd(
63 sessionSettings: *mut WslcSessionSettings,
64 vhdRequirements: *const WslcVhdRequirements,
65 ) -> HRESULT;
66
67 pub fn WslcSetSessionSettingsFeatureFlags(
69 sessionSettings: *mut WslcSessionSettings,
70 flags: WslcSessionFeatureFlags,
71 ) -> HRESULT;
72
73 pub fn WslcCreateSession(
75 sessionSettings: *mut WslcSessionSettings,
76 session: *mut WslcSession,
77 errorMessage: *mut *mut u16,
78 ) -> HRESULT;
79
80 pub fn WslcGetSessionTerminationEvent(
82 session: WslcSession,
83 terminationEvent: *mut HANDLE,
84 ) -> HRESULT;
85
86 pub fn WslcGetSessionTerminationReason(
88 session: WslcSession,
89 reason: *mut WslcSessionTerminationReason,
90 ) -> HRESULT;
91
92 pub fn WslcTerminateSession(session: WslcSession) -> HRESULT;
94
95 pub fn WslcReleaseSession(session: WslcSession) -> HRESULT;
97
98 pub fn WslcRegisterSessionCrashDumpCallback(
100 session: WslcSession,
101 crashDumpCallback: WslcSessionCrashDumpCallback,
102 crashDumpContext: *mut c_void,
103 subscription: *mut WslcCrashDumpSubscription,
104 errorMessage: *mut *mut u16,
105 ) -> HRESULT;
106
107 pub fn WslcReleaseCrashDumpSubscription(subscription: WslcCrashDumpSubscription) -> HRESULT;
109
110 pub fn WslcInitContainerSettings(
114 imageName: *const i8,
115 containerSettings: *mut WslcContainerSettings,
116 ) -> HRESULT;
117
118 pub fn WslcSetContainerSettingsName(
120 containerSettings: *mut WslcContainerSettings,
121 name: *const i8,
122 ) -> HRESULT;
123
124 pub fn WslcSetContainerSettingsInitProcess(
126 containerSettings: *mut WslcContainerSettings,
127 initProcess: *mut WslcProcessSettings,
128 ) -> HRESULT;
129
130 pub fn WslcSetContainerSettingsNetworkingMode(
132 containerSettings: *mut WslcContainerSettings,
133 networkingMode: WslcContainerNetworkingMode,
134 ) -> HRESULT;
135
136 pub fn WslcSetContainerSettingsHostName(
138 containerSettings: *mut WslcContainerSettings,
139 hostName: *const i8,
140 ) -> HRESULT;
141
142 pub fn WslcSetContainerSettingsDomainName(
144 containerSettings: *mut WslcContainerSettings,
145 domainName: *const i8,
146 ) -> HRESULT;
147
148 pub fn WslcSetContainerSettingsFlags(
150 containerSettings: *mut WslcContainerSettings,
151 flags: WslcContainerFlags,
152 ) -> HRESULT;
153
154 pub fn WslcSetContainerSettingsPortMappings(
156 containerSettings: *mut WslcContainerSettings,
157 portMappings: *const WslcContainerPortMapping,
158 portMappingCount: u32,
159 ) -> HRESULT;
160
161 pub fn WslcSetContainerSettingsVolumes(
163 containerSettings: *mut WslcContainerSettings,
164 volumes: *const WslcContainerVolume,
165 volumeCount: u32,
166 ) -> HRESULT;
167
168 pub fn WslcSetContainerSettingsNamedVolumes(
170 containerSettings: *mut WslcContainerSettings,
171 namedVolumes: *const WslcContainerNamedVolume,
172 namedVolumeCount: u32,
173 ) -> HRESULT;
174
175 pub fn WslcCreateContainer(
177 session: WslcSession,
178 containerSettings: *const WslcContainerSettings,
179 container: *mut WslcContainer,
180 errorMessage: *mut *mut u16,
181 ) -> HRESULT;
182
183 pub fn WslcOpenContainer(
185 session: WslcSession,
186 nameOrId: *const i8,
187 container: *mut WslcContainer,
188 errorMessage: *mut *mut u16,
189 ) -> HRESULT;
190
191 pub fn WslcStartContainer(
193 container: WslcContainer,
194 flags: WslcContainerStartFlags,
195 errorMessage: *mut *mut u16,
196 ) -> HRESULT;
197
198 pub fn WslcStopContainer(
200 container: WslcContainer,
201 signal: WslcSignal,
202 timeoutSeconds: u32,
203 errorMessage: *mut *mut u16,
204 ) -> HRESULT;
205
206 pub fn WslcDeleteContainer(
208 container: WslcContainer,
209 flags: WslcDeleteContainerFlags,
210 errorMessage: *mut *mut u16,
211 ) -> HRESULT;
212
213 pub fn WslcReleaseContainer(container: WslcContainer) -> HRESULT;
215
216 pub fn WslcGetContainerID(container: WslcContainer, containerID: *mut i8) -> HRESULT;
218
219 pub fn WslcGetContainerInitProcess(
221 container: WslcContainer,
222 initProcess: *mut WslcProcess,
223 ) -> HRESULT;
224
225 pub fn WslcInspectContainer(container: WslcContainer, inspectData: *mut *mut i8) -> HRESULT;
227
228 pub fn WslcGetContainerState(
230 container: WslcContainer,
231 state: *mut WslcContainerState,
232 ) -> HRESULT;
233
234 pub fn WslcSetContainerInitProcessIOCallbacks(
236 container: WslcContainer,
237 callbacks: *const WslcProcessCallbacks,
238 context: *mut c_void,
239 ) -> HRESULT;
240
241 pub fn WslcInitProcessSettings(processSettings: *mut WslcProcessSettings) -> HRESULT;
245
246 pub fn WslcSetProcessSettingsWorkingDirectory(
248 processSettings: *mut WslcProcessSettings,
249 workingDirectory: *const i8,
250 ) -> HRESULT;
251
252 pub fn WslcSetProcessSettingsCmdLine(
254 processSettings: *mut WslcProcessSettings,
255 argv: *const *const i8,
256 argc: usize,
257 ) -> HRESULT;
258
259 pub fn WslcSetProcessSettingsEnvVariables(
261 processSettings: *mut WslcProcessSettings,
262 keyValue: *const *const i8,
263 argc: usize,
264 ) -> HRESULT;
265
266 pub fn WslcSetProcessSettingsFlags(
268 processSettings: *mut WslcProcessSettings,
269 flags: WslcProcessFlags,
270 ) -> HRESULT;
271
272 pub fn WslcSetProcessSettingsCallbacks(
274 processSettings: *mut WslcProcessSettings,
275 callbacks: *const WslcProcessCallbacks,
276 context: *mut c_void,
277 ) -> HRESULT;
278
279 pub fn WslcCreateContainerProcess(
281 container: WslcContainer,
282 newProcessSettings: *mut WslcProcessSettings,
283 newProcess: *mut WslcProcess,
284 errorMessage: *mut *mut u16,
285 ) -> HRESULT;
286
287 pub fn WslcGetProcessPid(process: WslcProcess, pid: *mut u32) -> HRESULT;
289
290 pub fn WslcGetProcessExitEvent(process: WslcProcess, exitEvent: *mut HANDLE) -> HRESULT;
292
293 pub fn WslcGetProcessState(process: WslcProcess, state: *mut WslcProcessState) -> HRESULT;
295
296 pub fn WslcGetProcessExitCode(process: WslcProcess, exitCode: *mut i32) -> HRESULT;
298
299 pub fn WslcSignalProcess(process: WslcProcess, signal: WslcSignal) -> HRESULT;
301
302 pub fn WslcGetProcessIOHandle(
304 process: WslcProcess,
305 ioHandle: WslcProcessIOHandle,
306 handle: *mut HANDLE,
307 ) -> HRESULT;
308
309 pub fn WslcReleaseProcess(process: WslcProcess) -> HRESULT;
311
312 pub fn WslcListSessionImages(
316 session: WslcSession,
317 images: *mut *mut WslcImageInfo,
318 count: *mut u32,
319 ) -> HRESULT;
320
321 pub fn WslcPullSessionImage(
323 session: WslcSession,
324 options: *const WslcPullImageOptions,
325 errorMessage: *mut *mut u16,
326 ) -> HRESULT;
327
328 pub fn WslcImportSessionImage(
330 session: WslcSession,
331 imageName: *const i8,
332 imageContent: HANDLE,
333 imageContentBytes: u64,
334 options: *const WslcImportImageOptions,
335 errorMessage: *mut *mut u16,
336 ) -> HRESULT;
337
338 pub fn WslcImportSessionImageFromFile(
340 session: WslcSession,
341 imageName: *const i8,
342 path: *const u16,
343 options: *const WslcImportImageOptions,
344 errorMessage: *mut *mut u16,
345 ) -> HRESULT;
346
347 pub fn WslcLoadSessionImage(
349 session: WslcSession,
350 imageContent: HANDLE,
351 imageContentBytes: u64,
352 options: *const WslcLoadImageOptions,
353 errorMessage: *mut *mut u16,
354 ) -> HRESULT;
355
356 pub fn WslcLoadSessionImageFromFile(
358 session: WslcSession,
359 path: *const u16,
360 options: *const WslcLoadImageOptions,
361 errorMessage: *mut *mut u16,
362 ) -> HRESULT;
363
364 pub fn WslcTagSessionImage(
366 session: WslcSession,
367 options: *const WslcTagImageOptions,
368 errorMessage: *mut *mut u16,
369 ) -> HRESULT;
370
371 pub fn WslcPushSessionImage(
373 session: WslcSession,
374 options: *const WslcPushImageOptions,
375 errorMessage: *mut *mut u16,
376 ) -> HRESULT;
377
378 pub fn WslcDeleteSessionImage(
380 session: WslcSession,
381 nameOrID: *const i8,
382 errorMessage: *mut *mut u16,
383 ) -> HRESULT;
384
385 pub fn WslcSessionAuthenticate(
387 session: WslcSession,
388 serverAddress: *const i8,
389 username: *const i8,
390 password: *const i8,
391 identityToken: *mut *mut i8,
392 tokenType: *mut WslcIdentityTokenType,
393 errorMessage: *mut *mut u16,
394 ) -> HRESULT;
395
396 pub fn WslcCreateSessionVhdVolume(
400 session: WslcSession,
401 options: *const WslcVhdRequirements,
402 errorMessage: *mut *mut u16,
403 ) -> HRESULT;
404
405 pub fn WslcDeleteSessionVhdVolume(
407 session: WslcSession,
408 name: *const i8,
409 errorMessage: *mut *mut u16,
410 ) -> HRESULT;
411}