PDA

View Full Version : سوال: اشکال در کد یا مخالفت ویندوز - وقفه ها ؟



MohsenTi
چهارشنبه 16 اردیبهشت 1388, 12:41 عصر
سلام دوستان خسته نباشید
من می خواستم وقفه ی 13 از وقفه های bios رو در VC++ 6 اجرا کنم ولی هی اشکال می گیره در حالی که تحت داس مشکلی نداره (وقفه ی 13 وقفه ی سخت افزاری برای خوندن و نوشتن رو هارد هستش) . راهی برا حل این مشکل هست .

mov ah,02
mov al,01
mov ch,00
mov cl,01
mov dh,00
mov dl,00
mov bx,[x]
int 13h

Nima_NF
چهارشنبه 16 اردیبهشت 1388, 15:02 عصر
وقفه های این چنینی برای زمان Dos بوده است، در ویندوز باید از API ها برای کار با سخت افزار استفاده کنید.

MohsenTi
چهارشنبه 16 اردیبهشت 1388, 15:28 عصر
خب دوست عزیز من چطوری میتونم رو سکتور صفر یک فلاپی یا هارد دیسک و ...
با api بنویسم
میشه توابع رو بمن معرفی کنید ؟

Nima_NF
چهارشنبه 16 اردیبهشت 1388, 19:24 عصر
برتی خواند از درایو سخت افزاری :



HANDLE MyHandle = CreateFile( TEXt("\\\\.\\physicaldrive0"),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);


عدد 0 در physicaldrive0 یعنی اولین دیسک، physicaldrive1 یعنی دومی و ...

برای فلاپی به شکل زیر:



HANDLE MyHandle = CreateFile( TEXt("\\.\A:"), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);


حال که هندل را دریافت کردیم، با استفاده از ReadFile راحت روی آن ها می خوانیم. و با WriteFile هم روی دیسک می نویسیم.



bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ;


اگر مباحث بیشتری، مثل دریافت سکتورهای مخفی و غیره مد نظر هست می توانید از تابع DeviceIoControl استفاده کنید (با پارامتر دوم IOCTL_DISK_GET_PARTITION_INFO_EX)که در آن یک ساختار PARTITION_INFORMATION برگدانده می شود و اطلاعات درایو داده می شود.
برای تنظیم هم از DRIVE_LAYOUT_INFORMATION استفاده می کنیم.


برای جزییات بیشتر از MSDN استفاده کنید. مثلا IOCTL_DISK_GET_PARTITION_INFO_EX یا IOCTL_DISK_GET_PARTITION_INFO را جستجو کنید تا اطلاعات کامل آن ها را مشاهده کنید
کنید.

همگی در هدر فایل windows.h هستند و سایر مباحث پیشرفته در Winioctl.h .

MohsenTi
پنج شنبه 17 اردیبهشت 1388, 23:12 عصر
خیلی از راهنمایی که کردید ممنونم من msdn رو هم بررسی کردم ولی راهی برای اینکه رو هر سکتور هر چیزی که می خوام بنویسم پیدا نکردم
راستش من می خوام بدون اینکه سیستم فایلم فت یا ا ن تی اف اس باشه رو فلاپی بنویسم
و از اولین سکتور شروع به نوشتن کنم

SamaPic
پنج شنبه 17 اردیبهشت 1388, 23:24 عصر
با سلام.
دوست من ویندوز به شما اجازه ی دسترسی مستقیم را نمی دهد.
بنابراین باید از راه های دیگر وارد شد.

MohsenTi
جمعه 18 اردیبهشت 1388, 00:12 صبح
اگه اینطوریه که می گید نرم افزار هایی مثل پارتیشن مجیک از چه راهی استفاده می کنه ؟
اگه ویندوز نزاره اونه چطور به صورت سطح پایین با سخت افزار ارتباط بر قرار می کنند در حالی ویندوز اسمبلی رو محدود کرده

MohsenTi
جمعه 18 اردیبهشت 1388, 19:49 عصر
درسته آخرش نفهمیدم چی شد ولی از راهنمایی هاتون ممنونم