Làm cách nào để kiểm tra tính năng tạo tệp cho thư mục theo chương trình? Sửa đổi quyền đối với tệp? Xóa quyền đối với tệp?
GetNamedSecurityInfo
trả lại rằng tôi có thể viết thành C:\Program Files
nhưng UAC cho biết Access Denied (5)
Làm cách nào để xác định quyền truy cập có hiệu quả?Làm cách nào để kiểm tra các quyền sửa đổi theo chương trình?
mã của tôi:
function GetAccessRights(const FileName: String; ObjectType: SE_OBJECT_TYPE;
var Access: Cardinal): Cardinal;
var
SecDesc: PSECURITY_DESCRIPTOR;
pDacl: PACL;
Trusteee: TRUSTEE_;
begin
result := GetNamedSecurityInfo(PChar(FileName), ObjectType,
DACL_SECURITY_INFORMATION, nil, nil, @pDacl, nil, SecDesc);
if ERROR_SUCCESS = result then
begin
// the pDacl may be NULL if the object has unrestricted access
if pDacl <> nil then
begin
with Trusteee do
begin
pMultipleTrustee := nil;
MultipleTrusteeOperation := NO_MULTIPLE_TRUSTEE;
TrusteeForm := TRUSTEE_IS_NAME;
TrusteeType := TRUSTEE_IS_UNKNOWN;
ptstrName := 'CURRENT_USER';
end;
result := GetEffectiveRightsFromAcl(pDacl^, Trusteee, Access);
end
else
begin
Access := $FFFFFFFF;
result := ERROR_SUCCESS;
end;
if SecDesc <> nil then
LocalFree(Cardinal(SecDesc));
end;
end;
* Thật dễ dàng để yêu cầu sự tha thứ hơn là xin phép * –
Không cần phải tha thứ cho 'Program Files'. Windows ghi tệp trong Cửa hàng ảo. – barbaris
Để làm gì? Nếu bạn có một GUI nơi bạn muốn hiển thị thông tin đó, thì bạn cần tìm hiểu xem bạn có quyền không, bạn không có lựa chọn nào; Nếu bạn cần phải thực sự * viết * một cái gì đó, không có gì đập cố gắng: tạo một tập tin tạm thời và sau đó xóa nó. Tôi nghi ngờ bất cứ điều gì khác là thực sự đáng tin cậy, gợi ý: những người có thể đáng tin cậy nói nếu bạn có quyền truy cập viết trên một ổ đĩa mạng được ánh xạ, khi phần mềm máy chủ là Samba? Ngay cả khi có quyền truy cập đầy đủ vào các tệp cấu hình, nó có thể khó khăn! –