CloverBootloader/CloverApp/Clover/NVRAM.swift
vectorsigma72 b06c4d4d41 Clover.app v1.02 Beta
Clver.app:
Corrected a bug that was causing the installer to fail on unknown drivers.

CloverDaemonNew :
Now is registered with the Power notifications (sleep and wake), so that can clean up nvram.plist files created by third partu kexts.
At shut down it now delete the following nvram keys:
efi-backup-boot-device
efi-backup-boot-device-data
install-product-url
previous-system-uuid

Clover.app promoted to Beta.
2019-11-09 18:03:22 +01:00

76 lines
1.9 KiB
Swift

//
// NVRAM.swift
// Clover
//
// Created by vector sigma on 30/10/2019.
// Copyright © 2019 CloverHackyColor. All rights reserved.
//
import Cocoa
// MARK: "/usr/sbin/nvram"
let nvram_cmd = "/usr/sbin/nvram"
// MARK: Get NVRAM
func getNVRAM() -> NSMutableDictionary? {
var ref: io_registry_entry_t
var masterPort = mach_port_t()
var oResult: kern_return_t
var result: kern_return_t
oResult = IOMasterPort(bootstrap_port, &masterPort)
if oResult != KERN_SUCCESS {
return nil
}
ref = IORegistryEntryFromPath(masterPort, "IODeviceTree:/options")
if ref == 0 {
return nil
}
var dict : Unmanaged<CFMutableDictionary>?
result = IORegistryEntryCreateCFProperties(ref, &dict, kCFAllocatorDefault, 0)
if result != KERN_SUCCESS {
IOObjectRelease(ref)
return nil
}
IOObjectRelease(ref)
return dict?.takeRetainedValue()
}
// MARK: set NVRAM key
@available(OSX 10.10, *)
func setNVRAM(key: String, stringValue: String) {
var cmd : String = "do shell script \""
cmd += "sudo \(nvram_cmd) \(key)=\(stringValue)" // sudo required otherwise wont work!
cmd += "\" with administrator privileges"
DispatchQueue.global(qos: .background).async {
let script: NSAppleScript? = NSAppleScript(source: cmd)
var error : NSDictionary? = nil
script?.executeAndReturnError(&error)
if error != nil {
NSSound.beep()
print(error!.description)
}
}
}
// MARK: delete NVRAM key
@available(OSX 10.10, *)
func deleteNVRAM(key: String) {
var cmd : String = "do shell script \""
cmd += "sudo \(nvram_cmd) -d \(key)" // sudo required otherwise wont work!
cmd += "\" with administrator privileges"
DispatchQueue.global(qos: .background).async {
var error : NSDictionary? = nil
let script: NSAppleScript? = NSAppleScript(source: cmd)
script?.executeAndReturnError(&error)
if error != nil {
NSSound.beep()
print(error!.description)
}
}
}