// Module Globals\r
//\r
\r
-EFI_LOCK mBsExitLock = EFI_INITIALIZE_LOCK_VARIABLE(EFI_TPL_NOTIFY);\r
-EFI_LOCK mBsUnloadImageLock = EFI_INITIALIZE_LOCK_VARIABLE(EFI_TPL_NOTIFY);\r
-\r
LOADED_IMAGE_PRIVATE_DATA *mCurrentImage = NULL;\r
\r
LOAD_PE32_IMAGE_PRIVATE_DATA mLoadPe32PrivateData = {\r
Image->ImageBasePage = DxeCoreImageBaseAddress;\r
Image->NumberOfPages = (UINTN)(EFI_SIZE_TO_PAGES((UINTN)(DxeCoreImageLength)));\r
Image->Tpl = gEfiCurrentTpl;\r
- Image->Info.SystemTable = gST;\r
+ Image->Info.SystemTable = gDxeCoreST;\r
Image->Info.ImageBase = (VOID *)(UINTN)DxeCoreImageBaseAddress;\r
Image->Info.ImageSize = DxeCoreImageLength;\r
\r
// Initialize the fields for an internal driver\r
//\r
Image->Signature = LOADED_IMAGE_PRIVATE_DATA_SIGNATURE;\r
- Image->Info.SystemTable = gST;\r
+ Image->Info.SystemTable = gDxeCoreST;\r
Image->Info.DeviceHandle = DeviceHandle;\r
Image->Info.Revision = EFI_LOADED_IMAGE_INFORMATION_REVISION;\r
Image->Info.FilePath = CoreDuplicateDevicePath (FilePath);\r
--*/\r
{\r
LOADED_IMAGE_PRIVATE_DATA *Image;\r
+ EFI_TPL OldTpl;\r
\r
- EfiAcquireLock (&mBsExitLock);\r
- \r
+ //\r
+ // Prevent possible reentrance to this function\r
+ // for the same ImageHandle\r
+ // \r
+ OldTpl = CoreRaiseTpl (EFI_TPL_NOTIFY); \r
+ \r
Image = CoreLoadedImageInfo (ImageHandle);\r
if (Image == NULL_HANDLE) {\r
Status = EFI_INVALID_PARAMETER;\r
CopyMem (Image->ExitData, ExitData, Image->ExitDataSize);\r
}\r
\r
- EfiReleaseLock (&mBsExitLock);\r
+ CoreRestoreTpl (OldTpl);\r
//\r
// return to StartImage\r
//\r
ASSERT (FALSE);\r
Status = EFI_ACCESS_DENIED;\r
Done:\r
- EfiReleaseLock (&mBsExitLock);\r
+ CoreRestoreTpl (OldTpl);\r
return Status;\r
}\r
\r
{\r
EFI_STATUS Status;\r
LOADED_IMAGE_PRIVATE_DATA *Image;\r
+ EFI_TPL OldTpl;\r
\r
- EfiAcquireLock (&mBsUnloadImageLock);\r
- \r
+ //\r
+ // Prevent possible reentrance to this function\r
+ // for the same ImageHandle\r
+ // \r
+ OldTpl = CoreRaiseTpl (EFI_TPL_NOTIFY);\r
+ \r
Image = CoreLoadedImageInfo (ImageHandle);\r
if (Image == NULL ) {\r
//\r
}\r
\r
Done:\r
- EfiReleaseLock (&mBsUnloadImageLock);\r
+ CoreRestoreTpl (OldTpl);\r
return Status;\r
}\r
\r