diff options
Diffstat (limited to 'README.win32')
-rw-r--r-- | README.win32 | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/README.win32 b/README.win32 new file mode 100644 index 00000000..4d64c085 --- /dev/null +++ b/README.win32 @@ -0,0 +1,247 @@ +Introduction +============ +The win32 port of sg3_utils contains those utilities that are _not_ specific +to Linux. One utility for listing available devices, sg_scan, has a +Windows-specific version for this port. + +The dd variants from the sg3_utils package (e.g. sg_dd) rely on too many +Linux idiosyncrasies to be easily ported. A new package called 'ddpt' +contains a utility with similar functionality to sg_dd and is available +for Windows. + +The Windows port uses the Microsoft SCSI Pass Through (SPT) interface. +It has two variants: "SPT" where data is double buffered; and "SPTD" +where data pointers to the user space are passed to the OS. Only Windows +2000 and later (i.e. not 95, 98 or ME) support SPT. + +Two build environments are catered for: cygwin (see www.cygwin.com) and +MinGW ("Minimalist GNU for Windows", see www.mingw.org). Both are based in +the gcc compiler (although other C compilers should have little problem with +the source code). Cygwin is a more sophisticated, commercial product that +results in executables that depend on cygwin1.dll . No licensing is required +since sg3_utils is open source (with either BSD or GPL licenses) but users +will need to fetch that dll. On the other hand MinGW (and its companion MSYS +shell) builds freestanding console executables. The Unix library support is +not as advanced with MinGW which has led to some timing functions being +compiled out when sg3_utils is built for MinGW. + +In later versions of Windows these utilities may need to be "run as +Administrator" for disks and other devices to be seen. If not those devices +will simply not be found as calls to query them fail with access permission +problems. + +Supported Utilities +=================== +Here is a list of utilities that have been ported: + sg_bg_ctl + sg_compare_and_write + sg_decode_sense + sg_format + sg_get_config + sg_get_elem_status + sg_get_lba_status + sg_ident + sg_inq [dropped ATA IDENTIFY DEVICE capability] + sg_logs + sg_luns + sg_modes + sg_opcodes + sg_persist + sg_prevent + sg_raw + sg_rdac + sg_read_attr + sg_read_block_limits + sg_read_buffer + sg_read_long + sg_readcap + sg_reassign + sg_referrals + sg_rep_pip + sg_rep_zones + sg_requests + sg_reset_wp + sg_rmsn + sg_rtpg + sg_safte + sg_sanitize + sg_sat_identify + sg_sat_phy_event + sg_sat_read_gplog + sg_sat_set_features + sg_scan [this is Windows specific] + sg_seek + sg_senddiag + sg_ses + sg_ses_microcode + sg_start + sg_stpg + sg_stream_ctl + sg_sync + sg_timestamp + sg_turs + sg_unmap + sg_verify + sg_vpd + sg_wr_mode + sg_write_buffer + sg_write_long + sg_write_same + sg_write_verify + sg_write_x + sg_zone + +Most utility names are indicative of the main SCSI command that they execute. +Some utilities are slightly higher level, for example sg_ses fetches SCSI +Enclosure Services (SES) status pages and can send control pages. Each +utility has a man page (placed in section 8). There is summary of the mapping +between utility names and the SCSI commands they execute in the COVERAGE +file. An overview of sg3_utils can be found at: +https://sg.danny.cz/sg/sg3_utils.html . +A copy of the "sg3_utils.html" file is in the "doc" subdirectory. + +Some man pages have examples which use Linux device names which hopefully +will not confuse Windows users. + +Two pass-through variants +========================= +The sg_pt_win32.c file uses the Windows SCSI Pass Through interface. +That is often shortened to SPT or SPTI. There are two DeviceIoControl() +ioctl variants provided: IOCTL_SCSI_PASS_THROUGH and +IOCTL_SCSI_PASS_THROUGH_DIRECT. The former involves double handling of +data (and perhaps an upper limit on the data length associated with +one SCSI command; MS documentation mentions 16 KB). The "direct" +variant passes a pointer from the user space and to be faster looks +and more versatile. + +However the "direct" variant has potentially (unquantified) alignment +requirements and may not be (well) implemented by the hardware driver. +In practice some users have reported errors (e.g. 1117: a non-descript +IO error) when the direct variant is used. + +Hence the non-direct variant is the default. The default size limit +on the data buffer is set at 16 KB but if the user asks for more +the data buffer will be extended. The OS or the hardware drivers +may reject the extended data buffer but we tried. + +The package can be built using the direct variant with: + ./configure --enable-win32-spt-direct +rather than: + ./configure +prior to the 'make' call. + +In sg3_utils version 1.31 run-time selection of the direct or indirect +interface was added with the scsi_pt_win32_direct(int state_direct) +function declared in sg_pt.h. The default is indirect unless +'./configure --enable-win32-spt-direct' was used in the build. If +'state_direct' is 1 then the direct interface is used and if it is 0 +the indirect interface is used. + +Both sg_read_buffer and sg_write_buffer can transfer buffers larger +than 16 KB. So in sg3_utils version 1.31, they use this new function +to set direct interface mode. This is regardless of whether or +not "--enable-win32-spt-direct" is given to ./configure . + +Details +======= +Most of the ported utilities listed above use SCSI command functions +declared in sg_cmds_*.h headers . Those SCSI command functions are +implemented in the corresponding ".c" files. The ".c" files pass SCSI +commands to the host operating system via an interface declared in sg_pt.h . +There are currently five implementations of that interface depending on +the host operating system: + - sg_pt_linux.c + - sg_pt_freebsd.c + - sg_pt_osf1.c [Tru64] + - sg_pt_solaris.c + - sg_pt_win32.c + +The ASPI32 interface which requires a dll from Adaptec is not supported. + +The sg_scan utility is a special version for Windows and it attempts to show +the various available storage device names, one per line. Here is an example +of sg_scan's output: + +# sg_scan +PD0 [C] FUJITSU MHY2160BH 0000 +PD1 [DF] WD 2500BEV External 1.05 WD-WXE90 +CDROM0 [E] MATSHITA DVD/CDRW UJDA775 CB03 + +Here is an example with added bus type: + +# sg_scan -b +PD0 [C] <Ata > FUJITSU MHY2160BH 0000 +PD1 [DF] <Usb > WD 2500BEV External 1.05 WD-WXE90 +CDROM0 [E] <Atapi> MATSHITA DVD/CDRW UJDA775 CB03 + +Here is an example with added SCSI adapter scan: + +# sg_scan -b -s +PD0 [C] <Ata > ST380011A 8.01 +PD1 <Scsi > SEAGATE ST373455SS 2189 +PD2 <Scsi > ATA ST3160812AS D +PD3 <Scsi > SEAGATE ST336754SS 0003 +CDROM0 [F] <Atapi> HL-DT-ST DVDRAM GSA-4163B A103 +TAPE0 <Scsi > SONY SDT-7000 0192 + +SCSI0:0,0,0 claimed=1 pdt=0h dubious ST380011 A 8.01 +SCSI1:0,0,0 claimed=1 pdt=5h HL-DT-ST DVDRAM GSA-4163B A103 +SCSI2:0,6,0 claimed=1 pdt=1h SONY SDT-7000 0192 +SCSI5:0,17,0 claimed=1 pdt=0h SEAGATE ST373455SS 2189 +SCSI5:0,19,0 claimed=1 pdt=0h ATA ST3160812AS D +SCSI5:0,21,0 claimed=1 pdt=0h SEAGATE ST336754SS 0003 +SCSI5:0,112,0 claimed=0 pdt=10h LSI PSEUDO DEVICE 2.34 + +The storage devices scanned are PhysicalDrive<n> (shortened form PD<n> used), +CDROM<n> (which includes DVD and BD drives) and TAPE<n>. There is also an +optional SCSI adapter scan with device names of the form SCSI<n>:<b>:<t>:<l> . +These only come into play for devices that are not claimed by one of the +storage class drivers. The "LSI PSEUDO DEVICE" device above is an example +of an unclaimed device. The SCSI adapter scan does not show USB and IEEE +1394 connected devices. + +Volume names (e.g. "C:") that match a storage device (or perhaps a +partition within that device) are shown in brackets. Notice there can be +zero, one or more volume names for each storage device. Up to four volume +names are listed in brackets, if there are more a "+" is added after the +fourth. + +Several utilities have conditional compilation sections based on +the SG_LIB_MINGW define. For those who want to try native C compilers +on Windows setting the SG_LIB_MINGW define may help. + +Build environments +================== +This package uses autotools infrastructure with the now common +"./configure ; make ; make install" sequence needed to build and install +from the source found in the tarball. Two Windows environments for building +Unix code are supported: cygwin and MinGW. If the "./configure" sequence +fails try using the ./autogen.sh prior to that sequence. The executables +produced are console applications that can be executed in either a cygwin, +MSYS or "cmd" shell. Various build options are available by giving +command line options to "./configure", see the INSTALL file for generic +information about the build infrastructure. + +MinGW can be used to cross built on some Redhat (Linux) platforms. After +loading the cross build packages, the ./configure call in the normal +autotools sequence should be replaced by either mingw32-configure or +mingw64-configure. These scripts will set up the environment for +the cross build and then call ./configure (so this invocation should be +made in the top level of the untarred source). Options given to either +script (e.g. --enable-win32-spt-direct) will be passed through to +./configure . + +Binary and Text files +===================== +A problem has been reported with binary output being written in a MinGW +environment (or executables build by MinGW). Windows has a concept of text +and binary files which is not found in Unix. Recent versions of MinGW +default to opening files in text mode. This can lead to binary output +(such as when the '--raw' option is given) having 0xa (i.e. LF) translated +to 0xd,0xa (i.e. CR,LF). sg3_utils version 1.26 attempts to fix this +problem by changing what it knows to be binary output files to "binary +mode" with the setmode() Windows command. + + +Douglas Gilbert +6th June 2020 |