The read/write pointer in a file is a signed 32-bit number. A negative value for ib moves the pointer backward in the file; a positive value moves it forward. DosSetFilePtr cannot be used to move to a negative position in the file.
The signed 32-bit value of the read/write pointer limits raw file system access to the first 2GB of a disk unless the FILE_SECTOR option is specified. FILE_SECTOR indicates that the 32-bit value is in sectors rather than bytes, which allows access to up to 1TB.
DosSetFilePtr cannot be used for a character device or pipe.