Goldbach
September 5th, 2008, 01:37 AM
I am try to use the following code to get information from CF card that plugs into USB card reader.
DeviceIoControl() return FALSE and GetLastError() return ERROR_SHARING_VIOLATION (32)
If I try to create PhysicalDrive1 (Fixed Hard Drive) and run the same code,
DeviceIoControl() return TRUE.
I don't know why there was a sharing violation error?
struct IDENTIFY_DEVICE_OUTDATA
{
SENDCMDOUTPARAMS SendCmdOutParam;
BYTE Data[IDENTIFY_BUFFER_SIZE - 1];
};
HANDLE hDevice = CreateFile(_T("\\\\.\\PhysicalDrive4"), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE)
return ;
IDENTIFY_DEVICE_OUTDATA sendCmdOutParam = {0};
SENDCMDINPARAMS sendCmd = {0};
sendCmd.irDriveRegs.bCommandReg = ID_CMD;
sendCmd.cBufferSize = IDENTIFY_BUFFER_SIZE;
const DWORD DFP_RECEIVE_DRIVE_DATA = 0x0007C088;
DWORD dwReturned = 0;
BOOL bRet = DeviceIoControl(hDevice, DFP_RECEIVE_DRIVE_DATA, &sendCmd, sizeof(SENDCMDINPARAMS),
&sendCmdOutParam, sizeof(IDENTIFY_DEVICE_OUTDATA), &dwReturned, NULL);
DWORD dwErr = 0;
if (bRet == FALSE)
dwErr = GetLastError();
CloseHandle(hDevice);
DeviceIoControl() return FALSE and GetLastError() return ERROR_SHARING_VIOLATION (32)
If I try to create PhysicalDrive1 (Fixed Hard Drive) and run the same code,
DeviceIoControl() return TRUE.
I don't know why there was a sharing violation error?
struct IDENTIFY_DEVICE_OUTDATA
{
SENDCMDOUTPARAMS SendCmdOutParam;
BYTE Data[IDENTIFY_BUFFER_SIZE - 1];
};
HANDLE hDevice = CreateFile(_T("\\\\.\\PhysicalDrive4"), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE)
return ;
IDENTIFY_DEVICE_OUTDATA sendCmdOutParam = {0};
SENDCMDINPARAMS sendCmd = {0};
sendCmd.irDriveRegs.bCommandReg = ID_CMD;
sendCmd.cBufferSize = IDENTIFY_BUFFER_SIZE;
const DWORD DFP_RECEIVE_DRIVE_DATA = 0x0007C088;
DWORD dwReturned = 0;
BOOL bRet = DeviceIoControl(hDevice, DFP_RECEIVE_DRIVE_DATA, &sendCmd, sizeof(SENDCMDINPARAMS),
&sendCmdOutParam, sizeof(IDENTIFY_DEVICE_OUTDATA), &dwReturned, NULL);
DWORD dwErr = 0;
if (bRet == FALSE)
dwErr = GetLastError();
CloseHandle(hDevice);