Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Floste
Thema: Suche eine saubere Lösung: zwei Methoden durch eine dynamische ersetzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Vielleicht bringt dich folgender code weiter:

public Type GetLargerType(Type a, Type b)
{
    int sizeA=Marshal.SizeOf(a);
    int sizeB=Marshal.SizeOf(b);
    return (sizeA≥sizeB)? a:b;
}

Du musst allerdings beim typ char in kombination mit Marshal.SizeOf etwas aufpassen^^

Thema: Ist der Ententest (Duck Test) ein überzeugendes oder ein wackeliges Argument?
Am im Forum: Smalltalk

Eigendlich machen wie menschen dauernd bloß "ententests". Nur dass wir dabei wesentlich mehr merkmale beachten, sodass die sicherheit deutlich steigt, aber wann kann man sich jemals einer sache 100% und nicht nur 99,99% sicher sein? Es gibt einfach keine absolut sichere möglichkeit etwas zu erkennen.

Thema: 64 Bit DotNet Programm als 32 Bit ausführen.
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

a) Du compilierst es als x86
b) Du schreibst einen loader, den du als x86 compilierst

Thema: Schulaufgabe Bruteforce Problem mit webBrowser
Am im Forum: GUI: Windows-Forms

Zitat


                webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);

Du bist gleich in 2 fettnäpfchen auf einmal getreten:
1.) Das event sollte man nur einmal abbonieren, sonst wird der handler mehrfach ausgeführt
2.) Du abbonierst erst NACH dem navigate

Bist du sicher, dass es so schlau ist, soviele navigates hintereinander zu machen? Ich würde das eher im completed-handler machen.
Zitat
In einer boolschen (Member)variablen merken, wenn du durchgekommen bist, und diese in die Abbruchbedingung mit aufnehmen.
break; bzw. return; ?(

for(int stelle=0;;stelle++)
{
    if(stelle≥odometer.Length)return;
    if(++odometer[stelle]≥charactersLength)
        odometer[stelle]=0;
    else
        break;
}

Thema: Parallelen Zugriff auf verkettete Liste (Add/Remove) korrekt synchronisieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

:D, wie sie alle meine snippets verlinken^^

Zitat
Die kannst du dir aber sicher einfach in C# nachbauen.

Ganz so einfach geht das eben nicht. Problem ist, dass CompareExchange in .net nur primitive typen bis 64 bit oder einzelne referenzen austauschen kann. Auf einem 64bit-system braucht man aber theoretisch 65 bit, um sowas zu direkt implementieren. Ansonsten muss man eben rumtrixen:

a) Einen immutable referenztyp zwischenschalten
b) Assemblercode in c# einbauen (^.^)
c) Davon ausgehen, dass gchandles niemals ihr erstes bit gesetzt haben

Option a sieht da doch noch am freundlichsten aus, kommt aber lustigerweise auf zommis option 2 raus^^


class MarkableReference<T>
{
    public MarkableReference(T value, bool marked)
    {
        this.Value=value;
        this.Marked=marked;
    }

    public T Value{get;private set;}
    public bool Marked{get;private set;}
}

Die klasse ist immutable, sodass man compare and swap anwenden kann^^

Thema: Interlocked modify & threadsichere events
Am im Forum: .NET-Komponenten und C#-Snippets

Haha, wurde auch langsam zeit....

Thema: [erledigt] Tao-Framework: Unvollstaendige Darstellung bei mehrfacher Formerzeugung
Am im Forum: Grafik und Sound

Und wenn du statdessen vor jedem rendern und vor jedwedem erzeugen oder anfassen der font (natürlich seperate fontobjekte je form verwenden) jeweils dauernd das entsprechende MakeCurrent aufrufst, dann hilft es nix?

Thema: Hotkey-Klasse
Am im Forum: .NET-Komponenten und C#-Snippets

