+ EFI_TPL CurrentTpl;\r
+ LIST_ENTRY *Node;\r
+ UINT32 Index;\r
+\r
+ CurrentTpl = gBS->RaiseTPL (TPL_HIGH_LEVEL);\r
+\r
+ if (!IsListEmpty (&mRecordsBuffer)) {\r
+ Node = GetFirstNode (&mRecordsBuffer);\r
+ RemoveEntryList (Node);\r
+\r
+ Record = _CR (Node, DATAHUB_STATUSCODE_RECORD, Node);\r
+ } else {\r
+ if (CurrentTpl > TPL_NOTIFY) {\r
+ gBS->RestoreTPL (CurrentTpl);\r
+ return NULL;\r
+ }\r
+\r
+ gBS->RestoreTPL (CurrentTpl);\r
+ Record = (DATAHUB_STATUSCODE_RECORD *) AllocateZeroPool (sizeof (DATAHUB_STATUSCODE_RECORD) * 16);\r
+ if (NULL == Record) {\r
+ return NULL;\r
+ }\r