Shell Library Primer

Jordan Justen edited this page Jul 1, 2014 · 1 revision
Clone this wiki locally

Table of Contents

ShellPkg Main Libraries

There are 3 main libraries used by almost all shell commands and 2 of these are very usable by shell applications in the ShellPkg.


Used by both commands and applications. Provides easy access to Shell Protocols, File I/O, and printing to the user. This library is functional across both EDK Shell and UEFI Shell and is very useful tor creating applications that are needed to function across Shell environments.


Used by both commands and applications. Provides easy access for manipulating handles. This means things like

  • conversion the handle to and from the handle index; the index is the 2 digit hex identifier of the handle seen by the user
  • sorting of handles to determine parent controllers, child controllers, or which driver controls a given controller


fully usable only when linked within the shell binary and therefore only by internal shell commands. This provides extra features for internal commands. See Shell Application to internal command.

ShellPkg Other Libraries

There are a couple of other libraries that are less commonly used.


provides a C-looking entrypoint for an application. This should not be used for porting full C applications.


provides quick sorting and comparison operations.


provides quick file path manipulation operations.

  • remove ".", "..", and "/" from file paths.
  • eliminate the last item in a path.

ShellPkg Command Libraries

These are all libraries of shell commands and are only intended to be linked directly into the shell. They are NULL-named libraries.

  • UefiShellLevel1CommandsLib
  • UefiShellLevel2CommandsLib
  • UefiShellLevel3CommandsLib
  • UefiShellDebug1CommandsLib
  • UefiShellDriver1CommandsLib
  • UefiShellInstall1CommandsLib
  • UefiShellNetwork1CommandsLib