Please have the code below…
---------------------- Start : Code -----------------------------------
#define DEVICE_TO_TEST “\\.\G:” // My CD Drive letter
void LockDevice()
{
HANDLE handl;
GET_LENGTH_INFORMATION lenInfo;
DWORD somevar = 0;
DWORD RetVal = 0;
char str[256];
handl = CreateFile(DEVICE_TO_TEST, GENERIC_READ, FILE_SHARE_READ
, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if (handl == INVALID_HANDLE_VALUE)
{
RetVal = GetLastError();
sprintf(str,“Createfile failed %d”,RetVal);
AfxMessageBox(str);
return;
}
if (!DeviceIoControl(handl, IOCTL_STORAGE_LOAD_MEDIA, NULL,
0, NULL, 0, &somevar, (LPOVERLAPPED) NULL))
{
RetVal = GetLastError();
sprintf(str,“IOCTL_STORAGE_LOAD_MEDIA failed
%d”,RetVal);
AfxMessageBox(str);
CloseHandle(handl);
return;
}
if (!DeviceIoControl(handl, IOCTL_STORAGE_CHECK_VERIFY, NULL,
0, NULL, 0, &somevar, (LPOVERLAPPED) NULL))
{
RetVal = GetLastError();
sprintf(str,“IOCTL_STORAGE_CHECK_VERIFY failed
%d”,RetVal);
AfxMessageBox(str);
CloseHandle(handl);
return;
}
BOOL prev = TRUE; // BOOL is int, BOOLEAN (char) also didn’t
work…
if (!DeviceIoControl(handl, IOCTL_STORAGE_EJECTION_CONTROL,
(LPVOID) &prev,
sizeof(BOOL), NULL, 0, &somevar, (LPOVERLAPPED)
NULL))
{
RetVal = GetLastError(); // Returns 87 (Parameter
incorrect)
sprintf(str,“IOCTL_STORAGE_EJECTION_CONTROL failed
%d”,RetVal);
AfxMessageBox(str);
CloseHandle(handl);
return;
}
CloseHandle(handl);
AfxMessageBox(“Locked”);
}
void UnlockDevice()
{
HANDLE handl;
GET_LENGTH_INFORMATION lenInfo;
DWORD somevar = 0;
DWORD RetVal = 0;
char str[256];
handl = CreateFile(DEVICE_TO_TEST, GENERIC_READ, FILE_SHARE_READ
, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if (handl == INVALID_HANDLE_VALUE)
{
RetVal = GetLastError();
sprintf(str,“Createfile failed %d”,RetVal);
AfxMessageBox(str);
return;
}
BOOL prev = FALSE;
if (!DeviceIoControl(handl,
IOCTL_STORAGE_EJECTION_CONTROL, (LPVOID) &prev,
sizeof(BOOL), NULL, 0, &somevar, (LPOVERLAPPED)
NULL))
{
RetVal = GetLastError();
sprintf(str,“IOCTL_STORAGE_EJECTION_CONTROL failed
%d”,RetVal);
AfxMessageBox(str);
CloseHandle(handl);
return;
}
CloseHandle(handl);
AfxMessageBox(“Unlocked”);
}
---------------------- End : Code --------------------------------------
-----Original Message-----
From: Chuck Batson [mailto:xxxxx@cbatson.com]
Sent: Saturday, November 30, 2002 12:43 AM
Subject: Re: Removable media - IOCTL_STORAGE_EJECTION_CONTROL
Dear Sathya,
If you are able, please post some code for us to look at.
Chuck
----- Original Message -----
From: “Sathyanarayanan Srinivasan”
To: “NT Developers Interest List”
Sent: Friday, November 29, 2002 9:19 PM
Subject: [ntdev] Removable media - IOCTL_STORAGE_EJECTION_CONTROL
> Hi,
>
> (OS : WinXP Professional)
>
> I am trying to “Prevent CD RW/R media removal” using
> IOCTL_STORAGE_EJECTION_CONTROL.
>
> DeviceIoControl( ) itself returns error (Code: 87, Param Incorrect).
>
> Am sure the params are correct.
>
> (Input buff: Address of BOOL var, even with BOOLEAN I tried. Both
> returns 87)
>
> But, IOCTL_STORAGE_MEDIA_REMOVAL returns success with same params
passed
> for IOCTL_STORAGE_EJECTION_CONTROL.
>
> Why IOCTL_STORAGE_EJECTION_CONTROL is NOT working ???
>
> Thanks,
> Sathya