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?

Code:
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);