PRB: Block Size Must Be Set Before Doing Tape I/O (165274)



The information in this article applies to:

  • Microsoft Win32 Application Programming Interface (API), when used with:
    • the operating system: Microsoft Windows NT 3.51
    • the operating system: Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP

This article was previously published under Q165274

SYMPTOMS

After you boot the system, Tape I/O functions fail and GetLastError returns 87L (ERROR_INVALID_PARAMETER). The same code begins to work after you run NTBackup or another tape backup program.

CAUSE

This behavior is by design. When you start the system, the tape drivers are not initialized with a value for the tape media block size. Until the system is properly initialized with this information, all tape I/O fails as described above.

RESOLUTION

Once the tape block size is either retrieved or set, then the system allows tape I/O operations to proceed normally. Please note that other conditions may still cause I/O operations to fail.

To avoid this problem, call the SetTapeParameters function to set the MEDIA information or call the GetTapeParameters function to get the MEDIA information. These operations cause the block size to be communicated to the parts of the system that require it.

A well-written program should always set or get the tape block size before issuing tape I/O operations. Programs doing this during initialization will never see the error described above. Getting or setting the tape block size is recommended because this allows a program to allocate I/O buffers with sizes that are multiples of the block size. I/O operations with a buffer size not a multiple of the tape block size will fail as described above.

In Windows NT 3.51, if GetTapeParameters is used to get DRIVE information, the tape block size is propagated to the other parts of the system. Other Windows NT versions require that the MEDIA information be set or retrieved in order to propagate the block size to the other parts of the system.

MORE INFORMATION

This setting is system-wide. Programs may operate successfully without explicitly getting or setting the tape block size if some other program (for example, NTBackup) retrieves or sets the block size first.

Modification Type:MajorLast Reviewed:3/16/2004
Keywords:kbAPI kbBackUp kbKernBase kbprb KB165274