PDA

View Full Version : محدود کردن دسترسی به پوشه



egoldashraf
یک شنبه 14 مرداد 1386, 20:28 عصر
من برنامه ای نوشتم که از چند تا فایل دیگه که در کنار exe برنامه هستن استفاده میکنه
دنبال یه راهی هستم که کاربر نتونه به فایل ها جداگانه دسترسی داشته باشه.
بعضی جاها هم دیدم که یک پوشه رو به یک فایل .tmp تبدیل میکنن یا اسمی برای پوشه میذارن که ویندوز اون پوشه رو باز نمیکنه.
ممنون میشم اگه راهنماییم کنید.

egoldashraf
دوشنبه 15 مرداد 1386, 21:35 عصر
دوستان کسی راهی به ذهنش نمیرسه؟ جاهای زیادی دیدم که این کار انجام میشه. مخصوصا توی سی دی هایی که اتو ران دارن.

hdv212
سه شنبه 16 مرداد 1386, 02:11 صبح
یه پوشه ی جدید بساز و اسمش رو دقیقا همینو بنویس :

Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}
به این صورت فولدرت به صورت Control Panel در میاد و دیگه کسی نمیتونه به محتویات فولدرت دسترسی داشته باشه.(ولی از طریق کد میتونی به فایلهایی که توی این پوشه وجود دارن دسترسی داشته باشی)

once4ever
سه شنبه 16 مرداد 1386, 10:36 صبح
به این صورت فولدرت به صورت Control Panel در میاد و دیگه کسی نمیتونه به محتویات فولدرت دسترسی داشته باشه
جالب بود تا وقتی که کسی نمیتونست rename کنه ;)

hdv212
سه شنبه 16 مرداد 1386, 14:30 عصر
جالب بود تا وقتی که کسی نمیتونست rename کنه
این تکنیک زمانی به درد میخوره که بتونی با چند ترفند دیگه ترکیبش کنی، مثلا زمانی که روی سی دی ریخته میشه، باید تعدادی فایل خراب توی این فولدر بریزی که دیگه روی هارد کپی نشه و کاربر نتونه تغییر نامش بده.

mohammad272005
پنج شنبه 18 مرداد 1386, 15:34 عصر
با Security Descriptor فایل یا فولدر کار کن. به سادگی ممکنه. به MSDN یه نگاهی بنداز.

Mohammadreza Heidari
پنج شنبه 18 مرداد 1386, 20:03 عصر
من یک راه حل جداگانه توصیه میکنم البته اگه مشکلت فقط این هست که به فایل ها کاری نداشته باشن.

فایل های مورد نظر برنامه خودت رو هنگام نصب به System32 ویندوز بریز فکر نمیکنم کسی حوصله پیدا کردن فایل های تو رو توی System32 داشته باشه.

من و دوستام به این طور روش ها مبتدی گرایی میگیم . :لبخند::قهقهه:

mohammad272005
جمعه 19 مرداد 1386, 00:16 صبح
حوصله پیدا کردن فایل های تو رو توی System32 داشته باشه
اگه از این روش استفاده میکنی، شاخه fonts بهتره چون فولدرها اونجا لیست نمی شن و شما باید حتما از طریق command prompt سراغشون بری.

once4ever
جمعه 19 مرداد 1386, 08:54 صبح
با Security Descriptor فایل یا فولدر کار کن. به سادگی ممکنه. به MSDN یه نگاهی بنداز.

این چجوریه؟!

Mohammadreza Heidari
جمعه 19 مرداد 1386, 18:15 عصر
اگه از این روش استفاده میکنی، شاخه fonts بهتره چون فولدرها اونجا لیست نمی شن و شما باید حتما از طریق command prompt سراغشون بری.

این خیلی بهتره.:لبخندساده:

egoldashraf
شنبه 20 مرداد 1386, 00:18 صبح
اگه از این روش استفاده میکنی، شاخه fonts بهتره چون فولدرها اونجا لیست نمی شن و شما باید حتما از طریق command prompt سراغشون بری.


