PDA

View Full Version : ایجاد یک فایل حذف ناشدنی



Kambiz
یک شنبه 13 مهر 1382, 15:31 عصر
آیا راهی وجود داره که بشه رو ویندوز NT فایلی ایجاد کرد که کاربر با سطح دسترسی Administrator قادر به حذف اون نباشه؟

اگر پردازشهای با سطح دسترسی بالاتر از Administrator بتوانند فایل رو حذف کنند ایرادی ندارد.

SReza1
یک شنبه 13 مهر 1382, 18:40 عصر
بابا تو که استاد مایی
به نظر من اگه بتونی یک جوری فایل inuse کنی نمیشه اصلا پاکش کرد!! در ضمن مگه سطوح دسترسی بالاتر از admin هم داریم

vDelphi
یک شنبه 13 مهر 1382, 19:12 عصر
احتمالاً اکثر کسانی که با Windows xpکار کرده اند تو فولدر c:\program files یه فولدر xerox دیده اند که به هیچ طریقی نمیتوان آنرا حذف کرد، چون همیشه inuse میباشد.
حالا اگه بتوان یه جوری فایل رو به یکی از پروسسهای سیستم مربوط کرد، طوری که همیشه از آن استفاده کند. میتوان امید داشت که غیر قابل حذف شود!
ولی متاسفانه من هم نمی دانم چطور باید این کار رو کرد!! :oops: :oops:

Kambiz
یک شنبه 13 مهر 1382, 19:19 عصر
با این کلمه استاد خجالتم نده آقا رضا. تو این کاری که ما در پیش گرفتیم اگر صد سال هم درگیر باشیم بازم با استادی خیلی فاصله هست.

برای in-use کردن فایل باید یک برنامه در حال اجرا اون فایل رو استفاده کنه. خود برنامه من که قرار نیست همیشه اجرا باشه پس یا باید بی‌خیال این راه شد یا راهی پیدا کرد که یک برنامه سیسمی این فایل رو in-use کنه.

سطح دسترسیهای بالاتری هم هست. مثلا" هسته سیستم عامل (Kernel) بالاترین سطح دسترسی ممکن رو داره. یک Administrator نمی‌تونه یک فایل با سطح دسترسی سیستم رو پاک کنه حتی اگر in-use هم نباشه.

Kambiz
یک شنبه 13 مهر 1382, 19:23 عصر
vDelphi دست به ماشه‌اش سریعتر بود و قبل از من جواب رو داد. :D

SReza1
یک شنبه 13 مهر 1382, 19:44 عصر
خوب حالا جواب چیه؟ :oops:

Kambiz
یک شنبه 13 مهر 1382, 20:56 عصر
خوب حالا جواب چیه؟ :oops:
منظورم این بود که vDelphi قبل از من جواب سوال تو رو داد. سوال اولیه همچنان بی‌جوابه.

JavanSoft
دوشنبه 14 مهر 1382, 00:05 صبح
همانگونه که خودتان فرمودید اگر برنامه ای داشته باشید که نام فایل مورد نظر را دریافت و انرا در حال استفاده نگهدارد این امکان وجود دارد که جلوی حذف شدن گرفته شود

ولی یک سوال مطرح می شود .... چرا می خواهید یک فایل حتی در سطح Admin حذف نشود؟

Kambiz
دوشنبه 14 مهر 1382, 01:32 صبح
همانگونه که خودتان فرمودید اگر برنامه ای داشته باشید که نام فایل مورد نظر را دریافت و انرا در حال استفاده نگهدارد این امکان وجود دارد که جلوی حذف شدن گرفته شود

مشکل این راه حل قبلا" عنوان شده
http://www.barnamenevis.org/forum/viewtopic.php?p=16653#16653


ولی یک سوال مطرح می شود .... چرا می خواهید یک فایل حتی در سطح Admin حذف نشود؟
کاملا" روشنه: نیاز!

Inprise
دوشنبه 14 مهر 1382, 19:52 عصر
برای اینکه فایلی تحت هیچ عنوان پاک نشود باید کاربر
NT AUTHORITY\SYSTEM آن را اجرا کرده باشد . این کاربر ( که معرف کرنل یا کنترلرهای سطح کرنل ویندوز است ) فقط و فقط و فقط زمانی فعال میشود که یکی از ماژولهای مرتبط با کرنل درخواست انجام فعالیتی در سطح کاربرد را صادر نمایند . مختصرا" یک درایور کرنل مود خیلی ساده طراحی کنید که فایل مورد نظر شما را در مواقع مورد نظرتان باز نگه دارد . برای حصول به این مقصود باید DDK - Driver Development Kit- را تهیه کنید که شامل مقادیر معتنابهی هدر سی و تمپلیت طراحی درایورهای سطح هسته ویندوز است .