Du brauchst zwingend eine nachrichtenschleife. Die klasse darf nur innerhalb eines gui-threads verwendet werden, nicht in der console: Ersetz mal Console.ReadLine(); Durch System.Windows.Forms.Application.Run(); dann hast du quasi nen guithread^^

Thema: [erledigt] Hashtable mit Liste -> verschiedene Kopien eines Objekts???
Am im Forum: Rund um die Programmierung

Du schreibst hashtable, die beste implementierung einer hashtable in .net ist ein Dictionary<TKey,TValue>, auch wenn das an deinem problem nichts ändert.

"List<UserObject-Pointer>" Was bedeutet das? Wie ist UserObject-Pointer implementiert? (hoffentlich kein struct^^)

Thema: [erledigt] Tao-Framework: Unvollstaendige Darstellung bei mehrfacher Formerzeugung
Am im Forum: Grafik und Sound

Nunja auch wenn ich zugegebnermaßen den thread nicht ganz gelsen habe kommt mir bei den bildern sofort ein verdacht:

Bei opengl hat man ja jeweils nen kontext. Dieser kontext wird jeweils für den aktuellen thread festgelegt und bezieht sich auf das fenster, für das er erzeugt wurde.

Wenn du also eine textur laden willst oder zeichnen willst, musst du immer dafür sorgen, dass du den richtigen context gesetzt hast (sowohl beim laden alsauch beim zeichnen)!
Und wenn du eine textur mit dem kontext von fenster 1 geladen hast, dann solltest du diese nicht im fenter 2 verwenden!

Den context zu wechseln ist nicht schwer:
Nativ heißt die api wglMakeCurrent und wird in wrappern gerne als device.MakeCurrent() eingebunden (musst dir raussuchen).

Thema: Einfacher Updater für Programme
Am im Forum: .NET-Komponenten und C#-Snippets

Eigentlich lädt dein code nur eine datei aus dem netz runter. Es steckt aber noch einiges mehr dahinter.
1.) Application.StartupPath ist nicht immer ein besonders guter ort, um soeine datei zwischenzuspeichern
2.) Einen updater verstehe ich so, dass er nur updated, wenn es auch was zu updaten gibt -> Prüfung fehlt
3.) Bei sowas sind signaturen sehr zu empfehlen. Eine bekanntere software hat mal ihre webseite geändert, woraufhin dann nicht so ganz seiöses update aus dem netz geladen wurde, was für den nutzer aber nicht erkennbar war, bis es schon zu spät war... Leider auch bei mir

Thema: Form.Region - bessere Qualität ?!
Am im Forum: GUI: Windows-Forms

Naja mit der Winapibekommt man schon schöne Übergänge und so hin:

A lovely goldfish desktop pet (using alpha-PNG and GDI+)
Per Pixel Alpha Blend in C#

Hat aber den unschönen Nebeneffekt, dass kein WM_PAINT mehr gesendet wird. Das heißt in der Praxis:
1. Untergeordnete Steuerelemente werden überhaupt nicht gezeichnet, obwohl sie immernoch bedienbar sind
2. Übliches OnPaint wird niemals aufgerufen.

Um das zu umgehen ist wirderum reichlich Trixxerei nötig, aber es hat sich jemand die Mühe schon gemacht:
An Alpha Channel Composited Windows Form with Designer Support

Alternativ unterstützt WPF das auch von Haus aus, ohne unschöne Nebeneffekte^^

Thema: Screen Scraping Flashanwendungen
Am im Forum: Rund um die Programmierung

Es ist wahrscheinlich nicht so schlau, sowas in einem öffentlich anzubieten und man sollte darauf achten, auch bei den Anbietern kein Aufsehen zu erregen: Nicht zu oft/regelmäßig anfragen, keine komischen Useragents, etc...

Zitat
Wenn ich im Firebug Netzwerkereignisse sehe, was passiert dann genau in Flash?
Es macht einen Http-Request über die Api des Browsers.
Lass doch mal meinen HttpSaver nebenher laufen (Der ist übrigends für den Anbieter komplett unsichtbar, da er nichts an der Kommunikation ändert.)
Außerdem ist Wireshark durchaus zu empfehlen.

