@@ -263,7 +263,7 @@ pub fn open_protocol_exclusive<P: ProtocolPointer + ?Sized>(
263
263
///
264
264
/// If the image is successfully loaded, a [`Handle`] supporting the
265
265
/// [`LoadedImage`] and [`LoadedImageDevicePath`] protocols is returned. The
266
- /// image can be started with `start_image` and unloaded with
266
+ /// image can be started with [ `start_image`] and unloaded with
267
267
/// [`unload_image`].
268
268
///
269
269
/// # Errors
@@ -334,6 +334,27 @@ pub fn unload_image(image_handle: Handle) -> Result {
334
334
unsafe { ( bt. unload_image ) ( image_handle. as_ptr ( ) ) } . to_result ( )
335
335
}
336
336
337
+ /// Transfers control to a loaded image's entry point.
338
+ ///
339
+ /// # Errors
340
+ ///
341
+ /// * [`Status::INVALID_PARAMETER`]: `image_handle` is not valid, or the image
342
+ /// has already been initialized with `start_image`.
343
+ /// * [`Status::SECURITY_VIOLATION`]: a security policy specifies that the image
344
+ /// should not be started.
345
+ pub fn start_image ( image_handle : Handle ) -> Result {
346
+ let bt = boot_services_raw_panicking ( ) ;
347
+ let bt = unsafe { bt. as_ref ( ) } ;
348
+
349
+ // TODO: implement returning exit data to the caller.
350
+ let mut exit_data_size: usize = 0 ;
351
+ let mut exit_data: * mut u16 = ptr:: null_mut ( ) ;
352
+
353
+ unsafe {
354
+ ( bt. start_image ) ( image_handle. as_ptr ( ) , & mut exit_data_size, & mut exit_data) . to_result ( )
355
+ }
356
+ }
357
+
337
358
/// A buffer returned by [`locate_handle_buffer`] that contains an array of
338
359
/// [`Handle`]s that support the requested protocol.
339
360
#[ derive( Debug , Eq , PartialEq ) ]
0 commit comments