Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dateisperre freigeben (https://www.delphipraxis.net/53005-dateisperre-freigeben.html)

mumu 8. Sep 2005 10:33


Dateisperre freigeben
 
Hi, kann mir jemand sagen, wie das Programm Unlocker, es hinbekommt alle Sperren auf eine Datei freizugeben. Wie lautet da der API Befehl?

danke schonma

RavenIV 8. Sep 2005 10:54

Re: Dateisperre freigeben
 
also ich würde mal ganz frech den Entwickler der software fragen...

gruessle

mumu 8. Sep 2005 12:38

Re: Dateisperre freigeben
 
jo, hab ich schon gemacht, hat sich aber noch net gemeldet :-(

naja, ich bin jedenfalls schon so weit:

Delphi-Quellcode:
var hFile      : Cardinal;
    filename   : string;
    FileSizeLow : Cardinal;
    FileSizeHigh: ^Cardinal;
    error      : Cardinal;
begin
  hFile := CreateFile(pchar(fileName),
                   GENERIC_READ,
                   FILE_SHARE_READ or FILE_SHARE_WRITE,
                   nil,
                   OPEN_EXISTING,
                   FILE_ATTRIBUTE_NORMAL,
                   0);
  error := GetLastError();
  ShowMessage(inttostr(error));

  GetMem(FileSizeHigh, SizeOf(Cardinal));
  try
    FileSizeLow := GetFileSize(hFile, FileSizeHigh);
   
    if UnLockFile(hFile, 0, 0, FileSizeLow, FileSizeHigh^) = false then
    begin
      error := GetLastError();
      ShowMessage(inttostr(error));
    end;
  finally
    FreeMem(FileSizeHigh);
  end;
naja also createfile funktioniert ohne probleme, bekomme da keinen fehler.
bei unlockfile jedoch erhalte ich fehlercode: 158
ERROR_NOT_LOCKED
158 The segment is already unlocked.

Die angegebene Datei ist 100 pro gelockt. Das problem ist halt das unlockfile nur bereiche einer datei freigibt, jedoch nicht die Datei als ganze. Da jedoch nur die gesamte Datei gesperrt ist und nicht nur ein bereich, wird unlockfile nicht funktionieren, oder?

jemand noch irgendwelche tipps?

generic 8. Sep 2005 13:16

Re: Dateisperre freigeben
 
Zitat:

The UnlockFile function unlocks a region in an open file. Unlocking a region enables other processes to access the region.

For an alternate way to specify the region, use the UnlockFileEx function.

BOOL UnlockFile(
HANDLE hFile,
DWORD dwFileOffsetLow,
DWORD dwFileOffsetHigh,
DWORD nNumberOfBytesToUnlockLow,
DWORD nNumberOfBytesToUnlockHigh
);

Parameters
hFile
[in] Handle to a file that contains a region locked with LockFile. The file handle must have been created with either the GENERIC_READ or GENERIC_WRITE access right. For more information, see File Security and Access Rights.
dwFileOffsetLow
[in] Low-order word of the starting byte offset in the file where the locked region begins.
dwFileOffsetHigh
[in] High-order word of the starting byte offset in the file where the locked region begins.
Windows Me/98/95: dwFileOffsetHigh must be 0, the sign extension of the value of dwFileOffsetLow. Any other value will be rejected.
nNumberOfBytesToUnlockLow
[in] Low-order word of the length of the byte range to be unlocked.
nNumberOfBytesToUnlockHigh
[in] High-order word of the length of the byte range to be unlocked.
wenn du den gesamten dateilock freigeben willst wird die funktion wohl nicht taugen oder?

aber vieleicht hilft dir die msdn doku.

mumu 8. Sep 2005 13:42

Re: Dateisperre freigeben
 
ja schon, das hab ich ja auch oben geschrieben, damit mir das nicht weiterhelfen wird. msdn hab ich schon ganz schön durchgestöbert, finde leider nichts...

jemand noch ansätze?

muss ich vielleicht einen treiber programmieren, damit das überhaupt funktioniert?!

Olli 8. Sep 2005 16:07

Re: Dateisperre freigeben
 
Habt ihr euch schonmal gefragt, wieso dort eine .sys-Datei liegt? Nicht? Tut das mal! :mrgreen:

Kedariodakon 8. Sep 2005 16:16

Re: Dateisperre freigeben
 
Zitat:

Zitat von Olli
Habt ihr euch schonmal gefragt, wieso dort eine .sys-Datei liegt? Nicht? Tut das mal! :mrgreen:

Wo liegt die? Und was macht eine '*.Sys' Datei?

Bye

Olli 8. Sep 2005 20:09

Re: Dateisperre freigeben
 
Zitat:

Zitat von Kedariodakon
Wo liegt die? Und was macht eine '*.Sys' Datei?

Die liegt im Programmverzeichnis und was genau sie macht, habe ich noch nicht näher analysieren können. Der Treiber wird aber geladen und auch benutzt.

Übrigens: zu den obigen Kommentaren mit UnlockFile() ... Handles sind prozeßspezifisch. Will heißen, daß man erstmal in den fremden Prozeß rein muß ;)

Kedariodakon 9. Sep 2005 16:54

Re: Dateisperre freigeben
 
Wer sperrt die File überhaupt? Das OS oder die Platte selbst (falls die das überhaupt kann)...

Wie kann man überhaupt eine Liste der gesperrten Dateien sehen?

Bye

Olli 9. Sep 2005 17:06

Re: Dateisperre freigeben
 
Zitat:

Zitat von Kedariodakon
Wie kann man überhaupt eine Liste der gesperrten Dateien sehen?

Indem man die Handles des Prozesses auflistet und deren Namen findet. Das geht zwar auch ohne Treiber, aber nur in einem bestimmten Fall. Daher vermutlich der Treiber.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr.
Seite 1 von 6  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz