/// <summary>
 /// 
 /// </summary>
 public void startFingerprint(FingerprintConfig pConfig)
 {
   cInfrastructure.startFingerprint(pConfig);
 }
    /// <summary>
    /// 
    /// </summary>
    public void startFingerprint(FingerprintConfig pConfig)
    {
      if (!File.Exists(cNmapBin))
        throw new Exception("Nmap binary not found");

      if (pConfig == null)
        throw new Exception("Something is wrong with the configuration parameters");

      if (String.IsNullOrEmpty(pConfig.IP))
        throw new Exception("Something is wrong with the target IP address");

      cProcStopRequested = false;
      cFingerprintConf = pConfig;
      cXMLMACAddress = pConfig.MAC;
      cXMLOutputFile = Path.GetTempFileName();

      cNmapProc = new Process();
      cNmapProc.StartInfo.FileName = cNmapBin;
      cNmapProc.StartInfo.Arguments = String.Format(cNmapParameters, pConfig.IP, cXMLOutputFile);
      cNmapProc.StartInfo.UseShellExecute = false;
      cNmapProc.StartInfo.CreateNoWindow = pConfig.IsDebuggingOn ? false : true;
      cNmapProc.StartInfo.WindowStyle = pConfig.IsDebuggingOn ? ProcessWindowStyle.Normal : ProcessWindowStyle.Hidden;
      cNmapProc.EnableRaisingEvents = true;

      // Configure the process exited event
      cNmapProc.Exited += onNmapScanExited;
      cNmapProc.Disposed += onNmapScanExited;

      cNmapProc.Start();
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void BGW_Scanner_DoWork(object sender, DoWorkEventArgs e)
    {
      PGB_Systems.Minimum = 0;
      PGB_Systems.Maximum = mTargetSystems.Count;

      mFingerprintStatus.CurrentIndexNo = 0;
      mFingerprintStatus.MaxIndex = mTargetSystems.Count;


      foreach (ScanSystem lTmp in mTargetSystems)
      {                 
        mFingerprintingFinished.Reset();
        SystemFingerprint.TaskFacadeFingerprint lTaskFacadeFingerprint = SystemFingerprint.TaskFacadeFingerprint.getInstance();

        mFingerprintStatus.CurrentIndexNo++;
        mFingerprintStatus.CurrentSystemIP = lTmp.TargetIP;
        mFingerprintStatus.CurrentSystemMAC = lTmp.TargetMAC;

        incrementProgress(mFingerprintStatus);


        if (!BGW_Scanner.CancellationPending)
        {
          FingerprintConfig lConfig = new FingerprintConfig()
          {
            IP = lTmp.TargetIP,
            MAC = lTmp.TargetMAC,
            OnScanStopped = FingerprintStoppedCallback,
            IsDebuggingOn = Debugging.IsDebuggingOn()
          };

          
          try
          {
              lTaskFacadeFingerprint.startFingerprint(lConfig);
          }
          catch (Exception lEx)
          {
              try { stopFingerprintingProcess(); }
              catch (Exception) { }

              LogConsole.Main.LogConsole.LogInstance.LogMessage(String.Format("ScanMultipleSystems: {0}", lEx.Message));
              MessageBox.Show(String.Format("The following error occurred: {0}", lEx.Message));
              break;
          }


          try
          {
            mFingerprintingFinished.WaitOne(30 * 1000);
          }
          catch (Exception lEx)
          {
            MessageBox.Show(String.Format("scan ({0}) aborted: {1}", lTmp.TargetIP, lEx.Message));
          }
        } // if (BGW_Sca...
      } // foreach (Scan...

      mFingerprintStatus.CurrentSystemIP = String.Empty;
      mFingerprintStatus.CurrentSystemMAC = String.Empty;
      incrementProgress(mFingerprintStatus);

      if (!BGW_Scanner.CancellationPending)
        stopFingerprintingProcess();
    }