This repository was archived by the owner on Nov 14, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathOpenFirstIsoFileInDir.c
More file actions
52 lines (51 loc) · 2.23 KB
/
OpenFirstIsoFileInDir.c
File metadata and controls
52 lines (51 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "MyRamDisk.h"
///搜索并启动任意根目录的第一个iso文件,兼容pxe
EFI_FILE_HANDLE
OpenFirstIsoFileInDir(
IN EFI_FILE_HANDLE DirToSearch
)
{
EFI_STATUS Status;
EFI_FILE_INFO *DidoFileInfoBuffer=NULL;
BOOLEAN FoundIsoFile=FALSE;
BOOLEAN DirHaveNoFile=FALSE;
EFI_FILE_PROTOCOL *DidoFileHandle=NULL;
UINTN StringLenth;
Print(L"Searching iso file in current dir\n");
//找到根目录第一个iso文件
Status=FileHandleFindFirstFile(DirToSearch,&DidoFileInfoBuffer);
StringLenth=StrLen(DidoFileInfoBuffer->FileName);
if( StringLenth>=5&&
(DidoFileInfoBuffer->FileName[StringLenth-4]==L'.'||DidoFileInfoBuffer->FileName[StringLenth-4]==L'.')&&
(DidoFileInfoBuffer->FileName[StringLenth-3]==L'i'||DidoFileInfoBuffer->FileName[StringLenth-3]==L'I')&&
(DidoFileInfoBuffer->FileName[StringLenth-2]==L's'||DidoFileInfoBuffer->FileName[StringLenth-2]==L'S')&&
(DidoFileInfoBuffer->FileName[StringLenth-1]==L'o'||DidoFileInfoBuffer->FileName[StringLenth-1]==L'O')){
FoundIsoFile=TRUE;
}
while(FALSE==FoundIsoFile){
Status=FileHandleFindNextFile (DirToSearch,DidoFileInfoBuffer,&DirHaveNoFile);
if(DirHaveNoFile){
break;
}
StringLenth=StrLen(DidoFileInfoBuffer->FileName);
if( StringLenth>=5&&
(DidoFileInfoBuffer->FileName[StringLenth-4]==L'.'||DidoFileInfoBuffer->FileName[StringLenth-4]==L'.')&&
(DidoFileInfoBuffer->FileName[StringLenth-3]==L'i'||DidoFileInfoBuffer->FileName[StringLenth-3]==L'I')&&
(DidoFileInfoBuffer->FileName[StringLenth-2]==L's'||DidoFileInfoBuffer->FileName[StringLenth-2]==L'S')&&
(DidoFileInfoBuffer->FileName[StringLenth-1]==L'o'||DidoFileInfoBuffer->FileName[StringLenth-1]==L'O')){
FoundIsoFile=TRUE;
break;
}
}
if(TRUE==FoundIsoFile){
Print(L"Found iso file:%s\n",DidoFileInfoBuffer->FileName);
Status=DirToSearch->Open(DirToSearch,&DidoFileHandle,DidoFileInfoBuffer->FileName,EFI_FILE_MODE_READ,EFI_FILE_READ_ONLY);
if(EFI_SUCCESS==Status){
return DidoFileHandle;
}
}
//如果找到iso文件则释放临时内存
if(NULL!=DidoFileInfoBuffer)gBS->FreePool(DidoFileInfoBuffer);
Print(L"Can not find iso file in current directory\n");
return NULL;
}