Changeset 91685 in vbox for trunk/src/VBox/Frontends
- Timestamp:
- Oct 12, 2021 9:26:59 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 147413
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyNvram.cpp
r91617 r91685 289 289 290 290 /** 291 * Handles the 'modifynvram myvm deletevar' sub-command. 292 * @returns Exit code. 293 * @param a The handler argument package. 294 * @param nvram Reference to the NVRAM store interface. 295 */ 296 static RTEXITCODE handleModifyNvramDeleteUefiVar(HandlerArg *a, ComPtr<INvramStore> &nvramStore) 297 { 298 static const RTGETOPTDEF s_aOptions[] = 299 { 300 /* common options */ 301 { "--name", 'n', RTGETOPT_REQ_STRING }, 302 { "--owner-uuid", 'f', RTGETOPT_REQ_STRING } 303 }; 304 305 const char *pszVarName = NULL; 306 const char *pszOwnerUuid = NULL; 307 308 RTGETOPTSTATE GetState; 309 int vrc = RTGetOptInit(&GetState, a->argc - 2, &a->argv[2], s_aOptions, RT_ELEMENTS(s_aOptions), 0, 0); 310 AssertRCReturn(vrc, RTEXITCODE_FAILURE); 311 312 int c; 313 RTGETOPTUNION ValueUnion; 314 while ((c = RTGetOpt(&GetState, &ValueUnion)) != 0) 315 { 316 switch (c) 317 { 318 case 'n': 319 pszVarName = ValueUnion.psz; 320 break; 321 case 'f': 322 pszOwnerUuid = ValueUnion.psz; 323 break; 324 default: 325 return errorGetOpt(c, &ValueUnion); 326 } 327 } 328 329 if (!pszVarName) 330 return errorSyntax("No variable name was given to \"deletevar\""); 331 if (!pszOwnerUuid) 332 return errorSyntax("No owner UUID was given to \"deletevar\""); 333 334 ComPtr<IUefiVariableStore> uefiVarStore; 335 CHECK_ERROR2I_RET(nvramStore, COMGETTER(UefiVariableStore)(uefiVarStore.asOutParam()), RTEXITCODE_FAILURE); 336 CHECK_ERROR2I_RET(uefiVarStore, DeleteVariable(Bstr(pszVarName).raw(), Bstr(pszOwnerUuid).raw()), RTEXITCODE_FAILURE); 337 338 return RTEXITCODE_SUCCESS; 339 } 340 341 342 /** 343 * Handles the 'modifynvram myvm changevar' sub-command. 344 * @returns Exit code. 345 * @param a The handler argument package. 346 * @param nvram Reference to the NVRAM store interface. 347 */ 348 static RTEXITCODE handleModifyNvramChangeUefiVar(HandlerArg *a, ComPtr<INvramStore> &nvramStore) 349 { 350 static const RTGETOPTDEF s_aOptions[] = 351 { 352 /* common options */ 353 { "--name", 'n', RTGETOPT_REQ_STRING }, 354 { "--filename", 'f', RTGETOPT_REQ_STRING } 355 }; 356 357 const char *pszVarName = NULL; 358 const char *pszVarDataFilename = NULL; 359 360 RTGETOPTSTATE GetState; 361 int vrc = RTGetOptInit(&GetState, a->argc - 2, &a->argv[2], s_aOptions, RT_ELEMENTS(s_aOptions), 0, 0); 362 AssertRCReturn(vrc, RTEXITCODE_FAILURE); 363 364 int c; 365 RTGETOPTUNION ValueUnion; 366 while ((c = RTGetOpt(&GetState, &ValueUnion)) != 0) 367 { 368 switch (c) 369 { 370 case 'n': 371 pszVarName = ValueUnion.psz; 372 break; 373 case 'f': 374 pszVarDataFilename = ValueUnion.psz; 375 break; 376 default: 377 return errorGetOpt(c, &ValueUnion); 378 } 379 } 380 381 if (!pszVarName) 382 return errorSyntax("No variable name was given to \"changevar\""); 383 if (!pszVarDataFilename) 384 return errorSyntax("No variable data filename was given to \"changevar\""); 385 386 RTFILE hFile = NIL_RTFILE; 387 RTEXITCODE rcExit = RTEXITCODE_SUCCESS; 388 vrc = RTFileOpen(&hFile, pszVarDataFilename, RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_NONE); 389 if (RT_SUCCESS(vrc)) 390 { 391 uint64_t cbFile = 0; 392 vrc = RTFileQuerySize(hFile, &cbFile); 393 if (RT_SUCCESS(vrc)) 394 { 395 com::SafeArray<BYTE> aData; 396 aData.resize(cbFile); 397 398 vrc = RTFileRead(hFile, aData.raw(), aData.size(), NULL /*pcbRead*/); 399 RTFileClose(hFile); 400 401 if (RT_SUCCESS(vrc)) 402 { 403 ComPtr<IUefiVariableStore> uefiVarStore; 404 CHECK_ERROR2I_RET(nvramStore, COMGETTER(UefiVariableStore)(uefiVarStore.asOutParam()), RTEXITCODE_FAILURE); 405 CHECK_ERROR2I_RET(uefiVarStore, ChangeVariable(Bstr(pszVarName).raw(), ComSafeArrayAsInParam(aData)), RTEXITCODE_FAILURE); 406 } 407 else 408 rcExit = RTMsgErrorExitFailure("Error reading from '%s': %Rrc", pszVarDataFilename, vrc); 409 } 410 } 411 else 412 rcExit = RTMsgErrorExitFailure("Error opening '%s': %Rrc", pszVarDataFilename, vrc); 413 414 return rcExit; 415 } 416 417 418 /** 291 419 * Handles the 'modifynvram' command. 292 420 * @returns Exit code. … … 344 472 rc = handleModifyNvramQueryUefiVar(a, nvramStore) == RTEXITCODE_SUCCESS ? S_OK : E_FAIL; 345 473 } 474 else if (!strcmp(a->argv[1], "deletevar")) 475 { 476 setCurrentSubcommand(HELP_SCOPE_MODIFYNVRAM_DELETEVAR); 477 rc = handleModifyNvramDeleteUefiVar(a, nvramStore) == RTEXITCODE_SUCCESS ? S_OK : E_FAIL; 478 } 479 else if (!strcmp(a->argv[1], "changevar")) 480 { 481 setCurrentSubcommand(HELP_SCOPE_MODIFYNVRAM_CHANGEVAR); 482 rc = handleModifyNvramChangeUefiVar(a, nvramStore) == RTEXITCODE_SUCCESS ? S_OK : E_FAIL; 483 } 346 484 else 347 485 return errorUnknownSubcommand(a->argv[0]);
Note:
See TracChangeset
for help on using the changeset viewer.