The GetTapePosition function retrieves the current address of the tape, in logical or absolute blocks.
DWORD GetTapePosition(
| 
 HANDLE hDevice,  | 
 // handle of open device  | 
| 
 DWORD dwPositionType,  | 
 // type of address to obtain  | 
| 
 LPDWORD lpdwPartition,  | 
 // address of current tape partition  | 
| 
 LPDWORD lpdwOffsetLow,  | 
 // address of low-order 32 bits of tape position  | 
| 
 LPDWORD lpdwOffsetHigh  | 
 // address of high-order 32 bits of tape position  | 
| 
 );  | 
| 
 Value  | 
 Description  | 
| 
 TAPE_ABSOLUTE_POSITION  | 
 The lpdwOffsetLow and lpdwOffsetHigh parameters receive the device-specific block address. The dwPartition parameter receives zero.  | 
| 
 TAPE_LOGICAL_POSITION  | 
 The lpdwOffsetLow and lpdwOffsetHigh parameters receive the logical block address. The dwPartition parameter receives the logical tape partition.  | 
If the function succeeds, the return value is NO_ERROR.
If the function fails, the return value is one of the following error codes:
| 
 Error code  | 
 Description  | 
| 
 ERROR_BEGINNING_OF_MEDIA  | 
 An attempt to access data before the beginning-of-medium marker failed.  | 
| 
 ERROR_BUS_RESET  | 
 A reset condition was detected on the bus.  | 
| 
 ERROR_END_OF_MEDIA  | 
 The end-of-tape marker was reached during an operation.  | 
| 
 ERROR_FILEMARK_DETECTED  | 
 A filemark was reached during an operation.  | 
| 
 ERROR_SETMARK_DETECTED  | 
 A setmark was reached during an operation.  | 
| 
 ERROR_NO_DATA_DETECTED  | 
 The end-of-data marker was reached during an operation.  | 
| 
 ERROR_PARTITION_FAILURE  | 
 The tape could not be partitioned.  | 
| 
 ERROR_INVALID_BLOCK_LENGTH  | 
 The block size is incorrect on a new tape in a multivolume partition.  | 
| 
 ERROR_DEVICE_NOT_PARTITIONED  | 
 The partition information could not be found when a tape was being loaded.  | 
| 
 ERROR_MEDIA_CHANGED  | 
 The tape that was in the drive has been replaced or removed.  | 
| 
 ERROR_NO_MEDIA_IN_DRIVE  | 
 There is no media in the drive.  | 
| 
 ERROR_NOT_SUPPORTED  | 
 The tape driver does not support a requested function.  | 
| 
 ERROR_UNABLE_TO_LOCK_MEDIA  | 
 An attempt to lock the ejection mechanism failed.  | 
| 
 ERROR_UNABLE_TO_UNLOAD_MEDIA  | 
 An attempt to unload the tape failed.  | 
| 
 ERROR_WRITE_PROTECT  | 
 The media is write protected.  | 
A logical block address is relative to a partition. The first logical block address on each partition is zero.
Call the GetTapeParameters function to obtain information about the status, capabilities, and capacities of tape drives and media.