Laden...

UnlockFile function: Was bedeuten die Paramneter?

Erstellt von vitafit vor 11 Jahren Letzter Beitrag vor 11 Jahren 851 Views
vitafit Themenstarter:in
23 Beiträge seit 2011
vor 11 Jahren
UnlockFile function: Was bedeuten die Paramneter?

Guten Abend zusammen,

die Tage werden kürzer, es ist kalt und somit eindeutig Zeit mal wieder etwas zu programmieren. Gesagt, getan bin ich mehr oder minder zufällig auf eine Funktion in der Kernel-32 Lib gestoßen, die mich doch schon etwas neugierig macht. Geht dabei um folgendes:

UnlockFile function

Vorweg weiß ich auch nach einiger Recherche sowie eigener Erfahrungen nach, dass es selten eine saubere Lösung ist, einen bestehenden Zugriff einfach so zu beenden. Nur hin und wieder kommt es vor, dass jenes mehr oder minder unsaubere 3. Anbieter Programm vergisst, die Zugriffe auf Daten ordentlich zu schließen. Daher hat die Funktion schon eine gewisse Existenzberechtigung 😁

Lange Rede kurzer Sinn: Ich hab gewisse Interpretationsschwierigkeiten mit den erwarteten Parametern. Praktischerweise findet sich gleich eine passende Deklaration im Artikel:

[Dllmport("kernel32.dll", SetLastError=true)]
internal static extern bool UnlockFile(IntPtr handle, int offsetLow, int offsetHigh, int countLow, int countHigh);

Leider ist mir nicht so ganz klar, was es mit welchem Parameter auf sich hat. Ich wage einmal eine holprige Interpretation von dem, was ich meine verstanden zu haben:

hFile > Zeiger auf die entsprechende Datei, wie genau wird dieser Handle übergeben?
dwFileOffsetLow / dwFileOffsetHigh > Vermutlich der Einstiegspunkt ab dem "befreit" werden soll?
nNumberOfBytesToUnlockLow / nNumberOfBytesToUnlockHigh > Die Anzahl der zu befreienden Bytes innerhalb der Datei? Lässt sich hier pauschal einfach die ganze Datei "befreien"?

Wäre nett wenn wenn sich jemand unter euch kurz die Mühe machen würde, mir kurz auf die Sprünge zu helfen.

Danke!
Gruß vitafit

16.842 Beiträge seit 2008
vor 11 Jahren

Wenn ich mich richtig erinnere ist UnlockFile dafür gedacht bestimmte Byte-Regionen zu entsperren; nicht für ganze Files. Deswegen auch die Offset-Paramater. Das Handle wiederum repräsentiert die Datei. Das erhälst Du über FindFirstFile / FindNextFile.

Hab Dir dazu auch nen Beispiel in der MSDN gefunden: Locking and Unlocking Byte Ranges in Files
Ob Du damit ganze Files unlockst, indem Du alles "markierst" weiß ich nicht. Ich hab die Methode zwar in meinem APIWrapper integriert aber ehrlich gesagt werf ich eine NotImplementedException 😁

Ich kenne / mache allerdings den weg, dass man Dateien mittels Delay-Optionen verschieben kann, auch wenn diese aktuell in Nutzung sind.
Da wird dann zB nach dem Reboot das Verschieben durchgeführt.