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.