public static unsafe bool Seek(IntPtr driverHandle, int track) { tagFD_SEEK_PARAMS seekParams = new tagFD_SEEK_PARAMS() { cyl = (byte)(track >> 1), head = 0 }; uint dwRet; return(DeviceIoControl(driverHandle, IOCTL_FDCMD_SEEK, (IntPtr)(&seekParams), (uint)sizeof(tagFD_SEEK_PARAMS), IntPtr.Zero, 0, out dwRet, IntPtr.Zero)); }
public static unsafe int ScanTrack(IntPtr driverHandle, int track, UpperSideHead upperSideHead) { tagFD_SEEK_PARAMS seekParams = new tagFD_SEEK_PARAMS() { cyl = (byte)(track >> 1), head = upperSideHead == UpperSideHead.Head1 ? (byte)(track & 1) : (byte)0 }; uint dwRet; DeviceIoControl(driverHandle, IOCTL_FDCMD_SEEK, (IntPtr)(&seekParams), (uint)sizeof(tagFD_SEEK_PARAMS), IntPtr.Zero, 0, out dwRet, IntPtr.Zero); tagFD_SCAN_PARAMS scanParams = new tagFD_SCAN_PARAMS() { Flags = 0, Head = (byte)(track & 1) }; tagFD_SCAN_RESULT scanResult = new tagFD_SCAN_RESULT(); bool r = DeviceIoControl(driverHandle, IOCTL_FD_SCAN_TRACK, (IntPtr)(&scanParams), (uint)sizeof(tagFD_SCAN_PARAMS), (IntPtr)(&scanResult), (uint)sizeof(tagFD_SCAN_RESULT), out dwRet, IntPtr.Zero); int error = !r?Marshal.GetLastWin32Error() : 0; ScanResult scanResultNew = new ScanResult(scanResult); return(error); }