vDelphi
دوشنبه 14 مهر 1382, 20:37 عصر
آقای Inprise با جوابتون خیلی حال کردم :D
ولی فکر کنم یه راه کم خرج تر هم باشه:
اگر با طرز کار ویروسها آشنا باشین میدونین که ویروسهایی که رو کامپیوتر خودشونو تکثیر می کنن میتونن خودشونو به برنامه های دیگه قلاب کنن! حالا میشه این کار رو با نوشتن یه برنامه کرد که خودشو به یه فایل سیستم وصل می کنه و هر بار که اجرا میشه فایل مورد نظر رو فرا خوانی کنه، استفاده کرد!
اینطوری مشکلات کار با DDK رو هم نداریم! :D

JavanSoft
دوشنبه 14 مهر 1382, 22:51 عصر
ممنون از جناب DelphiArea که اینقدر به من لطف دارند 8)
اما سوال من در مورد ایده ای بود که باعث می گردد چنین نیازی ایجاد شود

Kambiz
دوشنبه 14 مهر 1382, 23:40 عصر
سلام،

اینپرایز عزیز ممنون. فکر کنم راهی که پیشنهاد کردی تنها راه عملی باشه چون قبلا" فایل رو به یک فایل سیستم مرتبط کردم که حاصلی نداشت. البته یک فرقی داشت که سیستم پیغام می‌داد که این فایل به فلان فایل سیستم در ارتباط هست و ممکنه مشکلی ایجاد بشه٬ ولی با این وجود فایل رو راحت حذف می‌کرد. بعدش سعی کردم که Security Descriptor فایل رو تغییر بدم و SID مربوط به System Authority رو بهش انتساب بدم که این هم نشد٬ که دلیلش پیچیدگی قضیه و نابلدی من بود. :(

ولی خوب راستش کار اینقدر مهم نیست که ارزش وقت گذاشتن برای یک Kernel Driver واسط رو داشته باشه.

در هر حال از همه دوستان ممنونم.

Kambiz
دوشنبه 14 مهر 1382, 23:48 عصر
ممنون از جناب DelphiArea که اینقدر به من لطف دارند 8)
اما سوال من در مورد ایده ای بود که باعث می گردد چنین نیازی ایجاد شود
برای جواب به سوال شما باید کل کاری رو که قراره انجام بدم از اول شرح بدم تا دلیل اینکه چرا به چنین چیزی احتیاج پیدا کردم روشن بشه. چون این کار چیزی نیست که به درد شخص دیگه‌ای بخوره برای همین شرح دادنش تنها وقت من٬ شما و دیگران رو ضایع می‌کنه و بس.

جدا از اون در این تاپیک فرض بر اینه که دیگران به سوال من جواب بدن٬ نه اینکه سوالی از من پرسیده بشه که در ارتباط با حل مشکلم نیست. درسته؟

Mohammad_Mnt
سه شنبه 15 مهر 1382, 00:56 صبح
آقا کامبیز . شما می خواید یه نسخه Trial از برنامتون رو توزیع کنید . برای این کار به جای تاریخ سیستم از تاریخ یه فایل استفاده می کنید و اون فایل هم طبیعتا نباید حذف بشه . درسته ؟

Kambiz
سه شنبه 15 مهر 1382, 01:17 صبح
اگر دوباره اون پاسخ (http://www.barnamenevis.org/forum/viewtopic.php?p=16612#16612) رو با دقت بخونی، میبینی که گفتم اون فایل باید یک فایل سیستمی باشه که ویندوز در شروع کار درش چیزی بنویسه. مسلما" یک فایل سیستمی رو نباید حذف کرد. حالا اگر کسی هم اون فایل رو حذف کنه در شروع بعدی ویندوز دوباره ایجاد می‌شه.

از طرف دیگه برای Time Trial نباید تنها به تاریخ یک فایل بسنده کرد. تازه بازم فرض رو بر این بگذاریم که تنها از تاریخ اون فایل استفاده شده باشه٬ در این صورت حذف اون فایل باعث می‌شه که برنامه دیگه نتونه تاریخ رو بدست بیاره و دیگه Time Trial نخواهد بود.

اگر صحبت از این بود که یک فایل رو نشه هک و اصلاح کرد٬ حرفت کاملا" درست بود. اما سوال من فقط درباره جلوگیری از حذف فایل بود. اگر تاریخ یا محتوای فایل تغییر داده بشه برای من هیچ اهمیتی نداره.

و نکته آخر اینکه٬ اگر به فرض اگر قرار بود که از این فایل برای نسخه Time Trial استفاده بشه٬ معقولتر این بود که از یک کلید در رجیستری استفاده کرد و برای جلوگیری از تغییر یا حذف اون سطح دسترسی مورد نیاز برای اون کلید رو سیستم تغییر داد (البته چجوریش رو نمی‌دونم).