Thema: Screen Scraping Flashanwendungen
Am im Forum: Rund um die Programmierung

Warum probierst du nicht mal meinen Vorschlag,

Zitat
die Seiten einmal in Firefox bei aktivierem Firebug-Plugin anzuzeigen.

Dann siehste, was nachgeladen wird.

Falls das nix bringt, dann lad dir das Flashteil runter und jag es durch nen flash decompiler.

Thema: Screen Scraping Flashanwendungen
Am im Forum: Rund um die Programmierung

Zitat
von der Flash-Anwendung über eine unverschlüsselte Verbindung nachgeladen und du schaffst es daher diese Daten auszulesen

Dazu empfiehlt es sich, die Seiten einmal in Firefox bei aktivierem Firebug-Plugin anzuzeigen. Dann einfach gucken, was so unter Netzwerkverbindungen erscheint^^
Alternativ ist Wireshark für sowas gedacht, ist aber wesentlich komplizierter und umfangreicher.

Mein HttpSaver macht quasi sowas ähnliches, ist aber eher für Musik- und Videostreams und so gedacht.

Aber herbivore hat schon Recht mit seinen Bedenken.

Thema: wie viele verschiedenen möglichkeiten gibt's innerhalb eines binären 8x8 feldes? [==> 2^64]
Am im Forum: Rund um die Programmierung

Zitat
ähm - bist du dir sicher?
mit 8 farben vielleicht, aber mit nur 2 farben erscheint mir die anzahl der möglichkeiten viel zu hoch...

Nö, das stimmt so. Nennt man auch kombinatorische Explosion

Zitat
Diese Zahl steht auch in UInt64.MaxValue - ein Bild in dieser Größe ist ja nichts anderes als eine 64 Bit-Zahl Augenzwinkern
Dazu habe ich nur folgendes zu sagen

"There are 2 hard problems in computer science: caching, naming, and off-by-1 errors"

Thema: 16-Bit-Anwendung (Fortran) unter Win7(64Bit) verwenden/integrieren oder neu compilieren?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Was macht denn dein 16 bit Programm?

Thema: Problem mit Speicherverbrauch bei mehrfachem Aufruf einer Methode (P/Invoke)
Am im Forum: Rund um die Programmierung


1.) Es fehlt einmal Marshal.FreeHGlobal(ipHandlePointer); vor dem return
2.) RtlFreeUnicodeString
3.) Auf DuplicateHandle muss immer CloseHandle folegen, genauso auf OpenProcess

Tipp: Wenn du die Handles durchgehst, dann kannst du die Dateihandles bereits von anderen unterscheiden: ObjectTypeNumber
Um an die richtige Konstante zu gelangen musst allerdings ersmal ein Dateihandle gefunden haben. Du kannst dazu entweder eine datei selber öffnen (FileStream.Handle) und das handle in der Liste suchen, oder dir beim ersten Fund eines Dateihandles die Id merken. Das Spart enorm Aufrufe von DuplicateHandle.

Außerdem finde ich es mit dem Marshal deutlich unübersichtlicher als mit unsafe Pointern.

Thema: Programm mehrfach ausführen, ohne mehrfachen Speicherverbrauch
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Auf welcher Technologie basiert es? Aber tendenziell sehe ich da eher schwarz, esseiedenn der Ersteller hat daran gedacht.

Thema: Programm (EXE) bis zu bestimmter Größe mit Dummy-Code/-Bytes auffüllen
Am im Forum: Rund um die Programmierung

Man kann mit einem Hexeditor Nullen oder wasauchimmer hinter ne exe schreiben, stört nicht, macht die Datei aber größer.

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Das erste Snippet hat mich schmunzeln lassen. Aber gut, ich hatte solche Lösungen aber nicht ausgeschlossen^^
, Du bist dran...

