Chciałbym zakodować funkcję, która mówi mi, czy można WRITE plik/folder do określonej ścieżki, czy nie. Chciałbym to zrobić BEZ zapisywania jakichkolwiek plików na dysk. Czy jest do tego funkcja WINAPI? Dziękuję za pomoc.Pobierz Ograniczenia systemu plików
Odpowiedz
Można użyć GetFileSecurity() i AccessCheck() funkcje. Przeczytaj artykuł Aarona Ballmana na How to Check Access Rights. Dostarczył funkcję CanAccessFolder()
, aby wykonać to, o co prosiłeś.
dziękuję. Tego właśnie szukałem! –
function CheckFileAccess(const FileName: string; const CheckedAccess: Cardinal): Cardinal;
var Token: THandle;
Status: LongBool;
Access: Cardinal;
SecDescSize: Cardinal;
PrivSetSize: Cardinal;
PrivSet: PRIVILEGE_SET;
Mapping: GENERIC_MAPPING;
SecDesc: PSECURITY_DESCRIPTOR;
begin
Result := 0;
GetFileSecurity(PChar(Filename), OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION or DACL_SECURITY_INFORMATION, nil, 0, SecDescSize);
SecDesc := GetMemory(SecDescSize);
if GetFileSecurity(PChar(Filename), OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION or DACL_SECURITY_INFORMATION, SecDesc, SecDescSize, SecDescSize) then
begin
ImpersonateSelf(SecurityImpersonation);
OpenThreadToken(GetCurrentThread, TOKEN_QUERY, False, Token);
if Token <> 0 then
begin
Mapping.GenericRead := FILE_GENERIC_READ;
Mapping.GenericWrite := FILE_GENERIC_WRITE;
Mapping.GenericExecute := FILE_GENERIC_EXECUTE;
Mapping.GenericAll := FILE_ALL_ACCESS;
MapGenericMask(Access, Mapping);
PrivSetSize := SizeOf(PrivSet);
AccessCheck(SecDesc, Token, CheckedAccess, Mapping, PrivSet, PrivSetSize, Access, Status);
CloseHandle(Token);
if Status then
Result := Access;
end;
end;
FreeMem(SecDesc, SecDescSize);
end;
użyć tego jak: if (CheckFileAccess (SysteemGegevens.DFImportPath, FILE_ALL_ACCESS) <> FILE_ALL_ACCESS) następnie
z
const
FILE_READ_DATA = $0001;
FILE_WRITE_DATA = $0002;
FILE_APPEND_DATA = $0004;
FILE_READ_EA = $0008;
FILE_WRITE_EA = $0010;
FILE_EXECUTE = $0020;
FILE_READ_ATTRIBUTES = $0080;
FILE_WRITE_ATTRIBUTES = $0100;
FILE_GENERIC_READ = (STANDARD_RIGHTS_READ or FILE_READ_DATA or
FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE);
FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or
FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE);
FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or
FILE_EXECUTE or SYNCHRONIZE);
FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $1FF;
Czy możesz wyjaśnić, co robi ta funkcja, jakie są parametry wejściowe i jaki jest wynik, proszę? Przy okazji powinieneś sprawdzić wyniki wywołań funkcji Windows API ... – TLama
Wygląda na to, że jest to funkcja przeniesionego CanAccessFolder z powyższej odpowiedzi. –
TLAMA: Przepraszam, dodałem. Benjamin: Nie wiedziałbym, złapał go z naszej bazy kodu –
- 1. Jak wykryć ograniczenia rozmiaru systemu plików poszczególnych plików?
- 2. Ograniczenia rozmiaru pliku i długości linii plików wsadowych systemu Windows
- 3. Pobierz ścieżkę do systemu plików zainstalowanego pakietu kompilatora
- 4. Pobierz ograniczenia układu dla komponentu Java Swing
- 5. SQL Server 2008 - Pobierz ograniczenia tabeli
- 6. Rozmiar bloku systemu plików
- 7. Kronikowanie systemu plików Android
- 8. eksperymentalny :: linker systemu plików
- 9. Gettext bez systemu plików
- 10. Odbiornik systemu plików
- 11. Polecenie Synchronizacja systemu plików dla systemu Windows
- 12. Pobierz aktualny katalog plików wsadowych
- 13. Uwierzytelnianie plików wykonywalnych systemu Windows
- 14. Rozszerzenie Chrome do systemu plików
- 15. Zaawansowane wyszukiwanie plików systemu Windows
- 16. cloudfoundry: jak używać systemu plików
- 17. Szyfrowanie systemu plików dla IOS?
- 18. Jak zmniejszyć ograniczenia procesora dla zasobów systemu kubernetes?
- 19. Pobierz podpisany adres URL pliku od amazon s3 przy użyciu systemu plików Laravel 5.2
- 20. Java - pobierz ścieżkę do "plików programów"
- 21. pobierz wiele plików jako zip w .net
- 22. pobierz liczbę plików zmodyfikowanych w zeszłym miesiącu
- 23. Pobierz listę plików z serwera FTP
- 24. Node.js - System plików pobierz typ pliku
- 25. Pobierz postęp poszczególnych plików za pomocą XMLHttpRequest
- 26. Czy w systemie plików NTFS istnieją ograniczenia długości pliku ścieżki?
- 27. Ładowanie ImageIcon z JAR lub systemu plików
- 28. Jednostka testująca klasę korzystającą z systemu plików
- 29. Pobieranie atrybutów plików z systemu Windows cmd
- 30. Monitorowanie systemu plików za pomocą Haskella
istnieje żadna funkcja, która zrobi. Jeśli potrafisz poruszać się po API bezpieczeństwa, możesz zrobić całkiem niezły krok, sprawdzając to z góry. Zdecydowanie najłatwiejszym sposobem sprawdzenia, czy można napisać do pewnej lokalizacji , jest próba zrobienia tego. –
Mam również do czynienia z tego rodzaju sytuacji. Najpierw oparłem swoje rozwiązanie na sprawdzaniu uprawnień ACL, ale wkrótce doszedłem do wniosku, że jedynym niezawodnym sposobem jest faktycznie spróbować utworzyć plik tymczasowy za pomocą API "GetTempFileName" (lub cokolwiek innego). – kobik
Cóż, włożę CD-ROM, a następnie program, sprawdza ACL. Otrzymujesz prawo do tworzenia plików - ale media po prostu ich nie obsługują. Podobnie jak w przypadku dyskietek chronionych przed zapisem, kart SD itp. ACL to po prostu za mało. Lepiej spróbuj. Ustaw flagi Windows, aby automatycznie usuwać plik przy zamknięciu, jeśli boisz się żyć śmieciami w przypadku błędów. –