Tape Drive IO calls failure in specific environment
I am trying to run tape calls in one of my tape setups. But PrepareTape and GetTapeStatus calls are failed even after getting a successful handle.
The following is the sample code I am using,
HANDLE tapeHandle = CreateFile(tapeName, GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE | FILE_FLAG_BACKUP_SEMANTICS, 0);
if (tapeHandle > 0)
{
DWORD prepareTApeSuccess = PrepareTape(tapeHandle, TAPE_LOAD, FALSE);
if (prepareTApeSuccess == NO_ERROR)
{
cout << "Prepare Tape successsfully executed" << endl;
}
else
{
cout << "Prepare Tape Failed with the error :" << prepareTApeSuccess <<"::"<< GetLastError() << endl;
}
}
In the above code, PrepareTape returns ERROR_NO_MEDIA_IN_DRIVE error always.
Then in the CreateFile, I have changed the CreateFile as below,
CreateFile(tapeName, GENERIC_ALL, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_ARCHIVE | FILE_FLAG_BACKUP_SEMANTICS, 0); //(removed FILE_SHARE_READ | FILE_SHARE_WRITE)
and called GetTapeStatus function, but it returns the same 1112 (ERROR_NO_MEDIA_IN_DRIVE).
So I am stuck here. I am trying this code in the following environment,
Tape Library: HPE Tape Library
Tape Drive: HPE LTO Ultrium -8
Machine: Windows 2019 (tape Library is connected to this machine)
The same code is working in other environments. Anything I need to check in code or environment side.