نرم افزار کار با پورت USB و مدیریت فلش مموری
در چند ماه گذشته روی سورسی کار می کردیم که قابلیت مدیریت پورت یو اس بی را داشته باشد
خب مشکلاتی در این کار داشتیم که با تلاش و مطالعه فراوان از سایت های خارجی و کمک اساتید دانشگاه توانستیم تا حدودی آن ها را رفع کنیم . ازجمله مشکلاتی که درگیر آن بودیم کمبود منابع در این زمینه بود. یعنی سورسی یا نمونه کدی تقریبا وجود نداشت که بتوانیم از آن به طور کلی استفاده کنیم ...
در آخر هم مجبور شدیم قید برنامه نویسی از طریق کار با پورت را بزنیم و با استفاده از برنامه نویسی زیرکانه اقدام به کنترل فلش مموری کنیم. که در ادامه توضیح خواهم داد که چه کردیم.
کارهایی که ما قصد داشتیم انجام بدهیم این موارد بود...
1- اگر فلش مموری به سیستم اتصال پیدا کرد برنامه به صورت RUNTIME بتواند آن را تشخیص دهد
خب ما این کار از دو بخش تشکیل شد: تشخیص عادی فلش و قسمت بلادرنگ
برای تشخیص عادی فلش ما مجبور شدیم از برنامه نویسی پورت استفاده نکنیم به دلیل محدودیت هایی که ویژوال بیسیک در این زمینه دارد و به صورت زیرکانه ای از شی درایو برای کنترل این قسمت استفاده کردیم که کارساز هم بود.
برای بلادرنگ بودن هم از تایمر استفاده کردیم که کار راحتی بود ولی خب یک سری مشکلات هم داشت مثلا اشغال فضای حافظه تقریبا زیاد ...
2- در مرحله قبلی ما فقط می توانستیم یک فلش و با یک نام را کنترل کنیم و بلادرنگ تشخیص دهیم... حال اگر فلش دوم یا سوم هم به سیستم اتصال پیدا کرد چه باید می کردیم...؟
این کار هم تقریبا آسان بود فقط کافی بود نام درایو قبلی (در صورت وصل بودن فلش اول) پیدا می کردیم و به برنامه میگفتیم که خب یک فلش وجود دارد و این فلش تازه اضافه شده فلش دوم است.... به همین ترتیب تا چهار فلش را می توانستیم انجام دهیم...
3- نمایش دادن ایکون مربوط به هر فلش و حالت گرافیکی برنامه
ما برای این قسمت در نظر گرفتیم که از آیکون فلش مموری استفاده کنیم و بگوییم که اگر فلش اول به سیستم متصل شد ایکون مربوط به این فلش در کنار system tray برنامه ظاهر شود... البته ن در خود سیستم تری . بلکه در قسمت بالای آن به صورت جداگانه ای نمایان شود... همین طور برای فلش های بعدی هم همین کار را انجام دادیم...مشکلی که در این جا داشتیم بدست آوردن مقیاس آن منطقه بود یعنی ما باید آیکون یا همان عکس فلش را در محلی در سمت راست و قسمت پایین قرار می دادیم بطوری که روی نوار وظیفه نیفتد... خب این کار را با دستور screen به راحتی انجام دادیم...یکم جمع و تفریق به این قسمت اضافه کردیم تا اگر فلش بعدی متصل شد درست کنار ایکون فلش قبلی نمایان شود...
تا اینجا شد چیزی که ما ساختیم... ولی خب قطعا تنها همین موارد کم مد نظرمون نبود... البته یادم رفت بگم که ما یک قسمت بر روی هر ایکون اضافه کردیم تا کاربر با کلیک بر روی آن بتواند فلش را به صورت امن Remove کند که خب این کار هم چند ساعتی وقت گرفت. مواردی بود که در طراحی اولیه برنامه به آن فکر کرده بودیم و قرار بود که یک به یک انجام شود که متاسفانه به دلیل گرفتاری های بنده نتوانستم بیشتر ازاین ادامه دهم ... مواردی مثل:
1- حذف حداقل یک فایل مخرب به طور مثال فایل اتوران از فلش وصل شده بصورت بلادرنگ و قبل از باز شدن فلش....
2- ایجاد یک موتوز جست جوی محتوایی فلش ... طریقه کارش هم این طور در نظر گرفته بودیم که اگر فلش متصل شد به صورت خودکار تمامی فایل های داخل آن به صورت تفکیک شده در اختیار کاربر قرار بگیرد و یا کاربر بنواند با سرچ کردن موارد خود را پیدا کند... البته مواردی هم بود که میخواستیم در این قسمت اضافه کنیم مثلا برنامه تشخیص دهد که فلش وارد شده در حال پر شدن است و به کاربر پیغام دهد و اگر کاربر اجازه داد تمامی پوشه ها را به صورت زیپ کند تا فلش حجم بیشتری پیدا کند... و مواردی دیگری مانند این ها
3- در بحث امنیتی میخواسیم مواردی ایجاد کنیم مثلا پاک کردن رد و پای فلش وصل شده از سیستم... خب همه ما میدانیم که وقتی فلش یا هر وسیله ای به سیستم متصل می شود یک رد و پا از ان در رجیستری ثبت می شود. مثلا برای فلش نام فلش و زمان وصل شدن آن به سیستم در رجیستری ثبت می شود. ما میخواستیم با اجازه کاربر این مورد را پاک کنیم ...
4- ...
در کل طرح خوبی بود و ارزش کار کردن هم داشت و دارد و همین طور که توضیح دادم میتوان با کمی سعی و خلاقیت به موارد آن افزود این ایده می تواند تا جایی پیش برود که کنترل و مانتیتورینگ دقیق بر روی پورت ایجاد کرد و در آخر میتواند آن را بصورت تحت شبکه قرار داد تا تمامی فلش های متصل شده به هر شبکه ای تحت نظارت باشد و ادمین بتواند هر کاری که خواست با فلش کلاینت ها انجام دهد.... خب تمامی این کار ها را می توان انجام داد ولی یک مشکل اساسی وجود داشت. و آن هم خود ویژوال بیسیک بود(ما برنامه نویسی بر روی پورت انجام دادیم بدون برنامه نویسی پورت)... همینطور که میدانید این پروژه به سمتی ادامه پیدا کرد که ویژووال بیسیک قدرتی در این زمینه نداشت و اگر زبان دیگری مثل سی شارپ بود شاید کمتر وقت صرف این کار می شد و راحت تر هم می توانستیم این کار را انجام دهیم...
دوستانی که میخوان این برنامه را تا آنجایی که ادامه دادیم دریافت کنند و به عنوان پروژه روی آن کار کنند به ایمیل بنده اطلاع دهند... و اگر نکته یا مورد یا ایده خاصی دارید که بتواند به این پروژه کمک کنند لطفا در نظرات اطلاع دهید...
برگرفته از وبلاگ : VBLINK