Játék a homokozóban – Comodo Antivirus Sandbox

És megint belefutottunk. A Comodo Antivirus “most ezt berakom egy homokozóba, mert szerintem nem biztonságos” művelete egy kicsit idegesítő. A Symbol Ügyvitelt az esetek 15-25%-ában, nem mindig elhelyezi egy virtuális karanténban. Amíg a Norton Antivirus a karanténban nem enged futtatni, addig a Comodo engedi futtatni, de nem engedi hogy hozzáférjen például a temp fájlhoz vagy a globális temp könyvtárhoz.

comodo

Tudom, tudom, hogy a felhasználót figyelmezteti erre valami, de a felhasználó az felhasználó, mindent az OK gombbal old meg. Ezúton hívjuk fel a rendszergazdák figyelmét a Comodo ezen komédiájára.

Ami hiányzik a .NET-ből

Mindig is irigykedtem, hogy sok fejlesztő publikál példa kódokat, amelyek másoknak is jók lehetnek. Most mi is összegyűjtöttünk egy párat, hátha…

 

Tömb összefűzés, rendezési opcióval

public static T[] Concatenate<T>(params T[][] arrays)
{
  return Concatenate<T>(null, arrays);
}
public static T[] Concatenate<T>(Comparison<T> comparison, params T[][] arrays)
{
  List<T> result = new List<T>();
  foreach (T[] array in arrays)
    result.AddRange(array);
  if (comparison != null)
    result.Sort(comparison);
  return result.ToArray();
}


Tömb "egyszeresítés"
public static T[] Distinct<T>(T[] array)
{
  return Distinct(array, null);
}
public static T[] Distinct<T>(T[] array, Comparison<T> comparison)
{
  List<T> result = new List<T>();
  foreach (T item in array)
    if (!result.Contains(item))
  result.Add(item);
  if (comparison != null)
    result.Sort(comparison);
  return result.ToArray();
}


Tömb összekavarás
public static T[] Shuffle<T>(T[] array)
 {
  Random rnd = new Random();
  int n = array.Length;
  while (n > 1)
  {
    int k = rnd.Next(n);
    n--;
    T temp = array[n];
    array[n] = array[k];
    array[k] = temp;
  }
  return array;
 }


Várakoztató kurzor kezelő

public class WaitCursor : IDisposable
{
  public WaitCursor()
  {
    ContextHandler.WaitCursorOn();
  }
  public void Dispose()
  {
    Dispose(true);
    GC.SuppressFinalize(this);
  }
  private bool disposed = false;
  protected virtual void Dispose(bool disposing)
  {
    if (!this.disposed)
    {
      if (disposing)
     {
     }
     ContextHandler.WaitCursorOff();
   }
   disposed = true;
 }
 ~WaitCursor()
 {
   Dispose(false);
 }
}


X64 kezelő
public static class X64Handler
{
  public static bool IsX64 { get { return IntPtr.Size == 8; } }
  public static string Display(bool suppress32) { return IsX64 ? "x64" : suppress32 ? null : "x86"; }
}