Наследование: WinBioRegistryKeyBase
Пример #1
0
 /// <summary>
 /// Adds a new biometric database compatible to the given unit.
 /// Throws an exception if the database already exists.
 /// </summary>
 public static void AddDatabase(Guid databaseId, int unitId)
 {
     // throw exception if the database already exists
     var databases = WinBio.EnumDatabases(WinBioBiometricType.Fingerprint);
     if (databases.Any(_ => _.DatabaseId == databaseId))
     {
         throw new WinBioException(string.Format("Database already exists: {0}", databaseId));
     }
     // get first system sensor config for the given unitId
     var unitSchema = WinBio.EnumBiometricUnits(WinBioBiometricType.Fingerprint).Single(_ => _.UnitId == unitId);
     var unitName = string.Format(UnitKeyName, unitSchema.DeviceInstanceId);
     WinBioSensorKey systemSensorConfig = null;
     using (var unitKey = Registry.LocalMachine.OpenSubKey(unitName, true))
     {
         if (unitKey == null) throw new Exception("wtf");
         foreach (var confName in unitKey.GetSubKeyNames())
         {
             int number;
             if (!int.TryParse(confName, out number)) continue;
             var config = new WinBioSensorKey();
             using (var confKey = unitKey.OpenSubKey(confName))
             {
                 config.Read(confKey);
             }
             if (config.SystemSensor == 1)
             {
                 systemSensorConfig = config;
                 break;
             }
         }
     }
     if (systemSensorConfig == null) throw new Exception("dafuq");
     // get the corresponding database
     var database = databases.Single(_ => _.DatabaseId == systemSensorConfig.DatabaseId);
     // create new compatible database
     var newDatabase = new WinBioDatabaseKey(database);
     // write database configuration to registry
     using (var databasesKey = Registry.LocalMachine.OpenSubKey(DatabaseKeyName, true))
     {
         if (databasesKey == null) throw new Exception("wat?");
         using (var newKey = databasesKey.CreateSubKey(KeyGuid(databaseId)))
         {
             newDatabase.Write(newKey);
         }
     }
 }
Пример #2
0
 /// <summary>
 /// Adds a unit to the sensor pool related to the given biometric database.
 /// </summary>
 public static void AddUnit(Guid databaseId, int unitId)
 {
     var unitSchema = WinBio.EnumBiometricUnits(WinBioBiometricType.Fingerprint).Single(_ => _.UnitId == unitId);
     var unitName = string.Format(UnitKeyName, unitSchema.DeviceInstanceId);
     var highest = -1;
     WinBioSensorKey newConfig = null;
     using (var unitKey = Registry.LocalMachine.OpenSubKey(unitName, true))
     {
         if (unitKey == null) throw new Exception("wtf");
         foreach (var confName in unitKey.GetSubKeyNames())
         {
             int number;
             if (!int.TryParse(confName, out number)) continue;
             if (number > highest) highest = number;
             if (newConfig != null) continue;
             var config = new WinBioSensorKey();
             using (var confKey = unitKey.OpenSubKey(confName))
             {
                 config.Read(confKey);
             }
             if (config.SystemSensor == 1)
             {
                 newConfig = config;
             }
         }
         if (newConfig == null || highest < 0) throw new Exception("dafuq");
         // write to registry at the next highest free number
         highest++;
         newConfig.DatabaseId = databaseId;
         newConfig.SystemSensor = 0;
         using (var confKey = unitKey.CreateSubKey(highest.ToString()))
         {
             newConfig.Write(confKey);
         }
     }
 }
Пример #3
0
 /// <summary>
 /// Adds a unit to the sensor pool related to the given biometric database.
 /// </summary>
 public static void RemoveUnit(Guid databaseId, int unitId)
 {
     var unitSchema = WinBio.EnumBiometricUnits(WinBioBiometricType.Fingerprint).Single(_ => _.UnitId == unitId);
     var unitName = string.Format(UnitKeyName, unitSchema.DeviceInstanceId);
     using (var unitKey = Registry.LocalMachine.OpenSubKey(unitName, true))
     {
         if (unitKey == null) throw new Exception("wtf");
         foreach (var confName in unitKey.GetSubKeyNames())
         {
             int number;
             if (!int.TryParse(confName, out number)) continue;
             var config = new WinBioSensorKey();
             using (var confKey = unitKey.OpenSubKey(confName))
             {
                 config.Read(confKey);
             }
             // there should be only one but we will remove all anyway
             if (config.DatabaseId == databaseId)
             {
                 unitKey.DeleteSubKey(confName);
             }
         }
     }
 }
Пример #4
0
 /// <summary>
 /// Removes the given biometric database and all its data.
 /// Also removes all units from the corresponding sensor pool.
 /// </summary>
 public static void RemoveDatabase(Guid databaseId)
 {
     // find database, throws if not found
     var database = WinBio.EnumDatabases(WinBioBiometricType.Fingerprint).Single(_ => _.DatabaseId == databaseId);
     // delete template file, throws if not authorized
     File.Delete(database.FilePath);
     // erase sensor configurations for this database
     foreach (var unitSchema in WinBio.EnumBiometricUnits(WinBioBiometricType.Fingerprint))
     {
         var unitName = string.Format(UnitKeyName, unitSchema.DeviceInstanceId);
         using (var unitKey = Registry.LocalMachine.OpenSubKey(unitName, true))
         {
             if (unitKey == null) continue;
             foreach (var confName in unitKey.GetSubKeyNames())
             {
                 int number;
                 if (!int.TryParse(confName, out number)) continue;
                 var config = new WinBioSensorKey();
                 using (var confKey = unitKey.OpenSubKey(confName))
                 {
                     config.Read(confKey);
                 }
                 if (config.DatabaseId == databaseId)
                 {
                     unitKey.DeleteSubKey(confName);
                 }
             }
         }
     }
     // erase database configuration from registry
     using (var databasesKey = Registry.LocalMachine.OpenSubKey(DatabaseKeyName, true))
     {
         if (databasesKey == null) throw new Exception("wat?");
         databasesKey.DeleteSubKey(KeyGuid(databaseId));
     }
 }