تنها مشکلی که هست اینه که این اطلاعات 600 mb هست. قطعا کسی وقت اضافه نداره که من بخوام اینکار رو بکنم !!

hdv212
شنبه 20 مرداد 1386, 01:40 صبح
همون راه حلی که بهت گفتم، از همش بهتره، توی خیلی از سی دی هایی که تو بازار هست از این تکنیک هم استفاده شده، خودمم استفاده کردم، البته گفتم اینو باید با تکنیک های دیگه ترکیب کنی، میتونی با برنامه ی wtmCDProtect سکتورهای خراب توی اون فولدر بریزی و ایمیج اون رو با cdRwin 3.4 رایت کنی تا کسی نتونه کپیش کنی، یا میتونی با برنامه ی tzCopyProtection حجم فایلتو به 2 گیگ برسونی تا دیگه کسی نتونه کپیش کنه، یا .....
اینم یکی دیگه :

My Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D}

mohammad272005
یک شنبه 21 مرداد 1386, 23:05 عصر
using System;
using System.IO;
using System.Security.AccessControl;

namespace FileSystemExample
{
class FileExample
{
public static void Main()
{
try
{
string fileName = "test.xml";

Console.WriteLine("Adding access control entry for "
+ fileName);

// Add the access control entry to the file.
AddFileSecurity(fileName, @"DomainName\AccountName",
FileSystemRights.ReadData, AccessControlType.Allow);

Console.WriteLine("Removing access control entry from "
+ fileName);

// Remove the access control entry from the file.
RemoveFileSecurity(fileName, @"DomainName\AccountName",
FileSystemRights.ReadData, AccessControlType.Allow);

Console.WriteLine("Done.");
}
catch (Exception e)
{
Console.WriteLine(e);
}
}

// Adds an ACL entry on the specified file for the specified account.
public static void AddFileSecurity(string fileName, string account,
FileSystemRights rights, AccessControlType controlType)
{


// Get a FileSecurity object that represents the
// current security settings.
FileSecurity fSecurity = File.GetAccessControl(fileName);

// Add the FileSystemAccessRule to the security settings.
fSecurity.AddAccessRule(new FileSystemAccessRule(account,
rights, controlType));

// Set the new access settings.
File.SetAccessControl(fileName, fSecurity);

}

// Removes an ACL entry on the specified file for the specified account.
public static void RemoveFileSecurity(string fileName, string account,
FileSystemRights rights, AccessControlType controlType)
{

// Get a FileSecurity object that represents the
// current security settings.
FileSecurity fSecurity = File.GetAccessControl(fileName);

// Add the FileSystemAccessRule to the security settings.
fSecurity.RemoveAccessRule(new FileSystemAccessRule(account,
rights, controlType));

// Set the new access settings.
File.SetAccessControl(fileName, fSecurity);

}
}
}

egoldashraf
سه شنبه 23 مرداد 1386, 22:55 عصر
آقای Mohammad272005 ،
فکر نکنم با کد شما بشه یه پوشه رو غیر قابل دسترسی کرد. (امتحان کردم نشد)
اگه درست میگم راه دیگه ای ندارید؟

mohammad272005
چهارشنبه 24 مرداد 1386, 01:04 صبح
ولی دوست من، من الان مدتیه که از همین کد برای فولدرهام استفاده می‏کنم.

egoldashraf
چهارشنبه 24 مرداد 1386, 01:14 صبح
من این کد رو روی یک پوشه امتحان کردم ولی به راحتی با یه دوبار کلیک ساده باز شد.
ممکنه نمونه یه برنامه ساده رو برام بذارید؟

mohammad272005
چهارشنبه 24 مرداد 1386, 02:29 صبح
یه New Folder تو :D بساز
یه Console Application بساز و اونو توش Paste کن:

