25 IN VARIABLE_HEADER *Variable,
26 IN VARIABLE_HEADER *VariableStoreEnd
29 if ((Variable == NULL) || (Variable >= VariableStoreEnd) || (Variable->StartId != VARIABLE_DATA)) {
53 IN VARIABLE_STORE_HEADER *VarStoreHeader
56 if ((
CompareGuid (&VarStoreHeader->Signature, &gEfiAuthenticatedVariableGuid) ||
57 CompareGuid (&VarStoreHeader->Signature, &gEfiVariableGuid)) &&
58 (VarStoreHeader->Format == VARIABLE_STORE_FORMATTED) &&
59 (VarStoreHeader->State == VARIABLE_STORE_HEALTHY)
63 }
else if ((((UINT32 *)(&VarStoreHeader->Signature))[0] == 0xffffffff) &&
64 (((UINT32 *)(&VarStoreHeader->Signature))[1] == 0xffffffff) &&
65 (((UINT32 *)(&VarStoreHeader->Signature))[2] == 0xffffffff) &&
66 (((UINT32 *)(&VarStoreHeader->Signature))[3] == 0xffffffff) &&
67 (VarStoreHeader->Size == 0xffffffff) &&
68 (VarStoreHeader->Format == 0xff) &&
69 (VarStoreHeader->State == 0xff)
95 Value =
sizeof (AUTHENTICATED_VARIABLE_HEADER);
97 Value =
sizeof (VARIABLE_HEADER);
116 IN VARIABLE_HEADER *Variable,
117 IN BOOLEAN AuthFormat
120 AUTHENTICATED_VARIABLE_HEADER *AuthVariable;
122 AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *)Variable;
124 if ((AuthVariable->State == (UINT8)(-1)) ||
125 (AuthVariable->DataSize == (UINT32)(-1)) ||
126 (AuthVariable->NameSize == (UINT32)(-1)) ||
127 (AuthVariable->Attributes == (UINT32)(-1)))
132 return (UINTN)AuthVariable->NameSize;
134 if ((Variable->State == (UINT8)(-1)) ||
135 (Variable->DataSize == (UINT32)(-1)) ||
136 (Variable->NameSize == (UINT32)(-1)) ||
137 (Variable->Attributes == (UINT32)(-1)))
142 return (UINTN)Variable->NameSize;
157 IN VARIABLE_HEADER *Variable,
159 IN BOOLEAN AuthFormat
162 AUTHENTICATED_VARIABLE_HEADER *AuthVariable;
164 AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *)Variable;
166 AuthVariable->NameSize = (UINT32)NameSize;
168 Variable->NameSize = (UINT32)NameSize;
185 IN VARIABLE_HEADER *Variable,
186 IN BOOLEAN AuthFormat
189 AUTHENTICATED_VARIABLE_HEADER *AuthVariable;
191 AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *)Variable;
193 if ((AuthVariable->State == (UINT8)(-1)) ||
194 (AuthVariable->DataSize == (UINT32)(-1)) ||
195 (AuthVariable->NameSize == (UINT32)(-1)) ||
196 (AuthVariable->Attributes == (UINT32)(-1)))
201 return (UINTN)AuthVariable->DataSize;
203 if ((Variable->State == (UINT8)(-1)) ||
204 (Variable->DataSize == (UINT32)(-1)) ||
205 (Variable->NameSize == (UINT32)(-1)) ||
206 (Variable->Attributes == (UINT32)(-1)))
211 return (UINTN)Variable->DataSize;
226 IN VARIABLE_HEADER *Variable,
228 IN BOOLEAN AuthFormat
231 AUTHENTICATED_VARIABLE_HEADER *AuthVariable;
233 AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *)Variable;
235 AuthVariable->DataSize = (UINT32)DataSize;
237 Variable->DataSize = (UINT32)DataSize;
254 IN VARIABLE_HEADER *Variable,
255 IN BOOLEAN AuthFormat
273 IN VARIABLE_HEADER *Variable,
274 IN BOOLEAN AuthFormat
277 AUTHENTICATED_VARIABLE_HEADER *AuthVariable;
279 AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *)Variable;
281 return &AuthVariable->VendorGuid;
283 return &Variable->VendorGuid;
300 IN VARIABLE_HEADER *Variable,
301 IN BOOLEAN AuthFormat
313 return (UINT8 *)Value;
328 IN VARIABLE_HEADER *Variable,
329 IN BOOLEAN AuthFormat
357 IN VARIABLE_HEADER *Variable,
358 IN BOOLEAN AuthFormat
370 return (VARIABLE_HEADER *)HEADER_ALIGN (Value);
384 IN VARIABLE_STORE_HEADER *VarStoreHeader
390 return (VARIABLE_HEADER *)HEADER_ALIGN (VarStoreHeader + 1);
407 IN VARIABLE_STORE_HEADER *VarStoreHeader
413 return (VARIABLE_HEADER *)HEADER_ALIGN ((UINTN)VarStoreHeader + VarStoreHeader->Size);
429 IN EFI_TIME *FirstTime,
430 IN EFI_TIME *SecondTime
433 if (FirstTime->Year != SecondTime->Year) {
434 return (BOOLEAN)(FirstTime->Year < SecondTime->Year);
435 }
else if (FirstTime->Month != SecondTime->Month) {
436 return (BOOLEAN)(FirstTime->Month < SecondTime->Month);
437 }
else if (FirstTime->Day != SecondTime->Day) {
438 return (BOOLEAN)(FirstTime->Day < SecondTime->Day);
439 }
else if (FirstTime->Hour != SecondTime->Hour) {
440 return (BOOLEAN)(FirstTime->Hour < SecondTime->Hour);
441 }
else if (FirstTime->Minute != SecondTime->Minute) {
442 return (BOOLEAN)(FirstTime->Minute < SecondTime->Minute);
445 return (BOOLEAN)(FirstTime->Second <= SecondTime->Second);
464 IN CHAR16 *VariableName,
465 IN EFI_GUID *VendorGuid,
466 IN BOOLEAN IgnoreRtCheck,
468 IN BOOLEAN AuthFormat
471 VARIABLE_HEADER *InDeletedVariable;
474 PtrTrack->InDeletedTransitionPtr = NULL;
479 InDeletedVariable = NULL;
481 for ( PtrTrack->CurrPtr = PtrTrack->StartPtr
486 if ((PtrTrack->CurrPtr->State == VAR_ADDED) ||
487 (PtrTrack->CurrPtr->State == (VAR_IN_DELETED_TRANSITION & VAR_ADDED))
490 if (IgnoreRtCheck || !
AtRuntime () || ((PtrTrack->CurrPtr->Attributes & EFI_VARIABLE_RUNTIME_ACCESS) != 0)) {
491 if (VariableName[0] == 0) {
492 if (PtrTrack->CurrPtr->State == (VAR_IN_DELETED_TRANSITION & VAR_ADDED)) {
493 InDeletedVariable = PtrTrack->CurrPtr;
495 PtrTrack->InDeletedTransitionPtr = InDeletedVariable;
504 if (PtrTrack->CurrPtr->State == (VAR_IN_DELETED_TRANSITION & VAR_ADDED)) {
505 InDeletedVariable = PtrTrack->CurrPtr;
507 PtrTrack->InDeletedTransitionPtr = InDeletedVariable;
517 PtrTrack->CurrPtr = InDeletedVariable;
518 return (PtrTrack->CurrPtr == NULL) ? EFI_NOT_FOUND : EFI_SUCCESS;
545 IN CHAR16 *VariableName,
546 IN EFI_GUID *VendorGuid,
547 IN VARIABLE_STORE_HEADER **VariableStoreList,
548 OUT VARIABLE_HEADER **VariablePtr,
549 IN BOOLEAN AuthFormat
558 Status = EFI_NOT_FOUND;
560 if (VariableStoreList == NULL) {
561 return EFI_INVALID_PARAMETER;
564 ZeroMem (&Variable,
sizeof (Variable));
568 if (VariableStoreList[StoreType] == NULL) {
576 Status =
FindVariableEx (VariableName, VendorGuid, FALSE, &Variable, AuthFormat);
577 if (!EFI_ERROR (Status)) {
582 if ((Variable.
CurrPtr == NULL) || EFI_ERROR (Status)) {
588 if (VariableName[0] != 0) {
594 Status = EFI_INVALID_PARAMETER;
600 if (VariableName[0] != 0) {
616 if ((VariableStoreList[StoreType] != NULL) && (Variable.
StartPtr ==
GetStartPointer (VariableStoreList[StoreType]))) {
626 if (VariableStoreList[StoreType] != NULL) {
637 Status = EFI_NOT_FOUND;
649 if ((Variable.
CurrPtr->State == VAR_ADDED) || (Variable.
CurrPtr->State == (VAR_IN_DELETED_TRANSITION & VAR_ADDED))) {
650 if (!
AtRuntime () || ((Variable.
CurrPtr->Attributes & EFI_VARIABLE_RUNTIME_ACCESS) != 0)) {
651 if (Variable.
CurrPtr->State == (VAR_IN_DELETED_TRANSITION & VAR_ADDED)) {
666 if (!EFI_ERROR (Status) && (VariablePtrTrack.
CurrPtr->State == VAR_ADDED)) {
688 if (!EFI_ERROR (Status)) {
694 *VariablePtr = Variable.
CurrPtr;
695 Status = EFI_SUCCESS;
730 IN CHAR16 *VariableName,
731 IN EFI_GUID *VendorGuid,
737 IN OUT VARIABLE_INFO_ENTRY **VariableInfo
740 VARIABLE_INFO_ENTRY *Entry;
742 if (FeaturePcdGet (PcdVariableCollectStatistics)) {
743 if ((VariableName == NULL) || (VendorGuid == NULL) || (VariableInfo == NULL)) {
752 if (*VariableInfo == NULL) {
757 *VariableInfo = AllocateZeroPool (
sizeof (VARIABLE_INFO_ENTRY));
758 ASSERT (*VariableInfo != NULL);
760 CopyGuid (&(*VariableInfo)->VendorGuid, VendorGuid);
761 (*VariableInfo)->Name = AllocateZeroPool (StrSize (VariableName));
762 ASSERT ((*VariableInfo)->Name != NULL);
763 StrCpyS ((*VariableInfo)->Name, StrSize (VariableName)/
sizeof (CHAR16), VariableName);
764 (*VariableInfo)->Volatile = Volatile;
767 for (Entry = (*VariableInfo); Entry != NULL; Entry = Entry->Next) {
768 if (
CompareGuid (VendorGuid, &Entry->VendorGuid)) {
769 if (StrCmp (VariableName, Entry->Name) == 0) {
779 Entry->DeleteCount++;
790 if (Entry->Next == NULL) {
795 Entry->Next = AllocateZeroPool (
sizeof (VARIABLE_INFO_ENTRY));
796 ASSERT (Entry->Next != NULL);
798 CopyGuid (&Entry->Next->VendorGuid, VendorGuid);
799 Entry->Next->Name = AllocateZeroPool (StrSize (VariableName));
800 ASSERT (Entry->Next->Name != NULL);
801 StrCpyS (Entry->Next->Name, StrSize (VariableName)/
sizeof (CHAR16), VariableName);
802 Entry->Next->Volatile = Volatile;
STATIC EFI_STATUS Read(IN EFI_NTFS_FILE *File, OUT VOID *Data, IN UINTN *Size)
INTN EFIAPI CompareMem(IN CONST VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
GUID *EFIAPI CopyGuid(OUT GUID *DestinationGuid, IN CONST GUID *SourceGuid)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
@ VariableStoreTypeVolatile
EFI_GUID * GetVendorGuidPtr(IN VARIABLE_HEADER *Variable, IN BOOLEAN AuthFormat)
VOID SetDataSizeOfVariable(IN VARIABLE_HEADER *Variable, IN UINTN DataSize, IN BOOLEAN AuthFormat)
VARIABLE_HEADER * GetNextVariablePtr(IN VARIABLE_HEADER *Variable, IN BOOLEAN AuthFormat)
VARIABLE_HEADER * GetStartPointer(IN VARIABLE_STORE_HEADER *VarStoreHeader)
UINT8 * GetVariableDataPtr(IN VARIABLE_HEADER *Variable, IN BOOLEAN AuthFormat)
EFI_STATUS EFIAPI VariableServiceGetNextVariableInternal(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, IN VARIABLE_STORE_HEADER **VariableStoreList, OUT VARIABLE_HEADER **VariablePtr, IN BOOLEAN AuthFormat)
VARIABLE_STORE_STATUS GetVariableStoreStatus(IN VARIABLE_STORE_HEADER *VarStoreHeader)
EFI_STATUS FindVariableEx(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, IN BOOLEAN IgnoreRtCheck, IN OUT VARIABLE_POINTER_TRACK *PtrTrack, IN BOOLEAN AuthFormat)
UINTN GetVariableDataOffset(IN VARIABLE_HEADER *Variable, IN BOOLEAN AuthFormat)
BOOLEAN IsValidVariableHeader(IN VARIABLE_HEADER *Variable, IN VARIABLE_HEADER *VariableStoreEnd)
UINTN NameSizeOfVariable(IN VARIABLE_HEADER *Variable, IN BOOLEAN AuthFormat)
VARIABLE_HEADER * GetEndPointer(IN VARIABLE_STORE_HEADER *VarStoreHeader)
VOID SetNameSizeOfVariable(IN VARIABLE_HEADER *Variable, IN UINTN NameSize, IN BOOLEAN AuthFormat)
VOID UpdateVariableInfo(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, IN BOOLEAN Volatile, IN BOOLEAN Read, IN BOOLEAN Write, IN BOOLEAN Delete, IN BOOLEAN Cache, IN OUT VARIABLE_INFO_ENTRY **VariableInfo)
BOOLEAN VariableCompareTimeStampInternal(IN EFI_TIME *FirstTime, IN EFI_TIME *SecondTime)
UINTN DataSizeOfVariable(IN VARIABLE_HEADER *Variable, IN BOOLEAN AuthFormat)
CHAR16 * GetVariableNamePtr(IN VARIABLE_HEADER *Variable, IN BOOLEAN AuthFormat)
UINTN GetVariableHeaderSize(IN BOOLEAN AuthFormat)
VARIABLE_HEADER * CurrPtr
VARIABLE_HEADER * StartPtr