मैं प्रोग्रामेटिक रूप से फ़ोल्डर के लिए फ़ाइल अनुमति बनाने की जांच कैसे करूं? फ़ाइल अनुमति संशोधित करें? फ़ाइल अनुमति हटाएं?
GetNamedSecurityInfo
लौटाता है कि मैं C:\Program Files
में लिख सकता हूं लेकिन यूएसी का कहना है कि Access Denied (5)
मैं एक्सेस अनुमतियों को कैसे प्रभावी ढंग से निर्धारित कर सकता हूं?मैं संशोधित अनुमतियों को प्रोग्रामेटिक रूप से कैसे जांचूं?
मेरे कोड:
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;
* अनुमति प्राप्त करने के लिए माफी मांगना आसान है * –
'प्रोग्राम फ़ाइलें' के लिए क्षमा की आवश्यकता नहीं है। वर्चुअल स्टोर में विंडोज़ लिखने वाली फाइल। – barbaris
के लिए क्या? अगर आपके पास एक जीयूआई है जहां आप उस जानकारी को प्रदर्शित करना चाहते हैं, तो आपको यह पता लगाना होगा कि क्या आपके पास अनुमति है, आपके पास कोई विकल्प नहीं है; यदि आपको वास्तव में * लिखना * कुछ चाहिए, तो कुछ भी कोशिश नहीं कर रहा है: एक अस्थायी फ़ाइल बनाएं और फिर इसे हटा दें। मुझे संदेह है कि कुछ भी वास्तव में भरोसेमंद है, संकेत: कौन सा विश्वसनीय रूप से कह सकता है कि यदि आपके पास सर्वर सॉफ़्टवेयर सांबा है, तो मैप किए गए नेटवर्क ड्राइव पर लेखन पहुंच है? कॉन्फ़िगरेशन फ़ाइलों तक पूर्ण पहुंच के साथ भी यह मुश्किल हो सकता है! –