Was mir grade noch auffällt: Da is nicht der Syncblock (der is ein IntPtr davor, sic), sondern die Typenangabe, aber das ist in diesem Falle egal^^

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Ich hab mir mal ne Aufgabe ausgedacht. Sie ist auf jeden Fall lösbar und das mit einer überschaubaren Zahl an Codezeilen. Ziel ist es, eigenen Code einzufügen, sodass Gelöst auf der Console ausgegeben wird.

using System;
using System.Runtime.InteropServices;

class Program
{
    static void Main(string[] args)
    {
        string ShouldBe = "This String";
        string IsAtStart= "R4nd0om data or somthing nobody cares about....";
        IntPtr buffer = Marshal.StringToHGlobalUni(IsAtStart);
        int hash = ShouldBe.GetHashCode();//Doppelte Prüfung hält besser

        WriteToBuffer(buffer, ShouldBe);

        string newString = Marshal.PtrToStringUni(buffer);
        Marshal.FreeHGlobal(buffer);

        if (newString == ShouldBe && newString.GetHashCode() == hash)
            Console.WriteLine("Gelöst");
        else
            Console.WriteLine("Nicht gelöst, in \"buffer\" steht: "+newString);
        Console.ReadLine();
    }

    //Hinter dem Ende dieses Kommentars darf der Code geändert werden.
    //Der nachfolgende vorgegebene Code ist als Hinweis gedacht und darf gelöscht/bearbeitet werden.
    //Folgende Ausdrücke dürfen dabei NICHT verwendet werden:
    //unsafe, Marshal, DllImport, extern, Reflection, GetType, typeof, Type, Program, Console, Main

    [StructLayout(LayoutKind.Explicit)]
    struct SomeStruct
    {
        //TODO
    }

        //TODO

    private static void WriteToBuffer(IntPtr buffer, string ShouldBe)
    {
        //TODO
    }
}

Thema: DLL Injection Schutz
Am im Forum: Rund um die Programmierung

Es steht sogar in der Beschreibung von meinem Progrämmchen, was man für ein Handle braucht... Lies doch einfach.

Thema: Prozess schützen (Nur dokumentierte Apis, keine Hooks)
Am im Forum: .NET-Komponenten und C#-Snippets

Beschreibung:

Schade, dass ich diese Methode erst heute entdeckt habe:
Der Windows-Kernel hat einen Objektmanager, welcher diverse Objekte und deren Handles verwaltet. Prozesse sind solche Objekte.
Ein Prozess hat standardmäßig ein Handle auf sich selbst, welches das Recht WRITE_DAC hat. Dieses kann man nutzen, um die Zugriffsrechte auf das Prozess-Objekt zu ändern. Man kann z.B. hinzufügen, dass für alle Nutzer bestimmte Rechte gesperrt werden. Wenn jetzt ein NEUES Handle mit diesen Rechten angefordert wird, dann wird der Zugriff gesperrt. (Vorher erstellte Handles sind aber afaik weiterhin gültig).

Jedenfalls lassen sich so die Funktionen TerminateProcess (welches der Taskmanager verwendet) und CreateRemoteThread (aka dll injection) und WriteProcessMemory und einiger anderer Kram blockieren.

Es funktioniert nur, wenn der Benutzer nicht zuviele (Admin-)Rechte hat.
Die Idee hat ansonsten noch 3 Schwächen:
1.) Es können Handles erstellt werden, bevor der Code ausgeführt wird. Dies lässt sich eventuell umgehen, indem man einen weiteren Prozess startet und diesen sofort schützt, noch bevor er die Ausführung beginnt.
2.) Mit dem Debug Privilege (welches Existiert, um als Admin Systemservice zu debuggen) lassen sich trotzdem Handles erstellen.
3.) Ich bin mir nicht ganz sicher, aber ich glaube, mit SetWindowsHookEx lässt es sich ebenfalls umgehen.