using System;
using System.IO;
using System.Security.AccessControl;
namespace FileSystemExample
{
classFileExample
{
publicstaticvoid Main()
{
try
{
string dirName = @"D:\New Folder";
DenyAccess(dirName);
//AllowAccess(dirName);
Console.WriteLine("Done.");
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
privatestaticvoid AllowAccess(string dirName)
{
Console.WriteLine("Removing access control entry from "
+ dirName);
// Remove the access control entry from the file.
RemoveFileSecurity(dirName, Environment.UserName,
FileSystemRights.ReadData, AccessControlType.Deny);
}
privatestaticvoid DenyAccess(string dirName)
{
Console.WriteLine("Adding access control entry for "
+ dirName);
// Add the access control entry to the file.
AddFileSecurity(dirName, Environment.UserName,
FileSystemRights.ReadData, AccessControlType.Deny);
}
// Adds an ACL entry on the specified file for the specified account.
publicstaticvoid AddFileSecurity(string fileName, string account,
FileSystemRights rights, AccessControlType controlType)
{

// Get a FileSecurity object that represents the
// current security settings.
FileSecurity fSecurity = File.GetAccessControl(fileName);
// Add the FileSystemAccessRule to the security settings.
fSecurity.AddAccessRule(newFileSystemAccessRule(ac count,
rights, controlType));
// Set the new access settings.
File.SetAccessControl(fileName, fSecurity);
}
// Removes an ACL entry on the specified file for the specified account.
publicstaticvoid RemoveFileSecurity(string fileName, string account,
FileSystemRights rights, AccessControlType controlType)
{
// Get a FileSecurity object that represents the
// current security settings.
FileSecurity fSecurity = File.GetAccessControl(fileName);
// Add the FileSystemAccessRule to the security settings.
fSecurity.RemoveAccessRule(newFileSystemAccessRule (account,
rights, controlType));
// Set the new access settings.
File.SetAccessControl(fileName, fSecurity);
}
}
}

تو هر اجرا بین
DenyAccess(dirName);
//AllowAccess(dirName); switch کن

hdv212
چهارشنبه 24 مرداد 1386, 02:50 صبح
mohammad272005 جان تکنیک عالی ای بود، دستت درد نکنه، ولی آخه دیگه نمیشه فولدر رو جایی کپی کرد، مثلا بخواهیم این فولدر رو پس از Secure کردن بریزیم روی سیدی نمیشه، اجازه ی هیچ کاری رو به ما نمیده، این بنده خدا هم روی سی دی میخواد بریزه.

egoldashraf
چهارشنبه 24 مرداد 1386, 03:18 صبح
دقیقا مشکل همینه. میخوام روی سی دی کسی اطلاعات توی پوشه رو نبینه !
راه قبلی hdv212 راه خوبی بود ولی خیلی ساده با یه برنامه اطلاعات توی پوشه رو کپی کردم.
میخوام راهی باشه که حداقل کاربران ابتدایی نتونن محتویات پوشه رو ببینن

mohammad272005
جمعه 26 مرداد 1386, 03:18 صبح
دوست من Security Description هر فایل یا فولدری تو FAT تگهداری می‏شه و FAT هر درایوی مختص خودشه. (منظور از FAT نوع NTFS اونه)

PC2st
جمعه 26 مرداد 1386, 10:14 صبح
دقیقا مشکل همینه. میخوام روی سی دی کسی اطلاعات توی پوشه رو نبینه !

دوست من Security Description هر فایل یا فولدری تو FAT تگهداری می‏شه و FAT هر درایوی مختص خودشه.

برنامه هائی مثل CD writer ها باید چنین کاری رو انجام بدند...!؟

egoldashraf
جمعه 26 مرداد 1386, 13:01 عصر
برنامه هائی مثل CD writer ها باید چنین کاری رو انجام بدند...!؟

دوست عزیز منظورتون استفاده از روش mohammad272005 توسط cd writer هاست؟

PC2st
جمعه 26 مرداد 1386, 13:17 عصر
بله، ممکنه بعضی از برنامه ها باشند که اینکار رو بکنند و براتون در سی دی رایت کنند.
(چند نمونه دیدم که عمل قفل گذاری و یا برزگ کردن حجم فایل بطور غیر واقعی (مثلا تا 2 گیگ) را انجام میدهند...، و در رابطه با مخفی بودن پوشه، ممکنه چنین چیزی هم وجود داشته باشه.

egoldashraf
جمعه 26 مرداد 1386, 13:33 عصر
من هم دقیقا دنبال همینم. مهم نیست این کار رو از طریق کد نویسی حتما انجام بدم. مهم اینه که پوشه اطلاعاتم روی cd محفوظ باشه

PC2st
جمعه 26 مرداد 1386, 15:06 عصر
فکر کنم برنامه CD Secure 2.0 اون چیزی باشه که احتیاج دارید... برای دانلود در گوگل سرچ کنید.

hdv212
جمعه 26 مرداد 1386, 15:34 عصر
چند نمونه دیدم که عمل قفل گذاری و یا برزگ کردن حجم فایل بطور غیر واقعی (مثلا تا 2 گیگ) را انجام میدهند...، و در رابطه با مخفی بودن پوشه، ممکنه چنین چیزی هم وجود داشته باشه.
من که اینارو توی پستهای قبلی گفتم، گفتم که میتونی از برنامه ی tzCopyProtection برای بالا بردن حجم اطلاعات تا 2gb استفاده کنی و یا اینکه از برنامه ی wtmCdProtect برای اضافه کردن سکتورهای خراب به فایل مورد نظرت استفاده کنی و در نهایت اونو با cdRwin 3.4 رایت کنی.

برای مخفی کردن فایل در سیدی هم یه image از فایلهات تهیه کن، این کار رو میتونی با UltraISO انجام بدی، در این برنامه در قسمتی که فایل image رو بهت نشون میده، در قسمت header لیست مورد نظر فایل مورد نظرت رو میتونی hide کنی. اینطوری فولدر مورد نظرت روی سیدی hide میشه، ولی با برنامه ای مثل isoBuster دیده میشه. ولی در کل چیز خوبیه. من تمام اینارو با هم ترکیب کردم، چیز خوبی از کار در اومد.

PC2st
جمعه 26 مرداد 1386, 16:20 عصر
برای مخفی کردن فایل در سیدی هم یه image از فایلهات تهیه کن، این کار رو میتونی با UltraISO انجام بدی، در این برنامه در قسمتی که فایل image رو بهت نشون میده، در قسمت header لیست مورد نظر فایل مورد نظرت رو میتونی hide کنی.

CD Secure 2.0 برای مخفی کردن اطلاعات در سی دی بکار میره.

egoldashraf
یک شنبه 28 مرداد 1386, 00:24 صبح
یه مشکلی که هست اینه که تمام راههای بالا توسط UltraISO Premium Edition 8.6 تست شده اند و نا موفق بودن.
این برنامه هم توی خیلی و مجموعه های نرم افزار موجوده و خیلیها باهاش کار میکنن.
این برنامه رو چکار کنم؟

PC2st
یک شنبه 28 مرداد 1386, 00:47 صبح
http://www.bamzi.net/CdSecurity/

http://www.persianforum.net/forum_posts.asp?TID=12985

hdv212
یک شنبه 28 مرداد 1386, 02:10 صبح
egoldashraf عزیز، نرم افزار UltraISO، فقط برای ساخت و دستکاری Image ها به کار میره، از UltraISO فقط برای مخفی کردن اطلاعات استفاده کن، بقیه ی مراحل، با همون ابزارهایی که گفتم صورت میگیره.

mohammad272005
دوشنبه 29 مرداد 1386, 01:34 صبح
Directory Structure توی سیستم فایلی، حاوی اطلاعاتی در زمینه کلاستر آغازین هر فایل یا فولدر، سایز اون و از این قبیل چیزهاست. من مستندات خاصی در این زمینه ندارم ولی می‏دونم برای اینکه سیستم عامل هردفعه برای بدست آوردن سایز فایل، الاف نشه، با ایجاد و تغییر اون فایل، اطلاعات اون رو up-to-date نگه می‏داره. CD هم که Read-Onlyی به این ترتیب اگه برنامه CD-Writer، موقع Write، اندازه فایلی رو 2ترابایت هم اعلام کنه تو (Directory Structure بنویسه)، قاعدتا هربار که شما سایز فایل رو از OS می‏خواین، مقدار 2ترابایت رو تحویل می‏گیرین.