Microsoft KB Archive/49375

Using Access and Share Modes with DosOpen PSS ID Number: Q49375 Article last modified on 12-19-1989 PSS database name: O_Os2SDK

1.10

OS/2

Summary:

When setting the parameter fsOpenMode to assign the access and share modes for a DosOpen call, a share mode MUST be specified. An access mode may be bitwise ORed with the share mode, as well as one or more miscellaneous open flags.

Refer to the “DosOpen” section of the “Microsoft Operating System/2 Programmer’s Reference Volume 3,” Pages 95-98, for more information on DosOpen.

More Information:

Share modes specify what operations other processes can perform on the opened file. Every DosOpen call must have a share mode specified. The following are the share modes available for DosOpen in OS/2 Version 1.10:

Constant                     Value -- OPEN_SHARE_DENYREADWRITE     0x0010 OPEN_SHARE_DENYWRITE         0x0020 OPEN_SHARE_DENYREAD          0x0030 OPEN_SHARE_DENYNONE          Ox0040 An access mode may be bitwise ORed with the share mode. Access modes specify the operations the opening process may perform on the opened file. The access modes for DosOpen in OS/2 1.10 are as follows:

Constant                     Value -- OPEN_ACCESS_READONLY         0x0000 OPEN_ACCESS_WRITEONLY        0x0001 OPEN_ACCESS_READWRITE        0x0002 There are four other flags that may be ORed with the share mode in OS/2 1.10. These are:

Constant                     Value -- OPEN_FLAGS_NO_INHERIT        0x0080 OPEN_FLAGS_FAIL_ON_ERROR     0x2000 OPEN_FLAGS_WRITE_THROUGH     0x4000 OPEN_FLAGS_DASD              0x8000 When using DosOpen to open a drive with OPEN_FLAGS_DASD (0x8000), an access mode of 10H is also required.

The following is a sample program using DosOpen:


 * 1) include #include #include

void main(void) { USHORT ret = 0; /* return code / USHORT Action; / DosOpen returns action taken / HFILE Handle; / file handle variable */

ret = DosOpen(&quot;direct.c&quot;,&Handle, &Action, 0L, FILE_NORMAL,          FILE_OPEN, OPEN_ACCESS_WRITEONLY | OPEN_SHARE_DENYNONE,           0L);

printf(&quot;Return value = %hu, action = %hu\n&quot;, ret, Action); }

Copyright Microsoft Corporation 1989.