Hello, I have a usb data aquisition device interfaced by mass storage protocol. I open it like: hEcgDrive=CreateFile("\\\\.\\g:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH | FILE_FLAG_OVERLAPPED, NULL); for communication I use DeviceIoControl(hEcgDrive, IOCTL_SCSI_PASS_THROUGH_DIRECT, .... with a 'custom' scsi operation code as wrapper. On Wine-1.1.30. under UHU linux (2.6.23.9-1) the program can open the device only if run as root. If run as plain user, CreateFile gives ERROR_ACCESS_DENIED (5). I also tried with FILE_ALL_ACCESS, no luck. I would appreciate any experience shared to solve this access issue! The device has a basic filesystem with a txt file, so it is mapped under dosdevices, ok. And an other question: is it possible to open "\\\\.\\PHYSICALDISK2, this way no filesystem is needed, and the user is not confused with the apperance of a new drive. Under windows I follow the later strategy with success! Thank you, Gyula
Wine is layered on top of normal Linux APIs and thus has all the limitations of a normal Linux app. If a program requires raw device access to lets say /dev/sda, the user either needs root permissions or needs to be a member of a group which has raw device access.
szivibuvi wrote:> Hello, > > I have a usb data aquisition device interfaced by mass storage protocol. I open it like: > > hEcgDrive=CreateFile("\\\\.\\g:", > GENERIC_READ | GENERIC_WRITE, > FILE_SHARE_READ | FILE_SHARE_WRITE, > NULL, > OPEN_EXISTING, > FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING | > FILE_FLAG_WRITE_THROUGH | FILE_FLAG_OVERLAPPED, > NULL); > > for communication I use > > DeviceIoControl(hEcgDrive, > IOCTL_SCSI_PASS_THROUGH_DIRECT, > .... > with a 'custom' scsi operation code as wrapper. > > On Wine-1.1.30. under UHU linux (2.6.23.9-1) the program can open the device only if run as root. If run as plain user, CreateFile gives ERROR_ACCESS_DENIED (5). >This is the clue you need. You need to change permissions of the device ioctl (/dev entry) so that your user can access it OR add your user to the groups with permissions to the device mount point. James McKenzie
Thanks, after changing the permissions (chmod 666 /dev/sdb) now the CreateFile succeeds, but now DeviceIoControl stops with ERROR_NOACCESS (998). For non-root, ofcourse. For root it still works. Where should I try to change further permissions? Thanks, Gyula
szivibuvi wrote:> Thanks, after changing the permissions (chmod 666 /dev/sdb) now the CreateFile succeeds, but now DeviceIoControl stops with ERROR_NOACCESS (998). For non-root, ofcourse. For root it still works. > Where should I try to change further permissions?Try with newer Wine. Also try without these flags: FILE_FLAG_WRITE_THROUGH | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING