For the record I have solved it thus:
Create a structure in which to store the Owner Name:
[StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi, Size=8)]
public struct BTR_OWNER_NAME
{
public string OwenerName;
}
//Declare a struct var:
BTR_OWNER_NAME ownerBuf;
//Assign the constant in which the Owner Name is held (this contains 6 chars):
ownerBuf.OwenerName = OWNER_NAME;
//Pass the length of the Owner Name +1 for the trailing Binary 0 into var:
dataLen = 7;
// move our owner structure into unmanaged memory block
dataBuffer = Marshal.StringToHGlobalAnsi(ownerBuf.OwenerName);
// and finally issue OPEN (0) operation to Btrieve with the dataBuffer containg the Owner Name:
try
{
bStat = BtrCall.BTRCALL( (ushort)BTROPS.B_OPEN, posBlock, dataBuffer, ref dataLen, keyBuffer, keyLen, keyNum );
}
catch( Exception e )
bStat has been assigned 0, so all is fine and the Btrieve file which has an Owner Name set with access level 0 is now open.