Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

307 lines
4.8 KiB

  1. /*++
  2. Module Name:
  3. nvrio.h
  4. Abstract:
  5. Access function to r/w environment variables from NVRAM
  6. Author:
  7. Mudit Vats (v-muditv) 12-13-99
  8. Revision History:
  9. --*/
  10. #define MAXBOOTVARS 30
  11. #define MAXBOOTVARSIZE 1024
  12. #ifndef ANYSIZE_ARRAY
  13. #define ANYSIZE_ARRAY 1 // winnt
  14. #endif
  15. #define GLOBAL_DEBUG 0
  16. #define DEBUG_PACK GLOBAL_DEBUG
  17. #if DEBUG_PACK
  18. VOID
  19. DisplayELOFromLoadOption(
  20. IN UINT32 OptionNum
  21. );
  22. VOID
  23. DisplayELO(
  24. char* elo,
  25. UINT64 eloSize
  26. );
  27. #endif
  28. enum OptionalDataFields {
  29. OSLOADFILENAME,
  30. OSLOADOPTIONS,
  31. OSLOADPATH
  32. };
  33. enum EfiLoadOptionFields {
  34. ATTRIBUTE = 10,
  35. FILEPATHLISTLENGTH,
  36. DESCRIPTION,
  37. EFIFILEPATHLIST,
  38. OSFILEPATHLIST,
  39. OPTIONALDATA
  40. };
  41. //
  42. // from EFI spec, ch. 17
  43. //
  44. typedef struct _EFI_LOAD_OPTION {
  45. UINT32 Attributes;
  46. UINT16 FilePathListLength;
  47. CHAR16 Description[1];
  48. //EFI_DEVICE_PATH FilePath[];
  49. //UINT8 OptionalData[];
  50. } EFI_LOAD_OPTION, *PEFI_LOAD_OPTION;
  51. typedef struct _WINDOWS_OS_OPTIONS {
  52. UINT8 Signature[8];
  53. UINT32 Version;
  54. UINT32 Length;
  55. UINT32 OsLoadPathOffset;
  56. CHAR16 OsLoadOptions[ANYSIZE_ARRAY];
  57. //FILE_PATH OsLoadPath;
  58. } WINDOWS_OS_OPTIONS, *PWINDOWS_OS_OPTIONS;
  59. typedef struct _FILE_PATH {
  60. UINT32 Version;
  61. UINT32 Length;
  62. UINT32 Type;
  63. CHAR8 FilePath[ANYSIZE_ARRAY];
  64. } FILE_PATH, *PFILE_PATH;
  65. #define FILE_PATH_TYPE_ARC 1
  66. #define FILE_PATH_TYPE_ARC_SIGNATURE 2
  67. #define FILE_PATH_TYPE_NT 3
  68. #define FILE_PATH_TYPE_EFI 4
  69. //
  70. // from public/sdk/inc/ntexapi.h
  71. //
  72. /*
  73. typedef struct _WINDOWS_OS_OPTIONS {
  74. UCHAR Signature[8];
  75. ULONG Version;
  76. ULONG Length;
  77. ULONG OsLoadPathOffset;
  78. WCHAR OsLoadOptions[ANYSIZE_ARRAY];
  79. //FILE_PATH OsLoadPath;
  80. } WINDOWS_OS_OPTIONS, *PWINDOWS_OS_OPTIONS;
  81. */
  82. #define WINDOWS_OS_OPTIONS_SIGNATURE "WINDOWS"
  83. #define WINDOWS_OS_OPTIONS_VERSION 1
  84. /*
  85. ** BUGBUG: temp prototypes - move to efilib.h later
  86. */
  87. VOID
  88. RUNTIMEFUNCTION
  89. StrCpyA (
  90. IN CHAR8 *Dest,
  91. IN CHAR8 *Src
  92. );
  93. VOID
  94. RUNTIMEFUNCTION
  95. StrCatA (
  96. IN CHAR8 *Dest,
  97. IN CHAR8 *Src
  98. );
  99. UINTN
  100. RUNTIMEFUNCTION
  101. StrLenA (
  102. IN CHAR8 *s1
  103. );
  104. UINTN
  105. RUNTIMEFUNCTION
  106. StrSizeA (
  107. IN CHAR8 *s1
  108. );
  109. CHAR8 *
  110. RUNTIMEFUNCTION
  111. StrDuplicateA (
  112. IN CHAR8 *Src
  113. );
  114. // temp protos end
  115. VOID
  116. GetBootManagerVars(
  117. );
  118. BOOLEAN
  119. EraseOsBootOption(
  120. UINTN BootVarNum
  121. );
  122. BOOLEAN
  123. EraseAllOsBootOptions(
  124. );
  125. BOOLEAN
  126. PushToTop(
  127. IN UINT32 BootVarNum
  128. );
  129. UINT64
  130. GetBootOrderCount(
  131. );
  132. UINT64
  133. GetOsBootOptionsCount(
  134. );
  135. VOID
  136. InsertString(
  137. IN OUT char* Dest,
  138. IN UINT32 Start,
  139. IN UINT32 End,
  140. IN char* InsertString
  141. );
  142. VOID
  143. SubString(
  144. IN OUT char* Dest,
  145. IN UINT32 Start,
  146. IN UINT32 End,
  147. IN char* Src
  148. );
  149. VOID
  150. SetEnvVar(
  151. IN CHAR16* szVarName,
  152. IN CHAR16* szVarValue,
  153. IN UINT32 deleteFlag
  154. );
  155. BOOLEAN
  156. GetLoadIdentifier(
  157. IN UINT32 BootVarNum,
  158. OUT CHAR16* LoadIdentifier
  159. );
  160. VOID
  161. GetOptionalDataValue(
  162. IN UINT32 BootVarNum,
  163. IN UINT32 Selection,
  164. OUT char* OptionalDataValue
  165. );
  166. BOOLEAN
  167. GetOsLoadOptionVars(
  168. IN UINT32 BootVarNum,
  169. OUT CHAR16* LoadIdentifier,
  170. OUT char* OsLoadOptions,
  171. OUT char* EfiFilePath,
  172. OUT char* OsFilePath
  173. );
  174. VOID
  175. PackLoadOption(
  176. IN UINT32 BootVarNum,
  177. IN CHAR16* LoadIdentifier,
  178. IN CHAR16* OsLoadOptions,
  179. IN char* EfiFilePath,
  180. IN UINT16 EfiFilePathLength,
  181. IN char* OsLoadPath,
  182. IN UINT16 OsLoadPathLength
  183. );
  184. VOID
  185. SetFieldFromLoadOption(
  186. IN UINT32 BootVarNum,
  187. IN UINT32 FieldType,
  188. IN VOID* Data
  189. );
  190. VOID
  191. GetFieldFromLoadOption(
  192. IN UINT32 OptionNum,
  193. IN UINT32 FieldType,
  194. OUT VOID* Data,
  195. OUT UINT64* DataSize
  196. );
  197. VOID
  198. FreeBootManagerVars(
  199. );
  200. BOOLEAN
  201. CopyVar(
  202. IN UINT32 VarNum
  203. );
  204. VOID
  205. SetBootManagerVars(
  206. );
  207. VOID
  208. GetFilePathShort(
  209. EFI_DEVICE_PATH *FilePath,
  210. CHAR16 *FilePathShort
  211. );
  212. VOID
  213. GetDiskGuidFromPath(
  214. EFI_DEVICE_PATH *FilePath,
  215. EFI_GUID *DiskGuid
  216. );
  217. UINT16
  218. SetFilePathFromShort(
  219. EFI_DEVICE_PATH *FilePath,
  220. CHAR16* FilePathShort
  221. );
  222. UINTN
  223. GetDevPathSize(
  224. IN EFI_DEVICE_PATH *DevPath
  225. );
  226. CHAR16
  227. FindFreeBootOption(
  228. );
  229. UINT32
  230. GetPartitions(
  231. );
  232. EFI_HANDLE
  233. GetDeviceHandleForPartition(
  234. );
  235. VOID
  236. DisplayOsOptions(
  237. char* osOptions
  238. );
  239. BOOLEAN
  240. isWindowsOsBootOption(
  241. char* elo,
  242. UINT64 eloSize
  243. );
  244. char*
  245. GetAlignedOsOptions(
  246. char* elo,
  247. UINT64 eloSize
  248. );