public RESTStatus ListRKData(SQLLib sql, object dummy, NetworkConnectionInfo ni, string id) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } if (string.IsNullOrWhiteSpace(id) == true) { ni.Error = "Invalid data"; ni.ErrorID = ErrorFlags.InvalidData; return(RESTStatus.NotFound); } lock (ni.sqllock) { if (Computers.MachineExists(sql, id) == false) { ni.Error = "Invalid data"; ni.ErrorID = ErrorFlags.InvalidData; return(RESTStatus.NotFound); } } LstRKData = new BitlockerRKList(); LstRKData.List = new List <BitlockerRK>(); LstRKData.MachineID = id; lock (ni.sqllock) { SqlDataReader dr = sql.ExecSQLReader("SELECT * FROM BitlockerRK WHERE MachineID=@m", new SQLParam("@m", id)); while (dr.Read()) { BitlockerRK rk = new BitlockerRK(); rk.DeviceID = Convert.ToString(dr["DeviceID"]); rk.DriveLetter = Convert.ToString(dr["DriveLetter"]); rk.Reported = SQLLib.GetDTUTC(dr["Reported"]); rk.Keys = JsonConvert.DeserializeObject <List <BitlockerRKKeyElement> >(Convert.ToString(dr["Keys"])); LstRKData.List.Add(rk); } dr.Close(); } return(RESTStatus.Success); }
static List <BitlockerRK> GetRKs() { List <BitlockerRK> lst = new List <BitlockerRK>(); uint Error; ManagementClass mc; try { mc = new ManagementClass("ROOT\\CIMV2\\Security\\MicrosoftVolumeEncryption", "Win32_EncryptableVolume", null); mc.GetInstances(); } catch (Exception ee) { Debug.WriteLine(ee.ToString()); return(null); } foreach (ManagementObject mo in mc.GetInstances()) { BitlockerRK rk = new BitlockerRK(); rk.DeviceID = Convert.ToString(mo["DeviceID"]); rk.DriveLetter = Convert.ToString(mo["DriveLetter"]); rk.Keys = new List <BitlockerRKKeyElement>(); rk.Reported = DateTime.UtcNow; ManagementBaseObject inparams2 = mo.GetMethodParameters("GetKeyProtectors"); inparams2["KeyProtectorType"] = 3; ManagementBaseObject outparams2 = mo.InvokeMethod("GetKeyProtectors", inparams2, null); Error = Convert.ToUInt32(outparams2["returnValue"]); if (Error != 0) { continue; } string[] keys = (string[])outparams2["VolumeKeyProtectorID"]; if (keys == null) { return(null); } foreach (string key in keys) { ManagementBaseObject inparams = mo.GetMethodParameters("GetKeyProtectorNumericalPassword"); inparams["VolumeKeyProtectorID"] = key; ManagementBaseObject outparams = mo.InvokeMethod("GetKeyProtectorNumericalPassword", inparams, null); Error = Convert.ToUInt32(outparams["returnValue"]); if (Error != 0) { return(null); } BitlockerRKKeyElement rkk = new BitlockerRKKeyElement(); rkk.Key = Convert.ToString(outparams["NumericalPassword"]); rkk.VolumeKeyProtectorID = key; rk.Keys.Add(rkk); } lst.Add(rk); } return(lst); }