PDA

View Full Version : غير فعال كردن درايو CD



ali_mohamadi8928
یک شنبه 28 مهر 1387, 11:23 صبح
سلام دوستان .
يك سوال راجع به غير فعال كردن درايوها ي CD داشتم . اين كار رو با رفتن به Device Manager ميشه انجام داد . به طوري كه اول وارد Device Manager ميشيم و سپس بر روي درايو CD مورد نظرمون كليك ميكنيم و بعد از راست كليك كردن بر روي اون Disable رو انتخاب ميكنيم . با اين كار درايو CD مورد نظر كلا غير فعال ميشه و هيچ كاري نميشه باهاش كرد .

خب چه جوري ميشه با كد نويسي همين مراحل رو انجام داد بدون نياز به رفتن به Device Manager ؟؟ هر چي گشتم در موردش چيزي پيدا نكردم ... :افسرده:

vcldeveloper
یک شنبه 28 مهر 1387, 16:44 عصر
function LockCDDrive(DriveLetter: string; DoLock: Boolean): LongBOOL;
const
IOCTL_STORAGE_MEDIA_REMOVAL = 2967556; //Its value wasn't defined by Delphi
type
PREVENT_MEDIA_REMOVAL = ^TPREVENT_MEDIA_REMOVAL;
TPREVENT_MEDIA_REMOVAL = record
PreventMediaRemoval : Boolean;
end;
var
DriveHandle : HWND;
BuffPointer : PREVENT_MEDIA_REMOVAL;
BytesReturned: Cardinal;
begin
Result := False;
try
DriveHandle := CreateFile(PAnsiChar('\\.\' + DriveLetter),
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_SYSTEM,
0);
if DriveHandle <> 0 then
begin
New(BuffPointer); //Get memory for input buffer
BuffPointer^.PreventMediaRemoval := DoLock; //Set value of input buffer
Result := DeviceIOControl(DriveHandle,
IOCTL_STORAGE_MEDIA_REMOVAL,
BuffPointer,
SizeOf(PREVENT_MEDIA_REMOVAL),
nil,
0,
BytesReturned,
nil);

end;
finally
if BuffPointer <> nil then Dispose(BuffPointer);
if DriveHandle <> 0 then CloseHandle(DriveHandle);
end;
end;

ali_mohamadi8928
یک شنبه 28 مهر 1387, 19:27 عصر
با سلام .

اقاي كشاورز من به صورت زير تابع ذكر شده رو فراخواني ميكنم .


LockCDDrive('H:',TRUE);

ولي اصلا درايو H كه درايو DVD هست هيچ تغييري نميكنه و به راحتي كارش رو انجام ميده .

مشكل از كجا ميتونه باشه ؟

vcldeveloper
دوشنبه 29 مهر 1387, 06:02 صبح
من این کد را از داخل یکی از یونیت های تقریبا قدیمی خودم پیدا کردم. رسم الخطش شبیه کدهای خودم نیست، پس احتمالا آن موقع این کد را از جایی در اینترنت پیدا کردم و در برنامه خودم استفاده کردم.
در هر حال، من این کد را آن زمان برای CD Drive آزمایش کردم و مشکلی نداشت. بعد از اجرای کد، CD Drive قفل میشد و امکان Eject کردن وجود نداشت.
الان هم که شما گفتید، با DVD Drive خودم آزمایش کردم، باز هم درست عمل کرد و DVD Drive بدرستی غیرفعال شد.

اصلی ترین تابع استفاده شده در آن DeviceIOControl هست. می تونید توضیحات این تابع را در MSDN مطالعه کنید، شاید برای برخی درایوهای خاص لازم باشه که بعضی پارامترهای تابع تغییر کنند.

ali_mohamadi8928
دوشنبه 29 مهر 1387, 14:15 عصر
خيلي ممنون اقاي كشاورز .

من تست كردم . درسته جلوي باز شدن در CD / DVD Drive گرفته ميشه .

ولي من فكر كردم كلا مثل Device Manager ميتونيم اون رو Disable كنيم .

بابت اين كد هم ممنونم . ازش استفاده ميكنم .

اگه كد ديگه اي هم در زمينه ي محافظت از درايو ها ي CD / DVD در ارشيوي كدهاتون دارين لطف كنيد اينجا بزاريد تا من و دوستان بتونيم استفاده كنيم. با تشكر