Die Idee ist nicht von mir, aber ich bin wohl der erste, der das in C# umsetzt.

Man könnte es noch erweitern, dass man auch die Threadobjekte schützt, das wird aber etwas komplizierter.

Thema: DLL Injection Schutz
Am im Forum: Rund um die Programmierung

Du musst irgendwie mitbekommen wenn jemand das versucht oder es von Windows sperren lassen:
-Die Benutzerrechte/Zugriffsrechte auf deinen Prozess setzten, sodass windows sperrt, aber das ist wahrscheinlich schwer möglich, da dein Programm wahrscheinlich als Standardnutzer laufen soll...
[EDIT] Ich hab mal was gebastelt in der Richtung: Prozess schützen (Nur dokumentierte Apis, keine Hooks)

Daneben gibt es noch Hooking, das ist aber unsauber. Es gibt verschidene Alternativen, wo man das machen könnte:
-Im eigenen Prozess Loadlibrary Hooken, Nicht allzu sicher, aber relativ einfach und sogar aus c# heraus machbar
-Zentral als Kernelmode Treiber, geht aber nur in x86 und man kann sehr viel falsch machen
-Zentral im Systemservice csrss (Kann mit etwas Trixerei umgangen werden, man muss ich aber sehr auskennen um damit was zu machen)
-In jedem einzelnen Prozess (die umständlichste und dämlichste Methode)

Dann gibt es unter Windows noch geschützte Prozesse für DRM. Man muss sie aber mit einem (gekauften) Zeitifikat signieren.

Thema: Merken wenn Javascript deaktiviert wird und Mediaplayer stoppen
Am im Forum: Web-Technologien

Never trust the Client: Es gibt Leute (z.B. mich), die auf Streamingseiten meißt eh die Url kopieren und im lokalen Player anschauen.
Egal wie du es anstellst, wenn das nicht auf der Serverseite blockiert wird, dann ist es grundsätzlich nicht sicher. (Sieht man ja daran, wie sicher DRM ist, lol)
Du brauchst also einen Server, der das unterstützt oder ein einfacheres Bezahlmodell (z.B. Pauschalpreis für den ganzen Film.)

Thema: Installation: Veränderbare Daten wohin?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat
wie ich Rechte setze das weiß ich schon, das Problem ist die UAC.
Und ich brauche zentral eine Stelle an der ich Daten schreiben kann, unabhängig vom Benutzer.

Hä!?

Ich habe grade mal einen ordner mit gesetzten Rechten in "C:\Program files" erstellt.
Es geht! Ich habe keine probleme mit UAC! Einfach eine Berechtigung hinzufügen, dass "Jeder" (ohne die Anführungsstiche natürlich) auf den Ordner zugreifen kann UND dass diese Berechtigung für alle Unterelemente übernommen werden soll. Klappt wunderbar.

Thema: Assembly im AssemblyBuilder abbilden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich kann mich zommi nur anschließen: Mono.Cecil
Noch ein Blogeintrag zum Thema.

Thema: Hohe CPU-Auslastung mit GDI+ reduzieren
Am im Forum: Grafik und Sound

Zitat
Gibt es irgendwelche Tricks/Tips um die CPU-Last beim Zeichnen zu reduzieren?
Winforms is halt viel Softwarerendering, nimm WPF für die GPU oder reduziere deine Gui soweit wie möglich...

Außerdem solltest du vermeiden, auf ein Bitmap zu zeichnen. Pictureboxen sind nicht zum Zeichnen!!

Thema: Installation: Veränderbare Daten wohin?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Es gibt die Möglichkeit, die Zugriffsrechte von Dateien und Verzeichnissen so zu setzten, dass alle Benutzer Schreibrechte haben. Das ist allerdings potentiell gefährlich, je nach Inhalt.
Eines meiner Spiele macht es so.
Das Framework bietet dafür Apis.