2013-07-17 5 views

답변

3

주의해야합니다.

아마도 알고 계시 겠지만 UEFI LoadedImage 프로토콜이 있습니다.이 프로토콜은 EFI_LOADED_IMAGE이라는 구조를 반환하며이 구조는 다시 LoadOptions입니다.

UEFI 셸은이 LoadOptions 변수를 사용자가 명령 줄에 입력 한 값으로 설정합니다. 또는,주의가 필요한 BootOptions EFI 변수를 통해이를 설정할 수 있다고 생각합니다. 첫 번째 인수는이 경우 프로세스 경로가 아닙니다.

그래서 당신이해야 할 일은 당신이 원하는 "논증"을 추론 할 수있는 하나의 긴 문자열을 처리하는 것입니다.

LoadedImage 프로토콜을 사용하려면 다음을 수행하십시오

loaded_image->LoadOptionsSize; 

이 유의하십시오

EFI_STATUS status = EFI_SUCCESS; 
EFI_LOADED_IMAGE* loaded_image; 
EFI_GUID loaded_image_protocol = LOADED_IMAGE_PROTOCOL; 
status = gBS->HandleProtocol(ImageHandle, 
          &loaded_image_protocol, 
          (void**) &loaded_image); 

당신은 다음에 의해 전달 된 (0 - 종료) 문자열의 길이를 얻을 수 있습니다 길이가 아닌 바이트 단위의 크기입니다. 이를 위해, 당신이 라이브러리 기능을 사용할 수 있습니다

CHAR16* CommandLineArgs = (CHAR16 *)li->LoadOptions; 

는 쉘이 말하는 프로토콜을 결정하는 무료로 사용할 수있는 UEFI Shell Specification가 마지막으로

LoadOptionsLength = StrLen((CHAR16 *)li->LoadOptions); 

을 실제 문자열 자체에서 사용할 수 있습니다. 당신은 실제로 그것과 직접 대화 할 수 있습니다, 그러나 나는 아직 그것을 실험하고 있습니다.

0

UEFI_SHELL 2.0 사양 55 페이지에서 EFI_SHELL_PARAMETERS_PROTOCOL의 세부 정보를 찾을 수 있습니다. handleprotocol()을 사용하여 프로토콜 인터페이스의 주소를 가져옵니다. 입력시 rcx에서 얻은 이미지 핸들을 전달할 수 있습니다. 프로토콜 구조는 매개 변수의 수와 매개 변수 포인터 목록에 대한 포인터를 제공합니다. 매개 변수는 0으로 끝나는 ucs2 문자열입니다. 첫 번째 매개 변수는 이미지가로드 된 경로입니다. 매개 변수 주위의 공백 분리 기호 및 큰 따옴표가 제거됩니다. (주의 : 큰 따옴표는 일치하지 않습니다!) 매개 변수의 수 또는 크기에 제한이 있는지 알 수 없습니다. 20 개의 긴 매개 변수로 테스트 한 결과 괜찮 았습니다.